📜  如何在 Android 中集成 Google reCAPTCHA?(1)

📅  最后修改于: 2023-12-03 15:38:12.665000             🧑  作者: Mango

如何在 Android 中集成 Google reCAPTCHA?

Google reCAPTCHA 是一个由谷歌公司提供的人机验证工具,防止垃圾邮件、恶意软件和自动化攻击。

在 Android 中,集成 Google reCAPTCHA 的过程相对简单,本文将为你提供详细的步骤。

步骤一:创建 Google reCAPTCHA API 密钥

首先需要在 Google reCAPTCHA 官网上创建 API 密钥,按照以下步骤进行操作:

  1. 进入 https://www.google.com/recaptcha/admin/create
  2. 在“注册 reCAPTCHA”页面上,填写相应的信息,如网站名称、reCAPTCHA 的类型、域名等。
  3. 点击“提交”按钮,此时会生成一个 Site key 和一个 Secret key,需要保存好这两个 key。
步骤二:集成 Google reCAPTCHA API

接下来需要在 Android 项目中加入 reCAPTCHA 库,步骤如下:

  1. 在项目的 build.gradle 文件中添加以下依赖:

    dependencies {
      implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
    }
    
  2. 在布局文件中添加 reCAPTCHA 视图,代码如下:

    <com.google.android.gms.safetynet.recaptcha.RecaptchaView
        android:id="@+id/recaptcha_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
  3. 在 Activity 或 Fragment 中初始化 reCAPTCHA,代码如下:

    private RecaptchaView recaptchaView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        recaptchaView = findViewById(R.id.recaptcha_view);
        recaptchaView.setSiteKey(getString(R.string.recaptcha_site_key));
        recaptchaView.setListener(new RecaptchaListener() {
            @Override
            public void onChallengeExpired() {
                // reCAPTCHA 挑战过期
            }
    
            @Override
            public void onVerificationFailed() {
                // 验证失败
            }
    
            @Override
            public void onVerificationComplete(String response) {
                // 验证通过
            }
        });
    }
    

    其中 getString(R.string.recaptcha_site_key) 是获取上一步中生成的 Site key。

步骤三:检查用户输入

当用户点击了 reCAPTCHA 视图中的“验证”按钮后,输入的结果会被传递给服务器进行验证。服务器会返回一个 token,表示验证是否通过。需要对该 token 进行验证,如果验证通过,就可以执行相应的操作。

以下是一个简单的 token 验证示例,代码如下:

private void verifyToken(String token) {
    new AsyncTask<String, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(String... tokens) {
            try {
                URL url = new URL("https://www.google.com/recaptcha/api/siteverify");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
   
                String params = "secret=" + getString(R.string.recaptcha_secret_key) +
                        "&response=" + tokens[0];
                OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
                writer.write(params);
                writer.flush();
   
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                reader.close();
   
                JSONObject json = new JSONObject(sb.toString());
                return json.getBoolean("success");
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
   
        @Override
        protected void onPostExecute(Boolean result) {
            if (result) {
                // 验证通过
            } else {
                // 验证失败
            }
        }
    }.execute(token);
}

其中 getString(R.string.recaptcha_secret_key) 是获取上一步中生成的 Secret key。

结论

本文介绍了如何在 Android 中集成 Google reCAPTCHA,包括创建 API 密钥、集成 reCAPTCHA API 和验证 token,希望对你有所帮助。