Android 如何集成Google reCAPTCHA

Android 如何集成Google reCAPTCHA

为了增强安全性并防止自动化机器人的未经授权访问,将Google reCAPTCHA集成到Android应用程序中变得至关重要。通过整合reCAPTCHA,开发人员可以有效地验证用户的真实性,从而减少垃圾邮件、滥用和欺诈活动的潜在风险。

加强应用程序安全性并提供无缝的用户体验的过程包括三个步骤。首先,Android开发人员从Google reCAPTCHA获取API密钥。接下来,他们将reCAPTCHA功能集成到Android应用程序的用户界面中。最后,他们验证用户的响应以确保reCAPTCHA的成功验证。通过整合Google reCAPTCHA,Android开发人员可以增强应用程序安全性,为真正的用户创建一个受保护的环境。

Google reCAPTCHA

Google reCAPTCHA是由Google提供的广泛使用的安全服务,可保护网站和应用程序免受自动化机器人和恶意活动的侵害。它向用户提出诸如图像识别或复选框验证等挑战,以确定他们的人类真实性。通过整合reCAPTCHA,开发人员可以增强平台安全性,减少垃圾邮件和滥用,并确保更安全、可靠的用户体验。

方法

有两种不同的方法可以在Android应用中集成Google reCAPTCHA:

  • 使用带有WebView的reCAPTCHA API

  • 使用带有SafetyNet API的reCAPTCHA API(不使用WebView)

这两种方法本质上都实现了将Google reCAPTCHA集成到Android应用中的相同目标,但第一种方法使用WebView加载reCAPTCHA API,而第二种方法直接利用SafetyNet API进行验证,不依赖于WebView。

使用带有WebView的reCAPTCHA API

在这种方法中,开发人员可以在其Android应用中创建一个专门用于加载reCAPTCHA API的WebView。通过配置WebView以启用JavaScript并加载指定的reCAPTCHA URL,他们确保了无缝集成。为了处理来自reCAPTCHA的响应,开发人员实现一个WebViewClient并覆盖shouldOverrideUrlLoading函数。

在handleRecaptchaResponse的自定义实现中,他们直接从URL中提取reCAPTCHA响应令牌。然后,开发人员使用SafetyNet API验证此令牌的有效性以增加安全措施。验证成功后,他们可以访问在应用程序中执行所需操作。

步骤

  • 创建一个WebView并启用JavaScript

  • 在WebView中加载reCAPTCHA API URL。

  • 实现一个WebViewClient并覆盖shouldOverrideUrlLoading。

  • 在shouldOverrideUrlLoading中,从URL中提取reCAPTCHA响应令牌。

  • 使用SafetyNet API验证响应令牌的有效性。

  • 如果验证成功,在应用程序中执行所需操作。

示例

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

   private static final String RECAPTCHA_SITE_KEY = "YOUR_RECAPTCHA_SITE_KEY";
   private static final String RECAPTCHA_HTML = "<html><head><script src='https://www.google.com/recaptcha/api.js'></script></head><body><form action='verify.php' 
method='post'><div class='g-recaptcha' data-sitekey='%s'></div><br><input type='submit' value='Submit'></form></body></html>";

   private WebView webView;

   @SuppressLint("SetJavaScriptEnabled")
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      webView = findViewById(R.id.webView);
      webView.getSettings().setJavaScriptEnabled(true);
      webView.setWebViewClient(new WebViewClient() {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            // Load URL within the WebView
            view.loadUrl(request.getUrl().toString());
            return true;
         }
      });

      // Load the reCAPTCHA HTML page
      String html = String.format(RECAPTCHA_HTML, RECAPTCHA_SITE_KEY);
      webView.loadData(html, "text/html", "UTF-8");
   }
}

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/
android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <WebView
      android:id="@+id/webView"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

</RelativeLayout>

输出

Android 如何集成Google reCAPTCHA

使用SafetyNet API与reCAPTCHA API(不使用WebView)

这种方法通过直接利用SafetyNet API来验证reCAPTCHA响应而无需使用WebView。您可以调用SafetyNet API中的verifyWithRecaptcha方法,将reCAPTCHA秘钥和用户的响应令牌作为参数提供。然后,API会异步验证响应令牌。在成功的回调中,您可以检查令牌结果是否为空。如果不为空,表示reCAPTCHA验证成功,您可以在应用程序中继续进行所需的操作。

步骤

  • 从SafetyNet API中调用verifyWithRecaptcha方法。

  • 传入reCAPTCHA秘钥和用户的响应令牌。

  • SafetyNet API异步验证响应令牌。

  • 在成功的回调中,检查令牌结果是否为空。

  • 如果令牌结果不为空,则reCAPTCHA验证成功。

  • 根据验证结果,在您的应用程序中执行所需的操作。

示例

import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.safetynet.SafetyNet;
import com.google.android.gms.safetynet.SafetyNetApi;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;

public class MainActivity extends AppCompatActivity {

   private static final String TAG = "MainActivity";
   private static final String SITE_KEY = "YOUR_SITE_KEY";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      verifyWithRecaptcha();
   }

   private void verifyWithRecaptcha() {
      SafetyNet.getClient(this).verifyWithRecaptcha(SITE_KEY)
            .addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
               @Override
               public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                  if (response != null && response.getTokenResult() != null) {
                     String userResponseToken = response.getTokenResult();
                     Log.d(TAG, "onSuccess: userResponseToken=" + userResponseToken);
                     // Send the user response token to your server for verification
                     // Handle the server response accordingly
                     Toast.makeText(MainActivity.this, "reCAPTCHA success", Toast.LENGTH_SHORT).show();
                  }
               }
            })
            .addOnFailureListener(this, new OnFailureListener() {
               @Override
               public void onFailure(@NonNull Exception e) {
                  if (e instanceof ApiException) {
                     ApiException apiException = (ApiException) e;
                     int statusCode = apiException.getStatusCode();
                     Log.d(TAG, "onFailure: statusCode=" + statusCode);
                     // Handle error based on the status code
                     Toast.makeText(MainActivity.this, "reCAPTCHA failed", Toast.LENGTH_SHORT).show();
                  } else {
                     // Handle other exceptions
                     Toast.makeText(MainActivity.this, "Error occurred", Toast.LENGTH_SHORT).show();
                  }
               }
            });
   }
}

dependencies {
   // Other dependencies
   implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
}

输出

Android 如何集成Google reCAPTCHA

结论

在本教程中,将Google reCAPTCHA集成到Android应用程序中是增强安全性和防止自动化机器人活动的有价值的一步。无论是使用WebView与reCAPTCHA API进行集成,还是直接利用SafetyNet API,开发人员都可以有效地验证用户的真实性,减少垃圾邮件和滥用,并确保更安全、可靠的用户体验。通过实现reCAPTCHA,Android应用程序可以显著加强其安全措施,并为真实用户提供一个值得信赖的环境。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程