Configurar novos alertas de build no app com o SDK do App Distribution

O SDK do Firebase App Distribution, que é opcional, permite exibir alertas no app para os testadores quando novos builds do app estiverem disponíveis para instalação. Este guia explica como usar o SDK do App Distribution para criar e personalizar alertas de novos builds para seus testadores.

Antes de começar

Adicione o Firebase ao seu projeto do iOS, caso ainda não tenha feito isso.

Etapa 1: ativar a API App Distribution Tester

  1. Selecione o projeto no Console do Google Cloud.

  2. Em API Firebase App Testers, clique em Ativar.

Etapa 2: adicionar o App Distribution ao seu app

Recomendamos o uso do CocoaPods para instalar as bibliotecas do Firebase. No entanto, se você prefere não usar CocoaPods, é possível integrar os frameworks do SDK diretamente.

  1. Abra o podfile que você criou para o projeto (ou execute pod init para criar um). Em seguida, adicione a seguinte linha na seção de destino:

    pod 'Firebase/AppDistribution'
  2. No diretório do podfile, execute pod install e abra o arquivo .xcworkspace criado.

  3. Codifique o ID do Google app (obrigatório apenas para iOS versões 9 e 10):

    Codificar o ID do Google app

    Adicione o esquema de URL appdistribution-<encoded-google-app-id> incluindo o snippet no Info.plist file. Consulte a documentação da Apple para ver instruções sobre como adicionar o URL no 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>
    

    Em seguida, codifique o ID do Google app substituindo o sinal de dois-pontos (:) por traços (-). Observe que o ID do Google app está localizado no arquivo GoogleService-Info.plist. Por exemplo, se o ID do Google app for:

    7:77777777777:ios:123456789

    Seu ID do Google app codificado é:

    7-77777777777-ios-123456789
  4. Importe o módulo do Firebase no UIApplicationDelegate:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. Configure uma instância compartilhada do FirebaseApp, normalmente no método application:didFinishLaunchingWithOptions: do seu app:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. Por fim, recompile o app.

Etapa 3: configurar alertas no app

O SDK do App Distribution oferece duas maneiras de configurar alertas de build no app para os testadores: uma configuração de alerta básica, que vem com uma caixa de diálogo predefinida para ser exibida aos testadores, e uma configuração de alerta avançada, que permite personalizar sua própria interface do usuário (IU). Se você é novo no SDK, recomendamos primeiro testar a configuração de alerta básica.

Configuração básica

Use checkForUpdate para exibir uma caixa de diálogo "Ativar alertas" pré-criada para testadores que ainda não ativaram os alertas e, em seguida, verificar se há um novo build disponível. Quando chamado, o método gera a seguinte sequência:

  1. Verifica se um testador ativou alertas solicitando que ele faça login no App Distribution com a Conta do Google.

  2. Se o testador ainda não tiver ativado os alertas, uma caixa de diálogo pré-criada será exibida. A ativação de alertas é um processo único no dispositivo de teste e persiste em todas as atualizações do app. Depois que o recurso for ativado, os alertas permanecerão ativados no dispositivo até que o app seja desinstalado ou até que o método signOutTester seja chamado. Para mais informações sobre esse método de configuração avançada, consulte a documentação de referência do App Distribution para Swift e Objective-C.

  3. Verifica se há builds recém-disponibilizados para a instalação do testador.

Por exemplo, o código a seguir verifica se o testador ativou os alertas e tem acesso a um novo build:

Swift

AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
})

Objective-C

[[FIRAppDistribution appDistribution]
    checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                   NSError *_Nullable error) {
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
}];

É possível incluir esse método em qualquer ponto do app. Por exemplo, é possível solicitar que os testadores instalem builds recém-disponibilizados na inicialização incluindo checkForUpdate em viewDidAppear de UIViewController.

O exemplo a seguir exibe uma caixa de diálogo para o testador quando um novo build estiver disponível para instalação:

Swift

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

[[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];
  }
}];

Para saber mais sobre os métodos adicionais, consulte a documentação de referência do App Distribution para Swift e Objective-C.

Configuração avançada

Os métodos signInTester e isTesterSignedIn oferecem mais flexibilidade para personalizar a experiência de login do testador para corresponder melhor com a experiência do app.

O exemplo a seguir verifica se o testador já fez login na conta de testador do Firebase App Distribution. Assim, você pode optar por exibir sua IU de login apenas para testadores que ainda não fizeram login. Depois que o testador fizer login, você poderá chamar checkForUpdate para verificar se ele tem acesso a um novo build.

Swift

// 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

// 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
  }];
}

Para informações sobre outros métodos, incluindo signOutTester, consulte a documentação de referência do App Distribution para Swift e Objective-C.

Etapa 4: criar e testar a implementação

Por fim, crie o app e teste a implementação distribuindo a versão para os testadores usando o Console do Firebase.

Acesse o Guia de solução de problemas do App Distribution para mais informações sobre questões comuns, por exemplo:

  • O testador não recebe alertas no app.
  • O testador precisa fazer login no Google mais de uma vez.