📅  最后修改于: 2023-12-03 15:38:12.665000             🧑  作者: Mango
Google reCAPTCHA 是一个由谷歌公司提供的人机验证工具,防止垃圾邮件、恶意软件和自动化攻击。
在 Android 中,集成 Google reCAPTCHA 的过程相对简单,本文将为你提供详细的步骤。
首先需要在 Google reCAPTCHA 官网上创建 API 密钥,按照以下步骤进行操作:
接下来需要在 Android 项目中加入 reCAPTCHA 库,步骤如下:
在项目的 build.gradle 文件中添加以下依赖:
dependencies {
implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
}
在布局文件中添加 reCAPTCHA 视图,代码如下:
<com.google.android.gms.safetynet.recaptcha.RecaptchaView
android:id="@+id/recaptcha_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在 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,希望对你有所帮助。