Google reCAPTCHA es uno de los servicios proporcionados por Google que se utiliza para verificar si el usuario es un bot o no. Google reCAPTCHA se ve en muchos sitios web y aplicaciones para verificar a los usuarios. En este artículo, veremos la implementación de Google reCAPTCHA en Android.
¿Qué vamos a construir en este artículo?
Construiremos una aplicación simple en la que mostraremos un botón de verificación de usuario de Google reCAPTCHA, después de hacer clic en ese botón, mostraremos Google reCAPTCHA a nuestro usuario y lo verificaremos. qué
Funcionamiento de Google reCAPTCHA
Mientras usa reCAPTCHA, realiza varias llamadas desde su aplicación al servidor de la red de seguridad y desde el servidor de la red de seguridad a su aplicación. Para que pueda conocer estas llamadas con más detalle en el siguiente diagrama.
Pasos en los que hacemos llamadas a la API:
- Para usar reCAPTCHA en su aplicación, debemos generar una clave de sitio y una clave secreta que debemos agregar a nuestra aplicación. La clave del sitio se utiliza en nuestra aplicación de Android y la clave secreta se almacena en el servidor.
- Con la ayuda de este sitio, se generará la clave reCAPTCHA y se verificará si el usuario es un robot o no.
- Después de realizar la verificación mediante reCAPTCHA, nuestra aplicación se comunicará con nuestro servidor captcha y devolverá una respuesta utilizando la clave de su sitio.
- Ahora nuestra aplicación enviará un token a nuestro servidor y nuestro servidor luego enviará un token al servidor reCAPTCHA con nuestra clave secreta. Luego, el servidor reCAPTCHA enviará una respuesta exitosa a nuestro servidor y el servidor enviará una respuesta exitosa a nuestra aplicación.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: agregar la dependencia para volley y Safety Net
Como estaremos utilizando la API proporcionada por Google. Entonces, para usar esta API, usaremos Volley para manejar nuestras requests HTTP y una red de seguridad para conectarnos a Google reCAPTCHA.
implementación ‘com.android.volley:volley:1.1.1’
implementación ‘com.google.android.gms:play-services-safetynet:15.0.1’
Después de agregar esta dependencia, ahora sincronice su proyecto y ahora avanzaremos hacia la creación de nuestra clave API que necesitaremos para Google reCAPTCHA.
Paso 3: generar la clave API para usar Google reCAPTCHA
Para usar Google reCAPTCHA, debemos crear dos claves, como la clave del sitio y la clave secreta del sitio, que debemos usar para la autenticación. Para crear una nueva clave de API, vaya a este sitio de desarrolladores de Google . Y consulte el siguiente diagrama para generar las claves API.
Después de agregar estos datos, acepte los términos de reCAPTCHA y luego haga clic en la opción Enviar.
Paso 4: Agregar permisos para Internet
Como llamamos a la API para Google reCAPTCHA, debemos agregar permisos para Internet en nuestro AndroidManifest.xml . Vaya a la aplicación > AndroidManifest.xml y agréguele el siguiente código.
XML
<uses-permission android:name="android.permission.INTERNET"/>
Paso 5: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!--button for displaying our reCAPTCHA dialog box--> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Verify captcha" /> </RelativeLayout>
Paso 6: trabajar con el archivo MainActivity.java
Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.safetynet.SafetyNet; import com.google.android.gms.safetynet.SafetyNetApi; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { // variables for our button and // strings and request queue. Button btnverifyCaptcha; String SITE_KEY = "Enter Your Site Key Here"; String SECRET_KEY = "Enter Your Secret Key Here"; RequestQueue queue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); queue = Volley.newRequestQueue(getApplicationContext()); btnverifyCaptcha = findViewById(R.id.button); btnverifyCaptcha.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { verifyGoogleReCAPTCHA(); } }); } private void verifyGoogleReCAPTCHA() { // below line is use for getting our safety // net client and verify with reCAPTCHA SafetyNet.getClient(this).verifyWithRecaptcha(SITE_KEY) // after getting our client we have // to add on success listener. .addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() { @Override public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) { // in below line we are checking the response token. if (!response.getTokenResult().isEmpty()) { // if the response token is not empty then we // are calling our verification method. handleVerification(response.getTokenResult()); } } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // this method is called when we get any error. if (e instanceof ApiException) { ApiException apiException = (ApiException) e; // below line is use to display an error message which we get. Log.d("TAG", "Error message: " + CommonStatusCodes.getStatusCodeString(apiException.getStatusCode())); } else { // below line is use to display a toast message for any error. Toast.makeText(MainActivity.this, "Error found is : " + e, Toast.LENGTH_SHORT).show(); } } }); } protected void handleVerification(final String responseToken) { // inside handle verification method we are // verifying our user with response token. // url to sen our site key and secret key // to below url using POST method. String url = "https://www.google.com/recaptcha/api/siteverify"; // in this we are making a string request and // using a post method to pass the data. StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // inside on response method we are checking if the // response is successful or not. try { JSONObject jsonObject = new JSONObject(response); if (jsonObject.getBoolean("success")) { // if the response is successful then we are // showing below toast message. Toast.makeText(MainActivity.this, "User verified with reCAPTCHA", Toast.LENGTH_SHORT).show(); } else { // if the response if failure we are displaying // a below toast message. Toast.makeText(getApplicationContext(), String.valueOf(jsonObject.getString("error-codes")), Toast.LENGTH_LONG).show(); } } catch (Exception ex) { // if we get any exception then we are // displaying an error message in logcat. Log.d("TAG", "JSON exception: " + ex.getMessage()); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // inside error response we are displaying // a log message in our logcat. Log.d("TAG", "Error message: " + error.getMessage()); } }) { // below is the getParamns method in which we will // be passing our response token and secret key to the above url. @Override protected Map<String, String> getParams() { // we are passing data using hashmap // key and value pair. Map<String, String> params = new HashMap<>(); params.put("secret", SECRET_KEY); params.put("response", responseToken); return params; } }; // below line of code is use to set retry // policy if the api fails in one try. request.setRetryPolicy(new DefaultRetryPolicy( // we are setting time for retry is 5 seconds. 50000, // below line is to perform maximum retries. DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // at last we are adding our request to queue. queue.add(request); } }
Después de agregar este código, asegúrese de agregar las claves que hemos generado dentro de su aplicación. Después de agregar las claves, ejecute su aplicación y vea el resultado de la aplicación.
Producción:
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA