Configura alertas de compilación nuevas en la app con el SDK de iOS para App Distribution

El SDK opcional de Firebase App Distribution te permite mostrar alertas en la app a tus verificadores cuando se encuentran nuevas compilaciones de tu app disponibles para instalar. En esta guía, se explica cómo usar el SDK de 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 Google Cloud Console.

  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 'Firebase/AppDistribution'
  2. En el directorio de tu podfile, ejecuta pod install y, luego, abre el archivo .xcworkspace que se creó.

  3. Codifica el ID de la app de Google (obligatorio solo para iOS 9 y 10):

    Codifica el ID de tu app de Google

    Para agregar el esquema de URL appdistribution-<encoded-google-app-id>, incluye el fragmento en tu Info.plist file (consulta la documentación de Apple y obtén instrucciones para agregar el esquema de URL en Xcode):

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appdistribution-<encoded-google-app-id></string>
            </array>
        </dict>
    </array>

    Luego reemplaza los dos puntos (:) por guiones en el ID de la app de Google para codificarlo. Ten en cuenta que está en el archivo GoogleService-Info.plist. Por ejemplo, si el ID de tu app de Google es:

    7:77777777777:ios:123456789

    El ID de codificado de la app de Google es:

    7-77777777777-ios-123456789
  4. Importa el módulo de Firebase en UIApplicationDelegate:

    Swift

    import Firebase
    

    Objective‑C

    @import Firebase;
    
  5. Configura una instancia compartida de FirebaseApp, generalmente en el método application:didFinishLaunchingWithOptions:de tu app:

    Swift

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

    Objective‑C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  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 incluir checkForUpdate en tu app cuando quieras. Por ejemplo, puedes pedirles a los verificadores que instalen nuevas compilaciones disponibles cuando se inicie la app. Para hacerlo, incluye checkForUpdate en el elemento viewDidAppear del UIViewController.

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
  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) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Check For Update"
message:[NSString stringWithFormat:@"Error during tester sign in! %@", error.localizedDescription]
preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {}];

    [alert addAction:okAction];
    [self presentViewController:alert animated:YES completion:nil];

    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