如何在 Android 中集成 reCAPTCHA 2.0
有什么方法可以在Android中集成reCAPTCHA 2.0吗?我找到了这个库,让它工作。但是,不支持CAPTCHA的服务器端验证(它需要我在代码中提供私钥,然后在应用程序中进行验证,而不是与我自己的服务器通信)。
- 有没有办法在Android中集成reCAPTCHA 2.0?
- 或者有没有办法让我用该库在我自己的服务器上验证CAPTCHA?
有什么方法可以在Android中集成reCAPTCHA 2.0吗?我找到了这个库,让它工作。但是,不支持CAPTCHA的服务器端验证(它需要我在代码中提供私钥,然后在应用程序中进行验证,而不是与我自己的服务器通信)。
分叉这个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.verifyAnswerAsync
ReCaptcha.verifyAnswer
reCaptcha.verifyAnswerAsync("your-private-key", "user-input", onVerifyAnswerListener);
verifyAnswerAsync
异步将用户输入字符串提交到 reCAPTCHA 服务器进行验证。在 UI 线程中调用是安全的。如果此调用出现任何错误,则不会引发任何异常。所有错误都将被视为验证失败。
onVerifyAnswerListener
是 的一个实例,在尝试验证用户输入完成时调用。ReCaptcha.OnVerifyAnswerListener
此方法的同步版本是 。verifyAnwser
您可以强制以特定语言呈现构件。请参阅此页面。
reCaptcha.setLanguageCode("fr");
一种方法是使用有效的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 响应
希望这有帮助。