有什么方法可以在Android中集成reCAPTCHA 2.0吗? 我找到了this库并使其正常工作。但是,不支持CAPTCHA的服务器端验证(它需要我在代码中提供私钥,然后在应用程序中验证它,而不是与我自己的服务器通信)。
答案 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);
在包含android.lib.recaptcha.ReCaptcha
的活动/片段/视图中,您需要显示CAPTCHA图片供用户回复:
ReCaptcha reCaptcha = (ReCaptcha)findViewById(R.id.recaptcha);
reCaptcha.showChallengeAsync("your-public-key", onShowChallengeListener);
showChallengeAsync
下载并异步显示CAPTCHA图像。在UI线程中调用是安全的。如果此调用出现任何错误,则不会抛出任何异常。所有错误都将被视为显示CAPTCHA图像失败。
onShowChallengeListener
是ReCaptcha.OnShowChallengeListener
的一个实例,在尝试显示CAPTCHA时会调用该实例。
此方法的同步版本为showChallenge
。
要验证用户输入,请将输入字符串传递给ReCaptcha.verifyAnswerAsync
(或ReCaptcha.verifyAnswer
):
reCaptcha.verifyAnswerAsync("your-private-key", "user-input", onVerifyAnswerListener);
verifyAnswerAsync
异步将用户输入字符串提交给reCAPTCHA服务器进行验证。在UI线程中调用是安全的。如果此调用出现任何错误,则不会抛出任何异常。所有错误都将被视为验证失败。
onVerifyAnswerListener
是ReCaptcha.OnVerifyAnswerListener
的一个实例,在完成验证用户输入的尝试时会调用该实例。
此方法的同步版本为verifyAnwser
。
您可以强制窗口小部件以特定语言呈现。请参阅此页。
reCaptcha.setLanguageCode("fr");
答案 2 :(得分:0)
您可以借助SafetyNet Google库(它提供Google reCaptcha API)在您的Android应用程序中添加Google reCaptcha。
在您的android项目中添加SafetyNet库
实现'com.google.android.gms:play-services-safetynet:17.0.0'
https://gist.github.com/anehkumar/dec49c972999fd8e891d408c38a6b532
有关完整的教程,请查看以下文章:-https://trinitytuts.com/add-google-recaptcha-in-android-application/