Android

Android 防止機器人驗證 Google圖形驗證 reCAPTCHA

Android 防止機器人驗證 Google圖形驗證 reCAPTCHA

Google在(6/9)釋出了支援Android平台的reCAPTCHA API,Google reCAPTCHA是Google開發的防堵機器人驗證API,原本是設計給網頁使用,後來發現它也可以在APP上使用,這樣在一些例如申請帳號的流程上就能加上它。

文章目錄

  1. reCAPTCHA官網申請金鑰
  2. 導入Safetynet
  3. 布局&方法介紹
  4. 程式碼範例
  5. 效果展示

1.reCAPTCHA官網申請金鑰

官方網站

https://www.google.com/recaptcha/admin

選擇方式(套件是你的包名)

待會要輸入的金鑰

金鑰價格計算

2.導入Safetynet

dependencies {
     implementation 'com.google.android.gms:play-services-safetynet:17.0.1'
}

3.布局&方法介紹

布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:onClick="check"
        android:id="@+id/btn_robot"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="132dp"
        android:text="驗證"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="92dp"
        app:layout_constraintEnd_toEndOf="@+id/btn_robot"
        app:layout_constraintStart_toStartOf="@+id/btn_robot"
        app:layout_constraintTop_toBottomOf="@+id/btn_robot" />


</androidx.constraintlayout.widget.ConstraintLayout>
方法介紹
添加金鑰
verifyWithRecaptcha("6LfnVckbAAAAAHdhba1jkIZXymHK14MlOn03V4st")

4.程式碼範例

import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.safetynet.SafetyNet

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun check(view: View) {
        val result: TextView = findViewById(R.id.result)
        SafetyNet.getClient(this)
            .verifyWithRecaptcha("6LfnVckbAAAAAHdhba1jkIZXymHK14MlOn03V4st")
            .addOnSuccessListener { response ->
                if (response.tokenResult?.isNotEmpty() == true) {
                    result.text = "認證成功"
                }
            }.addOnFailureListener {
                result.text = "認證失敗"
            }
    }
}

5.效果展示

發表迴響