Notificar a los verificadores sobre compilaciones nuevas

Los SDK de Android y de iOS opcionales para Firebase App Distribution te permiten mostrar alertas en las apps a tus verificadores cuando hay nuevas compilaciones disponibles para instalar. En esta guía, se explica cómo usar los SDK de Android y de iOS para Firebase App Distribution a fin de crear y personalizar alertas de compilaciones nuevas para tus verificadores.

Antes de comenzar

Si aún no lo has hecho, agrega Firebase a tu proyecto de iOS.

Paso 1: Habilita la API de App Distribution Tester

  1. Selecciona tu proyecto en la consola de Google Cloud.

  2. En API de Firebase App Testers , haz clic en Habilitar.

Paso 2: Agrega App Distribution a tu app

  1. Abre el Podfile que creaste para el proyecto (o ejecuta pod init a fin de crear uno) y, luego, agrega la siguiente línea en la sección de destino:

    pod 'FirebaseAppDistribution'
  2. En el directorio de tu podfile, ejecuta pod install y, luego, abre el archivo .xcworkspace que se creó.

  3. Importa el módulo de Firebase en tu struct App o en UIApplicationDelegate:

    Swift

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

    @import FirebaseCore;
    @import FirebaseAppDistribution;
    
  4. Configura una instancia compartida de FirebaseApp en el método application(_:didFinishLaunchingWithOptions:) del delegado de la app:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. Si el swizzling está inhabilitado, pasa las URLs abiertas al SDK de App Distribution en la implementación de application(_:open:options:):

    Swift

    func application(_ app: UIApplication, 
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
       if AppDistribution.appDistribution().application(application, open: url, options: options) {
          return true
       }
    
       // Handle other non-Firebase URLs here.
    
       return false
    }
    

    Objective‑C

    - (BOOL)application:(UIApplication *)app 
                openURL:(NSURL *)url 
                options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
       if ([[FIRAppDistribution appDistribution] application:app openURL:url options:options]) {
          return YES;
       }
    
       // Handle other non-Firebase URLs here.
    
       return NO;
    }
    
  6. Por último, vuelve a compilar la app.

Paso 3: Configura alertas en la app

El SDK de App Distribution ofrece dos formas de configurar las alertas de compilación en la app para los verificadores: una configuración básica de alertas, que incluye actualizaciones de apps compiladas previamente y diálogos de acceso que se mostrarán a los verificadores, y una configuración avanzada de alertas con la que puedes personalizar tu interfaz de usuario. Si no tienes experiencia en el SDK de App Distribution, te recomendamos que primero uses la configuración básica de alertas.

Configuración básica

Usa checkForUpdate para mostrar un diálogo de alerta de habilitación compilado previamente a los verificadores que aún no activaron las alertas y, luego, comprueba si hay compilaciones nuevas disponibles. Cuando se llama al método, este invoca la siguiente secuencia:

  1. Para comprobar si un verificador habilitó las alertas, pídele que acceda a App Distribution con su Cuenta de Google.

  2. Si el verificador aún no ha habilitado las alertas, se muestra un diálogo compilado previamente.

    La habilitación de alertas es un proceso único en el dispositivo de prueba, el cual persiste en todas las actualizaciones de tu app. Las alertas seguirán habilitadas en el dispositivo de prueba hasta que se desinstale la app o se llame al método signOutTester. Consulta la documentación de referencia del método (Objective‑C o Swift) para obtener más información.

  3. Busca compilaciones disponibles recientemente para que las instale el verificador.

Puedes invocar a checkForUpdate() en cualquier momento en tu app. Por ejemplo, puedes pedirles a los verificadores que instalen compilaciones disponibles recientemente al inicio incluyendo checkForUpdate() en el elemento onAppear(perform:) de la vista raíz de tu app.

En el siguiente ejemplo, se comprueba si el verificador habilitó las alertas, y si tiene acceso a una compilación nueva. De ser así, se muestra un diálogo cuando la compilación está disponible para instalarse:

Swift

Nota: Este producto no se encuentra disponible en objetivos de macOS, Mac Catalyst, tvOS ni watchOS.
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
  if error != nil {
      // Handle error
      return
  }

  guard let release = release else {
    return
  }

  // Customize your alerts here.
  let title = "New Version Available"
  let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
  let uialert = UIAlertController(title: title,message: message, preferredStyle: .alert)

  uialert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
    _ in
    UIApplication.shared.open(release.downloadURL)
  })
  uialert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
    _ in
  })

  // self should be a UIViewController.
  self.present(uialert, animated: true, completion: nil)
})

Objective‑C

Nota: Este producto no se encuentra disponible en objetivos de macOS, Mac Catalyst, tvOS ni watchOS.
[[FIRAppDistribution appDistribution]
  checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                 NSError *_Nullable error) {
  if (error) {
    // Handle error
    return;
  }

  if (release) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"New Version Available"
message:[NSString stringWithFormat:@"Version %@ (%@) is available.", release.displayVersion,
release.buildVersion] preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *updateAction = [UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
      [[UIApplication sharedApplication] openURL:release.downloadURL options:@{}
completionHandler:nil];
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}];
    [alert addAction:updateAction];
    [alert addAction:cancelAction];
    [self presentViewController:alert animated:YES completion:nil];
  }
}];

Configuración avanzada

Los métodos signInTester() y isTesterSignedIn te ofrecen más flexibilidad para personalizar la experiencia de acceso de tus verificadores a fin de que coincida mejor con el estilo de la app.

En el siguiente ejemplo se comprueba si el verificador ya accedió a su cuenta de Firebase App Distribution, de modo que puedas mostrar la IU de acceso solo a los verificadores que aún no accedieron. Después de que el verificador haya accedido, puedes llamar a checkForUpdate() para verificar si tiene acceso a una compilación nueva.

Swift

Nota: Este producto no se encuentra disponible en objetivos de macOS, Mac Catalyst, tvOS ni watchOS.
// Sign in a tester without automatically checking for update
if (!AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().signInTester (completion: { error in
    // completion block for signInTester
     if (error != nil) {
       // handle failed sign in
      return
     }
    // handle successful sign in
  })
}

// Only check for update if tester is already signed in - do not prompt
if (AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
      // completion block for check for update
  })
}

Objective‑C

Nota: Este producto no se encuentra disponible en objetivos de macOS, Mac Catalyst, tvOS ni watchOS.
// Sign in a tester without automatically checking for update
if(![[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
    signInTesterWithCompletion:^(NSError *_Nullable error) {
      // completion block for signInTester
     if (error) {
       // handle failed sign in
       return;
     }
      // handle successful sign in
  }];
}

// only check for update if tester is already signed in - do not prompt
if([[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
        checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                       NSError *_Nullable error) {
     // completion block for check for update
  }];
}

Si quieres conocer métodos adicionales, como signOutTester(), consulta la documentación de referencia de App Distribution para Swift y Objective‑C.

Paso 4: Compila y prueba tu implementación

Por último, distribuye la compilación a los verificadores con Firebase console para compilar la app y probar la implementación.

Visita la guía de solución de problemas de App Distribution para obtener ayuda sobre problemas comunes, como los siguientes:

  • El verificador no recibe alertas en la app.
  • Al verificador se le solicita que acceda a Google más de una vez