如何在 Android 中集成 reCAPTCHA 2.0

2022-09-02 10:58:31

有什么方法可以在Android中集成reCAPTCHA 2.0吗?我找到了这个库,让它工作。但是,不支持CAPTCHA的服务器端验证(它需要我在代码中提供私钥,然后在应用程序中进行验证,而不是与我自己的服务器通信)。

  1. 有没有办法在Android中集成reCAPTCHA 2.0?
  2. 或者有没有办法让我用该库在我自己的服务器上验证CAPTCHA?

答案 1

分叉这个Android库并修改服务器端逻辑:https://github.com/ayltai/Android-Lib-reCAPTCHA

reCAPTCHA Android Library提供了一种简单的方法,可以在您的Android应用程序中将CAPTCHA显示为ImageView,从而帮助您阻止机器人滥用它。该库包装了 reCAPTCHA API

安装

repositories {
    jcenter()
}

dependencies {
    compile 'android.lib.recaptcha:reCAPTCHA:+'
}

布局

要显示 CAPTCHA 图像,您需要向布局 XML 添加一个元素:<android.lib.recaptcha.ReCaptcha />

<android.lib.recaptcha.ReCaptcha
    android:id="@+id/recaptcha"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="centerInside" />

使用以确保可以显示整个CAPTCHA图像非常重要。android:scaleType="centerInside"

或者,您可以在运行时创建一个实例:android.lib.recaptcha.ReCaptcha

ReCaptcha reCaptcha = new ReCaptcha(context);

如何显示验证码

在包含 的活动/片段/视图中,您需要显示一个 CAPTCHA 图像供用户响应:android.lib.recaptcha.ReCaptcha

ReCaptcha reCaptcha = (ReCaptcha)findViewById(R.id.recaptcha);
reCaptcha.showChallengeAsync("your-public-key", onShowChallengeListener);

showChallengeAsync异步下载并显示 CAPTCHA 图像。在 UI 线程中调用是安全的。如果此调用出现任何错误,则不会引发任何异常。所有错误都将被视为显示验证码图像失败。

onShowChallengeListener是 的一个实例,当显示验证码的尝试完成时调用。ReCaptcha.OnShowChallengeListener

此方法的同步版本是 。showChallenge

如何验证用户输入

要验证用户输入,请将输入字符串传递给 (或):ReCaptcha.verifyAnswerAsyncReCaptcha.verifyAnswer

reCaptcha.verifyAnswerAsync("your-private-key", "user-input", onVerifyAnswerListener);

verifyAnswerAsync异步将用户输入字符串提交到 reCAPTCHA 服务器进行验证。在 UI 线程中调用是安全的。如果此调用出现任何错误,则不会引发任何异常。所有错误都将被视为验证失败。

onVerifyAnswerListener是 的一个实例,在尝试验证用户输入完成时调用。ReCaptcha.OnVerifyAnswerListener

此方法的同步版本是 。verifyAnwser

指定区域设置

您可以强制以特定语言呈现构件。请参阅此页面。

reCaptcha.setLanguageCode("fr");

答案 2

一种方法是使用有效的reCaptcha 2.0表单(reCAPTCHA Docs)创建一个HTML文件,并将其托管在网站上(使其具有响应性,使其看起来不错)。

然后在WebView上加载URL并建立一个桥梁,以便您可以在Java和Javascript之间进行交互(addJavascriptInterface)

安卓活动:

WebView mWebView = (WebView) findViewById(R.id.webview);

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setBuiltInZoomControls(false);
mWebView.loadUrl("http://url/to/recaptcha/file/index.html");
mWebView.addJavascriptInterface(new BridgeWebViewClass(this), "BridgeWebViewClass");

桥梁等级:

public class BridgeWebViewClass {

    @JavascriptInterface
    public void reCaptchaCallbackInAndroid(String g_response){
        log.d("reCaptcha", "token" + g_response);
    }
}

现在,从您的HTML文件中,您可以将Bridge Class作为Javascript函数运行:

<div class="g-recaptcha" data-sitekey="YOUR_CAPTCHA_SITE_KEY" data-callback="captchaResponse"></div>

<script type="text/javascript">
    function captchaResponse(token){
        BridgeWebViewClass.reCaptchaCallbackInAndroid(token);
    }
</script>

现在,您可以验证来自 Android 呼叫 https://www.google.com/recaptcha/api/siteverify 响应

希望这有帮助。


推荐