web-dev-qa-db-fra.com

Comment intégrer reCAPTCHA 2.0 dans Android

Puis-je intégrer reCAPTCHA 2.0 dans Android? J'ai trouvé this library et je l'ai fait fonctionner. Cependant, la vérification côté serveur de CAPTCHA n'est pas prise en charge (il est nécessaire que je fournisse la clé privée dans le code, puis la vérifie dans l'application au lieu de parler à mon propre serveur).

  1. Est-il possible d'intégrer reCAPTCHA 2.0 dans Android?
  2. Ou y a-t-il un moyen pour moi de vérifier le CAPTCHA sur mon propre serveur avec cette bibliothèque?
19
Lancelot

Une approche consisterait à créer un fichier HTML avec un formulaire reCaptcha 2.0 opérationnel ( reCAPTCHA Docs ) et à l’héberger sur un site Web (le rendre réactif pour qu’il ait l’air agréable).

puis chargez l'URL sur une WebView et faites un pont afin que vous puissiez interagir entre Java et Javascript (addJavascriptInterface)

Activité 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");

Classe de pont:

public class BridgeWebViewClass {

    @JavascriptInterface
    public void reCaptchaCallbackInAndroid(String g_response){
        log.d("reCaptcha", "token" + g_response);
    }
}

Et maintenant, à partir de votre fichier HTML, vous pouvez exécuter Bridge Class en tant que fonction 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>

Vous pouvez maintenant vérifier la réponse des appels Android https://www.google.com/recaptcha/api/siteverify

J'espère que cela t'aides.

2
Etienne GT

Pointez cette bibliothèque Android et modifiez la logique côté serveur: https://github.com/ayltai/Android-Lib-reCAPTCHA

La bibliothèque Android reCAPTCHA fournit un moyen simple d'afficher un CAPTCHA en tant qu'imageView dans votre application Android, ce qui vous aide à empêcher les robots de l'abuser. La bibliothèque enveloppe l’API reCAPTCHA .

Installation

repositories {
    jcenter()
}

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

La disposition

Pour afficher une image CAPTCHA, vous devez ajouter un élément <Android.lib.recaptcha.ReCaptcha /> à votre mise en page XML:

<Android.lib.recaptcha.ReCaptcha
    Android:id="@+id/recaptcha"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:scaleType="centerInside" />

Il est important d'utiliser Android:scaleType="centerInside" pour vous assurer que l'intégralité de l'image CAPTCHA peut être affichée.

Vous pouvez également créer une instance de Android.lib.recaptcha.ReCaptcha au moment de l'exécution:

ReCaptcha reCaptcha = new ReCaptcha(context);

Comment montrer CAPTCHA

Dans votre activité/fragment/vue contenant Android.lib.recaptcha.ReCaptcha, vous devez afficher une image CAPTCHA pour permettre à l'utilisateur de répondre:

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

showChallengeAsync télécharge et affiche l'image CAPTCHA de manière asynchrone. Il est prudent d'appeler dans le fil de l'interface utilisateur. Aucune exception ne sera levée en cas d'erreur de cet appel. Toutes les erreurs seront considérées comme des échecs lors de l'affichage de l'image CAPTCHA.

onShowChallengeListener est une instance de ReCaptcha.OnShowChallengeListener, appelée lorsqu’une tentative d’affichage d’un CAPTCHA est terminée.

La version synchrone de cette méthode est showChallenge.

Comment vérifier les entrées de l'utilisateur

Pour vérifier la saisie de l'utilisateur, transmettez la chaîne de saisie à ReCaptcha.verifyAnswerAsync (ou ReCaptcha.verifyAnswer):

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

verifyAnswerAsync soumet de manière asynchrone la chaîne d'entrée de l'utilisateur au serveur reCAPTCHA pour vérification. Il est prudent d'appeler dans le fil de l'interface utilisateur. Aucune exception ne sera levée en cas d'erreur de cet appel. Toutes les erreurs seront traitées comme un échec de la vérification.

onVerifyAnswerListener est une instance de ReCaptcha.OnVerifyAnswerListener, appelée lorsqu’une tentative de vérification de la saisie de l’utilisateur est terminée.

La version synchrone de cette méthode est verifyAnwser.

Spécifier une locale

Vous pouvez forcer le widget à effectuer un rendu dans une langue spécifique. Veuillez vous référer à cette page.

reCaptcha.setLanguageCode("fr");
1
compte14031879