Notificar testadores sobre novos builds

Os SDKs opcionais do Firebase App Distribution para Android e iOS permitem que você mostre alertas no app para seus testadores quando novos builds do seu app estiverem disponíveis para instalação. Neste guia, explicamos como usar os SDKs do App Distribution para Android e iOS na criação e personalização de alertas de novas versões 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 'FirebaseAppDistribution'
  2. No diretório do podfile, execute pod install e abra o arquivo .xcworkspace criado.

  3. Importe o módulo do Firebase no struct App ou em UIApplicationDelegate:

    Swift

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

    @import FirebaseCore;
    @import FirebaseAppDistribution;
    
  4. Configure uma instância compartilhada do FirebaseApp no método application(_:didFinishLaunchingWithOptions:) do delegado do app:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. Se o swizzling estiver desativado, transmita todos os URLs abertos para o SDK do App Distribution na implementação 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 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 app. Os alertas permanecem ativados no dispositivo de teste até que o app seja desinstalado ou o método signOutTester seja chamado. Consulte a documentação de referência do método (Swift ou Objective-C) para mais informações.

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

É possível invocar 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 onAppear(perform:) da visualização raiz do app.

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

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

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.