【问题标题】:How to Integrate reCAPTCHA 2.0 in Android如何在 Android 中集成 reCAPTCHA 2.0
【发布时间】:2019-10-09 18:07:54
【问题描述】:

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

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

【问题讨论】:

  • 如果您阅读了该库的源代码,您可以轻松地将部分设备验证逻辑移至您的服务器。
  • github.com/google/recaptcha 是您所需要的,以及启用 JavaScript 的客户端 (android) 上的 Webview。您正在使用的库用于应用内验证、停止宏等...

标签: java android recaptcha


【解决方案1】:

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

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

安装

repositories {
    jcenter()
}

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

布局

要显示验证码图片,您需要在布局 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" />

请务必使用android:scaleType="centerInside",以确保可以显示整个验证码图像。

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

ReCaptcha reCaptcha = new ReCaptcha(context);

如何显示验证码

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

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

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

onShowChallengeListenerReCaptcha.OnShowChallengeListener 的一个实例,当尝试显示验证码时调用它。

这个方法的同步版本是showChallenge

如何验证用户输入

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

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

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

onVerifyAnswerListenerReCaptcha.OnVerifyAnswerListener 的一个实例,当尝试验证用户输入完成时调用它。

这个方法的同步版本是verifyAnwser

指定地区

您可以强制小部件以特定语言呈现。请参考此页面。

reCaptcha.setLanguageCode("fr");

【讨论】:

    【解决方案2】:

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

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

    Android 活动:

    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 类作为 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 的响应

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可以借助提供 Google reCaptcha API 的 SafetyNet google 库在您的 android 应用程序中添加 Google reCaptcha。

      1. 从 google ReCaptcha 网站创建 Google ReCaptcha API。
      2. 在您的 android 项目中添加 SafetyNet 库

        实现 'com.google.android.gms:play-services-safetynet:17.0.0'

      3. 点击按钮调用 reCaptcha 并添加以下代码以使用以下代码验证用户

      https://gist.github.com/anehkumar/dec49c972999fd8e891d408c38a6b532

      完整教程请查看这篇文章:- https://trinitytuts.com/add-google-recaptcha-in-android-application/

      【讨论】:

        猜你喜欢
        • 2020-05-10
        • 2019-08-15
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 2014-09-04
        相关资源
        最近更新 更多