¿Cómo integrar Google reCAPTCHA en Android?

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.

Working of Google reCAPTCHA

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.

Generating API key for using Google reCAPTCHA

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *