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

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 App Attest. 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. App Check también mejora significativamente los informes de interrupciones en tiempo real en el ecosistema de tu app de flota, lo que beneficia a todos los conductores que la usan. Para obtener más información, consulta Informes de interrupciones.

¿Por qué usar App Check?

App Check protege dos áreas distintas del SDK de Navigation para iOS: la funcionalidad de navegación principal y la generación de informes de interrupciones.

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

Informes de interrupciones

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

Por qué App Check es importante para los informes:

  • La barra de confianza alta para los cierres: Los eventos que afectan las rutas, como los cierres de rutas, pueden alterar significativamente el comportamiento de las rutas para todos los conductores. Para proteger el mapa de posibles actos de vandalismo, spam o denuncias imprecisas, la infraestructura de moderación de Google para las interrupciones por cierre de rutas se basa en indicadores sólidos de integridad de dispositivos y apps.
  • Cómo App Check valida los informes: Los informes y votos de los usuarios que se envían desde el SDK de Navigation para iOS incluyen el token de App Check, que el backend de Google usa para validar la legitimidad de los comentarios, lo que aumenta su nivel de confianza y permite que se evalúen para determinar su impacto en el mapa en vivo.
  • El impacto de omitir la Verificación de aplicaciones: Los informes enviados sin un token válido de Verificación de aplicaciones se evalúan con un modelo de menor confianza y se pueden procesar solo como indicadores silenciosos. Esto significa que, si bien los usuarios pueden seguir notificando y votando, es menos probable que sus avisos se muestren en el mapa o afecten las rutas de otros conductores, y requerirán validación adicional.

¿App Check es adecuado para mí?

Se recomienda usar App Check en la mayoría de los casos. Sin embargo, no es necesario o no se admite en las siguientes situaciones:

  • Apps privadas o experimentales: Si tu app no es de acceso público, no se necesita App Check.
  • Dispositivos vulnerados: Los proveedores de certificación recomendados impiden que el SDK de Navigation para iOS se ejecute en dispositivos no confiables, como teléfonos con acceso de administrador o jailbreak. Para admitir estos dispositivos, implementa un proveedor de certificación personalizado.

Descripción general de los pasos de implementación

En términos generales, seguirás estos pasos para integrar tu app con App Check:

  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 la app.
  4. Inicializa las APIs de Navigation y App Check.
  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. De esta manera, puedes aplicar App Check sin problemas y sin interrumpir a los usuarios.

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

  • Cuotas de proveedores de certificación: Los proveedores de certificación que recomendamos, DeviceCheck o App Attest, están sujetos a cuotas y limitaciones establecidas por Apple.
  • 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 App Check se almacenan en caché en el dispositivo. El sistema actualiza automáticamente los tokens de App Check en segundo plano antes de que venzan para mantener un rendimiento óptimo. Sin embargo, si no hay un token de App Check válido, los usuarios de tu app experimentarán cierta latencia durante el inicio. Por ejemplo, esta latencia se produce durante los inicios en frío cuando un token almacenado en caché venció o no está.
  • TTL del token: El tiempo de actividad (TTL) determina el período durante el cual el token de App Check 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 referencia segura, 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 Verificación de aplicaciones de Firebase.

Integra tu app con la Verificación de aplicaciones

Requisitos previos y requisitos

  • Una app con la versión 11.0 o posterior del SDK de Navigation para iOS instalada
  • El ID del paquete de la app.
  • El ID de tu equipo que se encuentra en la pestaña Membership de tu consola de Apple Developer
  • Si planeas usar DeviceCheck, tu archivo de clave privada y tu ID de clave.
  • Debes ser el propietario de la app en la consola de Google Cloud.
  • ID del proyecto de tu app en 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 GoogleService-Info.plist sin modificar al nivel raíz de tu proyecto.

En tu archivo AppDelegate, importa los siguientes módulos:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

@import FirebaseCore;
@import FirebaseAppCheck;
@import GoogleNavigation;

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

Firebase proporciona instrucciones para cada proveedor de certificación predeterminado. En estas instrucciones, se muestra cómo configurar un proyecto de Firebase y agregar la biblioteca de App Check a tu app. Sigue los ejemplos de código proporcionados para inicializar App Check.

  1. Sigue las instrucciones de Firebase para agregar la biblioteca de App Check:
  2. Inicializa la Verificación de aplicaciones en tu AppDelegate:
    • Si usas App Attest, crea una implementación de AppCheckProviderFactory y regístrala antes de llamar a FirebaseApp.configure():

      Swift

      class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
          func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
              return AppAttestProvider(app: app)
          }
      }
      // In application(_:didFinishLaunchingWithOptions:)
      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)
      FirebaseApp.configure()

      Objective-C

      #import <FirebaseCore/FirebaseCore.h>
      #import <FirebaseAppCheck/FirebaseAppCheck.h>
      
      @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
      @end
      
      @implementation YourAppCheckProviderFactory
      - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
          return [[FIRAppAttestProvider alloc] initWithApp:app];
      }
      @end
      
      // In application:didFinishLaunchingWithOptions:
      YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
      [FIRApp configure];
    • Si usas DeviceCheck, configura la fábrica con el siguiente código:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];

Paso 3: Agrega el proveedor de tokens

Crea un archivo llamado AppCheckTokenProvider (o, si usas Objective-C, dos archivos llamados AppCheckTokenProvider.h y AppCheckTokenProvider.m) en el nivel raíz de tu app.

Esta clase debe cumplir con el protocolo GMSAppCheckTokenProvider y, luego, implementar el método fetchAppCheckTokenWithCompletion.

Swift

import Foundation
import FirebaseAppCheck
import GoogleNavigation

class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider {
    func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) {
        AppCheck.appCheck().token(forcingRefresh: false) { token, error in
            if let error = error {
                print("App Check Error: \(error)")
                completion(nil, error)
                return
            }
            guard let token = token else {
                completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"]))
                return
            }
            print("App Check Token: \(token.token)")
            completion(token.token, nil)
        }
    }
}

Objective-C

// AppCheckTokenProvider.h
#import <Foundation/Foundation.h>
#import <GoogleNavigation/GoogleNavigation.h>

NS_ASSUME_NONNULL_BEGIN

@interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider>
@end

NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m
#import "AppCheckTokenProvider.h"
#import <FirebaseAppCheck/FirebaseAppCheck.h>

@implementation AppCheckTokenProvider
- (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion {
    [[FIRAppCheck appCheck] tokenForcingRefresh:NO
                                     completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) {
        if (token) {
            completion(token.token, nil);
        } else {
            completion(nil, error);
        }
    }];
}
@end

Paso 4: Inicializa las APIs de Navigation y App Check

Inicializa el SDK de Navigation para iOS y registra tu instancia del proveedor de tokens en GMSServices:

Swift

// In application(_:didFinishLaunchingWithOptions:)
GMSServices.provideAPIKey("YOUR_API_KEY")

// Register your App Check token provider before initializing Navigation SDK for iOS
GMSServices.appCheckTokenProvider = AppCheckTokenProvider()

Objective-C

// In application:didFinishLaunchingWithOptions:
[GMSServices provideAPIKey:@"YOUR_API_KEY"];

// Register your App Check token provider before initializing Navigation SDK for iOS
GMSServices.appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];

Paso 5: Habilita la depuración (opcional)

Una vez que se aplique la Verificación de aplicaciones para el SDK de Navigation para iOS, las funciones de tu app que dependan del SDK de Navigation para iOS 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 vez de un proveedor de certificación de producción.

  1. Configura la fábrica de proveedores de depuración en tu AppDelegate:

    Swift

    #if targetEnvironment(simulator)
    let providerFactory = AppCheckDebugProviderFactory()
    #else
    let providerFactory = YourAppCheckProviderFactory()
    #endif
    AppCheck.setAppCheckProviderFactory(providerFactory)

    Objective-C

    #if TARGET_OS_SIMULATOR
    id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init];
    #else
    id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init];
    #endif
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
  2. Habilita el registro en tu proyecto de Xcode, inicia la app y busca el token de depuración local en el registro de la consola.
  3. Copia y agrega este token de depuración a Firebase console. Para obtener más detalles, consulta la documentación del proveedor de depuración de Verificación de aplicaciones de Firebase.

Paso 6: Supervisa las solicitudes de tu app y decide si aplicarás la aplicación de políticas

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 tráfico no verificado.
  2. Una vez que te asegures de que la mayoría de tu tráfico está verificado y de que los usuarios legítimos actualizaron a una versión de tu app que contiene tu implementación de la Verificación de aplicaciones, habilita la aplicación forzosa.
  3. Una vez que se aplique la medida, la Verificación de aplicaciones rechazará todo el tráfico que no tenga un token válido de Verificación de aplicaciones.