implementar - validar captcha java
Cómo integrar reCAPTCHA 2.0 en Android (2)
¿Hay alguna manera de que pueda integrar reCAPTCHA 2.0 en Android? Encontré this biblioteca y la puse funcionando. Sin embargo, la verificación del lado del servidor de CAPTCHA no es compatible (necesita que proporcione la clave privada en el código y luego la verifique dentro de la aplicación en lugar de hablar con mi propio servidor).
- ¿Hay alguna manera de integrar reCAPTCHA 2.0 en Android?
- ¿O hay alguna manera de verificar el CAPTCHA en mi propio servidor con esa biblioteca?
Bifurque esta biblioteca de Android y modifique la lógica del lado del servidor: this
La biblioteca de reCAPTCHA para Android proporciona una forma sencilla de mostrar un CAPTCHA como un ImageView en su aplicación de Android, lo que le ayuda a evitar que los bots abusen de él. La biblioteca envuelve la API reCAPTCHA .
Instalación
repositories {
jcenter()
}
dependencies {
compile ''android.lib.recaptcha:reCAPTCHA:+''
}
El diseño
Para mostrar la imagen CAPTCHA, debe agregar un elemento <android.lib.recaptcha.ReCaptcha />
a su diseño XML:
<android.lib.recaptcha.ReCaptcha
android:id="@+id/recaptcha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerInside" />
Es importante usar android:scaleType="centerInside"
para garantizar que se pueda visualizar toda la imagen CAPTCHA.
Alternativamente, puede crear una instancia de android.lib.recaptcha.ReCaptcha
en tiempo de ejecución:
ReCaptcha reCaptcha = new ReCaptcha(context);
Cómo mostrar CAPTCHA
En su actividad / fragmento / vista que contiene android.lib.recaptcha.ReCaptcha
, necesita mostrar una imagen CAPTCHA para que el usuario responda:
ReCaptcha reCaptcha = (ReCaptcha)findViewById(R.id.recaptcha);
reCaptcha.showChallengeAsync("your-public-key", onShowChallengeListener);
showChallengeAsync
descarga y muestra la imagen CAPTCHA de forma asíncrona. Es seguro invocar en el hilo de la interfaz de usuario. No se lanzará ninguna excepción en caso de error por esta llamada. Todos los errores se tratarán como fallidos al mostrar la imagen CAPTCHA.
onShowChallengeListener
es una instancia de ReCaptcha.OnShowChallengeListener
, que se llama cuando se completa un intento de mostrar un CAPTCHA.
La versión síncrona de este método es showChallenge
.
Cómo verificar la entrada del usuario
Para verificar la entrada del usuario, pase la cadena de entrada a ReCaptcha.verifyAnswerAsync
(o ReCaptcha.verifyAnswer
):
reCaptcha.verifyAnswerAsync("your-private-key", "user-input", onVerifyAnswerListener);
verifyAnswerAsync
envía de forma asíncrona la cadena de entrada del usuario al servidor reCAPTCHA para su verificación. Es seguro invocar en el hilo de la interfaz de usuario. No se lanzará ninguna excepción en caso de error por esta llamada. Todos los errores serán tratados como falla de verificación.
onVerifyAnswerListener
es una instancia de ReCaptcha.OnVerifyAnswerListener
, que se llama cuando se completa un intento de verificar la entrada del usuario.
La versión síncrona de este método es verifyAnwser
.
Especifique una localidad
Puede forzar la reproducción del widget en un idioma específico. Por favor refiérase a esta página.
reCaptcha.setLanguageCode("fr");
Un enfoque sería crear un archivo HTML con un formulario reCaptcha 2.0 en funcionamiento ( documentos reCAPTCHA ) y hospedarlo en un sitio web (haga que responda para que se vea bien).
luego cargue la URL en una vista web y cree un puente para que pueda interactuar entre Java y Javascript (addJavascriptInterface)
Actividad de 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");
Clase de puente:
public class BridgeWebViewClass {
@JavascriptInterface
public void reCaptchaCallbackInAndroid(String g_response){
log.d("reCaptcha", "token" + g_response);
}
}
Y ahora, desde su archivo HTML, puede ejecutar la Clase Bridge como una función de 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>
Ahora puede verificar la respuesta de las llamadas de Android https://www.google.com/recaptcha/api/siteverify
Espero que esto ayude.