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

O SDK opcional do Firebase App Distribution permite que você exiba alertas no app para seus testadores quando novos builds do seu 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

  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 básica de alerta, que vem com caixas de diálogo de atualização e login pré-criadas para exibição aos testadores, e uma configuração de alerta avançada, que permite personalizar a própria interface do usuário. Se você é novo no SDK do App Distribution, recomendamos usar 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.

    Ativar alertas é um processo único no dispositivo de teste e persiste entre as atualizações do seu app. Os alertas permanecem ativados no dispositivo de teste até que o app seja desinstalado ou até que o método signOutTester seja chamado. Para mais informações, consulte a documentação de referência do método (Swift ou Objective-C).

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

Você pode incluir checkForUpdate 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 verifica se o testador ativou ou não os alertas e tem acesso a um novo build e, em caso afirmativo, exibe uma caixa de diálogo quando o build está disponível para instalação:

Swift

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou 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

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou 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];
  }
}];

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

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou 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

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, tvOS ou 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
  }];
}

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 o build 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.