Usa la Verificación de aplicaciones para proteger el SDK de Navigation para Android

La Verificación de aplicaciones de Firebase protege las llamadas de tu app a Google Maps Platform, ya que bloquea el tráfico que proviene de fuentes que no son tus apps legítimas. Para ello, solicita una evaluación de la autenticidad de la app o del dispositivo a un proveedor de certificación, como Play Integrity. Cuando integras tu app con la Verificación de aplicaciones, agregas protección contra solicitudes maliciosas y no autorizadas, lo que, a su vez, protege tu facturación de cargos no autorizados. La Verificación de aplicaciones también mejora significativamente los informes de interrupciones en tiempo real en el ecosistema de apps de tu flota, lo que beneficia a todos los conductores que usan tu app. Para obtener más información, consulta Informes de interrupciones.

¿Por qué usar la Verificación de aplicaciones?

La Verificación de aplicaciones protege dos áreas distintas del SDK de Navigation para Android: la función de navegación principal y los informes de interrupciones.

La Verificación de aplicaciones ayuda a bloquear las solicitudes principales del SDK de Navigation para Android de fuentes maliciosas o no autorizadas. Esto te beneficia directamente, ya que protege tu proyecto del fraude de facturación y del agotamiento de la cuota.

Informes de interrupciones

Se recomienda la Verificación de aplicaciones si tu app admite informes de interrupciones en tiempo real y funciones de votación. Habilitar la Verificación de aplicaciones garantiza que tus conductores reciban las rutas más precisas, teniendo en cuenta todos los comentarios en tiempo real.

Por qué es importante la Verificación de aplicaciones para los informes:

  • El alto nivel de confianza para los cierres: Los eventos que afectan la ruta, como los cierres viales, pueden alterar significativamente el comportamiento de enrutamiento para todos los conductores. Para proteger el mapa del vandalismo potencial, el spam o los informes inexactos, la infraestructura de moderación de Google para las interrupciones de cierres viales se basa en indicadores sólidos de integridad del dispositivo y de la app.
  • Cómo valida la Verificación de aplicaciones los informes: Los informes y votos de los usuarios enviados desde el SDK de Navigation para Android incluyen el token de la Verificación de aplicaciones, que usa el backend de Google para validar la legitimidad de los comentarios, aumentar su nivel de confianza y permitir que se evalúen para el impacto en el mapa en vivo.
  • El impacto de omitir la Verificación de aplicaciones: Los informes enviados sin un token válido de la Verificación de aplicaciones se evalúan con un modelo de confianza más bajo y se pueden procesar únicamente como indicadores silenciosos. Esto significa que, si bien los usuarios pueden seguir informando y votando, es menos probable que sus informes sean visibles en el mapa o afecten las rutas de otros conductores, y requerirán una validación adicional.

¿La Verificación de aplicaciones es adecuada para mí?

Se recomienda la Verificación de aplicaciones en la mayoría de los casos. Sin embargo, no es necesaria ni compatible en las siguientes situaciones:

  • Apps privadas o experimentales: Si tu app no es de acceso público, no es necesaria la Verificación de aplicaciones.
  • Dispositivos vulnerados: Los proveedores de certificación recomendados impiden que el SDK de Navigation para Android se ejecute en dispositivos no confiables, como teléfonos con acceso raíz o jailbreak. Para admitir estos dispositivos, implementa un proveedor de certificación personalizado.
  • Dispositivos Android sin GMS: Los dispositivos Android deben ejecutar los Servicios de Google para dispositivos móviles (GMS) para Play Integrity. Si planeas admitir dispositivos Android sin GMS, implementa un proveedor de certificación personalizado.

Descripción general de los pasos de implementación

En un nivel alto, seguirás estos pasos para integrar tu app con la Verificación de aplicaciones:

  1. Agrega Firebase a tu app.
  2. Agrega la biblioteca de la Verificación de aplicaciones y, luego, inicialízala.
  3. Agrega un proveedor de tokens. En este paso, se invoca al proveedor de certificación que elijas para verificar la integridad del dispositivo o de la app.
  4. Inicializa las APIs de Navigation y de la Verificación de aplicaciones.
  5. Habilita la depuración. Esto es útil durante el desarrollo o en entornos de integración continua (CI).
  6. Supervisa las solicitudes de tu app antes de habilitar la aplicación forzosa. De esta manera, puedes aplicar la Verificación de aplicaciones sin problemas y sin interrumpir a tus usuarios.

