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).
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.
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 .
repositories {
jcenter()
}
dependencies {
compile 'Android.lib.recaptcha:reCAPTCHA:+'
}
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);
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
.
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
.
Vous pouvez forcer le widget à effectuer un rendu dans une langue spécifique. Veuillez vous référer à cette page.
reCaptcha.setLanguageCode("fr");