簡體   English   中英

如何在Android中集成reCAPTCHA 2.0

[英]How to Integrate reCAPTCHA 2.0 in Android

有什么方法可以在Android中集成reCAPTCHA 2.0嗎? 我找到了這個庫並讓它運行起來。 但是,不支持CAPTCHA的服務器端驗證(它需要我在代碼中提供私鑰然后在應用程序內驗證它而不是與我自己的服務器通信)。

  1. 有沒有辦法在Android中集成reCAPTCHA 2.0?
  2. 或者我有辦法在我自己的服務器上驗證該庫的CAPTCHA嗎?

一種方法是使用工作的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

希望這可以幫助。

分叉這個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 activity / fragment / view中,您需要顯示一個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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM