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. 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 iOS: la funcionalidad 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 iOS 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 capacidades 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 de rutas, 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 ruta cerrada se basa en indicadores sólidos de integridad de la app y del dispositivo.
  • Cómo la Verificación de aplicaciones valida los informes: Los informes y votos de los usuarios enviados desde el SDK de Navigation para iOS 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úe 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 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 iOS se ejecute en dispositivos no confiables, como teléfonos con acceso a la raíz o con jailbreak. Para admitir estos dispositivos, 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 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 de la Verificación de aplicaciones. De esta manera, puedes aplicar la Verificación de aplicaciones sin problemas sin interrumpir a tus usuarios.

Consideraciones cuando planifiques una integración de la Verificación de aplicaciones

  • Cuotas del proveedor 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 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 no está presente.
  • 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 línea de base 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 detalladas 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 iOS versión 11.0 o posterior instalado.
  • El ID del paquete de la app.
  • Tu ID de equipo de la pestaña Membership en tu consola de Apple Developer.
  • Si planeas usar DeviceCheck, tu archivo de clave privada y el ID de la clave.
  • 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 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. Estas instrucciones te muestran cómo configurar un proyecto de Firebase y agregar la biblioteca de la Verificación de aplicaciones a tu app. Sigue los ejemplos de código proporcionados para inicializar la Verificación de aplicaciones.

  1. Sigue las instrucciones de Firebase para agregar la biblioteca de la Verificación de aplicaciones:
  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 lo siguiente:

      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, además, 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 de la Verificación de aplicaciones

Inicializa el SDK de Navigation para iOS (con GMSServices) y registra tu instancia del proveedor de tokens transmitiendo el controlador de servicios opaco compartido a GMSServices:

Swift

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

// Register your App Check token provider before initializing Navigation SDK for iOS
if let services = GMSServices.sharedServices() as? GMSServices {
    services.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 *)[GMSServices sharedServices]).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 lugar 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 ubica 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 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 de la Verificación de aplicaciones, 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 de la Verificación de aplicaciones.
  3. Una vez que se active la aplicación de la Verificación de aplicaciones, esta rechazará todo el tráfico que no tenga un token válido de la Verificación de aplicaciones.