Consideraciones para planificar una integración de la Verificación de aplicaciones

  • Cuotas del proveedor de certificación: El proveedor de certificación que recomendamos, Play Integrity, tiene un límite de llamadas diarias para su nivel de uso de la API estándar. Para obtener más información sobre los límites de llamadas, consulta la página de configuración en la documentación para desarrolladores de Google Play Integrity.
  • Latencia de inicio: En la mayoría de las situaciones, los usuarios no experimentarán latencia durante el uso normal, ya que los tokens de la Verificación de aplicaciones se almacenan en caché en el dispositivo. El sistema actualiza automáticamente los tokens de la Verificación de aplicaciones en segundo plano antes del vencimiento para mantener un rendimiento sin problemas. Sin embargo, si no hay un token válido de la Verificación de aplicaciones, los usuarios de tu app experimentarán cierta latencia en el inicio. Por ejemplo, esta latencia se produce durante los inicios en frío cuando un token almacenado en caché venció o falta.
  • TTL del token: El tiempo de actividad (TTL) determina la cantidad de tiempo durante la que el token de la Verificación de aplicaciones es válido antes de que deba actualizarse. Puedes configurar esta duración de 30 minutos a 7 días en Firebase console. Se recomienda una duración de 1 hora como modelo de referencia seguro, pero el SDK intenta automáticamente las actualizaciones en segundo plano aproximadamente a la mitad de la duración del TTL. Para obtener instrucciones paso a paso en la consola, consulta la documentación de la Verificación de aplicaciones de Firebase.

Integra tu app con la Verificación de aplicaciones

Requisitos y requisitos previos

  • Una app con el SDK de Navigation para Android versión 7.9 o posterior instalado
  • La huella digital del certificado SHA-256 de tu app
  • El nombre del paquete de tu app
  • Debes ser el propietario de la app en la consola de Google Cloud.
  • El ID del proyecto de tu app desde la consola de Google Cloud

Paso 1: Agrega Firebase a tu app

Sigue las instrucciones de la documentación para desarrolladores de Firebase para agregar Firebase a tu app. Agrega tu archivo google-services.json al directorio de nivel de la app de tu proyecto.

Paso 2: Agrega la biblioteca de la Verificación de aplicaciones y, luego, inicialízala

Agrega la dependencia de la Verificación de aplicaciones al archivo build.gradle de tu app:

Groovy (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

Inicializa la Verificación de aplicaciones en tu clase Application o actividad principal:

Java

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

Paso 3: Agrega el proveedor de tokens

Crea una implementación de la interfaz MapsAppCheckTokenProvider. Este proveedor recupera de forma asíncrona los tokens de la Verificación de aplicaciones de la Verificación de aplicaciones de Firebase y los pasa a la pila de red del SDK de Navigation para Android con MapsAppCheckTokenCallback:

Java

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

Kotlin

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

Paso 4: Inicializa las APIs de Navigation y de la Verificación de aplicaciones

Inicializa el SDK de Navigation para Android y registra tu instancia unificada del proveedor de tokens con MapsApiSettings.setAppCheckTokenProvider():

Java

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

Kotlin

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

Paso 5: Habilita la depuración (opcional)

Una vez que se aplique la Verificación de aplicaciones para el SDK de Navigation para Android, las funciones de tu app que dependan del SDK de Navigation para Android no se ejecutarán en un simulador ni en un entorno de integración continua (CI), ya que estos entornos no califican como dispositivos válidos. Para ejecutar tu app en estos entornos durante el desarrollo y las pruebas, debes crear una compilación de depuración de la app que use el proveedor de depuración de la Verificación de aplicaciones en lugar de un proveedor de certificación de producción.

  1. Agrega la dependencia del proveedor de depuración al archivo build.gradle de tu app:

    Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. Configura la Verificación de aplicaciones para que use la fábrica de proveedores de depuración en tus compilaciones de depuración:

    Java

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    Kotlin

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. Inicia tu app en un emulador o dispositivo de depuración. La Verificación de aplicaciones imprimirá un token de depuración local en el resultado de logcat.
  4. Copia y registra este token de depuración en Firebase console. Para obtener más detalles, consulta la documentación del proveedor de depuración de la Verificación de aplicaciones de Firebase.

Paso 6: Supervisa las solicitudes de tu app y decide si aplicar la Verificación de aplicaciones

Antes de habilitar la aplicación forzosa, supervisa las solicitudes de tu app para asegurarte de que no interrumpirás a los usuarios legítimos.

  1. Visita la pantalla de métricas de la Verificación de aplicaciones en Firebase console para ver el porcentaje de tráfico verificado en comparación con el no verificado.
  2. Una vez que te asegures de que la mayoría de tu tráfico esté verificada y que los usuarios legítimos se hayan actualizado a una versión de tu app que contenga tu implementación de la Verificación de aplicaciones, habilita la aplicación forzosa.
  3. Una vez que se active la aplicación forzosa, la Verificación de aplicaciones rechazará todo el tráfico sin un token válido de la Verificación de aplicaciones.