如何在Android

时间:2016-01-04 10:19:13

标签: java android recaptcha

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

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

3 个答案:

答案 0 :(得分: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

的响应

希望这有帮助。

答案 1 :(得分:1)

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

reCAPTCHA Android库提供了一种在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" />

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

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

ReCaptcha reCaptcha = new ReCaptcha(context);

如何显示CAPTCHA

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

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

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

onShowChallengeListenerReCaptcha.OnShowChallengeListener的一个实例,在尝试显示CAPTCHA时会调用该实例。

此方法的同步版本为showChallenge

如何验证用户输入

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

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

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

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

此方法的同步版本为verifyAnwser

指定区域设置

您可以强制窗口小部件以特定语言呈现。请参阅此页。

reCaptcha.setLanguageCode("fr");

答案 2 :(得分:0)

您可以借助SafetyNet Google库(它提供Google reCaptcha API)在您的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/