Notificar testadores sobre novos builds


Os SDKs opcionais do iOS e Android do Firebase App Distribution permitem que você mostre alertas no app para os testadores quando novos builds do app estiverem disponíveis para instalação. Neste guia, explicamos como usar os SDKs do iOS e Android do App Distribution na criação e personalização de alertas de novos builds para os testadores.

Antes de começar

Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.

Etapa 1: ativar a API App Distribution Tester

  1. Selecione seu projeto no console do Google Cloud.

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

Etapa 2: adicionar o App Distribution ao app

O SDK do Android do App Distribution é composto por duas bibliotecas:

  • firebase-appdistribution-api: a biblioteca somente de API, que pode ser incluída em todas as variantes de build.
  • firebase-appdistribution: a implementação completa do SDK (opcional).

A biblioteca somente de API permite que seu código faça chamadas para o SDK. As chamadas só terão efeito se a implementação completa do SDK for realizada.

Declare a dependência do SDK do Android do App Distribution no arquivo Gradle do módulo (nível do app), que geralmente é <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle. Para não incluir a funcionalidade de autoatualização da implementação completa do SDK nos builds do Play, adicione a dependência da biblioteca somente de API a todas as variantes de build. Adicione apenas a implementação completa do SDK para variantes voltadas exclusivamente para testes de pré-lançamento.

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta14")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta14")
}

Está procurando um módulo de biblioteca específico do Kotlin? A partir da versão de outubro de 2023, os desenvolvedores Kotlin e Java podem depender do módulo da biblioteca principal. Para mais detalhes, consulte as perguntas frequentes sobre essa iniciativa.

Etapa 3: configurar alertas no app

O SDK do Android do App Distribution oferece as seguintes 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 pré-criadas de atualização e login do app para exibição aos testadores.
  • Uma configuração de alerta avançada que permite personalizar a própria interface do usuário.

Caso você esteja usando o SDK do Android do App Distributionpela primeira vez, recomendamos usar a configuração básica.

Configuração básica

Use updateIfNewReleaseAvailable 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. Caso ele não tenha feito isso, o método solicitará que faça login no App Distribution com a conta do Google.

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

  3. Exibe um alerta predefinido solicitando que o testador faça a atualização.

  4. Se o novo build for um Android App Bundle (AAB), o testador será redirecionado para o Google Play para concluir o processo de atualização.

    Se o novo build for um pacote de aplicativo Android (APK), o SDK fará o download dele em segundo plano e solicitará que o testador faça a instalação quando o download for concluído. O SDK envia notificações de progresso de download ao usuário usando NotificationManager. Também é possível adicionar seu próprio indicador de progresso anexando um gerenciador onProgressUpdate à tarefa updateIfNewReleaseAvailable.

updateIfNewReleaseAvailable pode ser chamado a qualquer momento no seu app. Por exemplo, é possível chamar updateIfNewReleaseAvailable durante o método onResume da atividade principal do app.

O exemplo a seguir verifica se o testador ativou alertas e tem acesso a um novo build. Se essas condições forem atendidas, uma caixa de diálogo será mostrada quando o build estiver disponível para instalação:

Kotlin+KTX

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener { updateProgress ->
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    }
    .addOnFailureListener { e ->
      // (Optional) Handle errors.
      if (e is FirebaseAppDistributionException) {
        when (e.errorCode) {
          Status.NOT_IMPLEMENTED -> {
            // SDK did nothing. This is expected when building for Play.
          }
          else -> {
            // Handle other errors.
          }
        }
      }
    }

Java

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener(updateProgress -> {
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    })
    .addOnFailureListener(e -> {
      // (Optional) Handle errors.
      if (e instanceof FirebaseAppDistributionException) {
        switch (((FirebaseAppDistributionException)e).getErrorCode()) {
          case NOT_IMPLEMENTED:
            // SDK did nothing. This is expected when building for Play.
            break;
          default:
            // Handle other errors.
            break;
        }
      }
    });

Configuração avançada

Configuração avançada de login

Os métodos signInTester e isTesterSignedIn oferecem mais flexibilidade para personalizar a experiência de login do testador. Assim, a experiência pode ser melhor para a aparência do app.

O exemplo a seguir verifica se o testador já fez login na conta de testador do App Distribution. Isso permite que você opte por exibir a interface de usuário (IU) de login apenas para testadores que ainda não fizeram login. Depois que o testador faz login, é possível chamar o updateIfNewReleaseAvailable para verificar se o testador tem acesso a um novo build.

Kotlin+KTX

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
        // Handle failed update.
    }
}

Java

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
        // Handle failed update.
    });
}

Na IU de login, quando o testador escolher continuar, chame signInTester():

Kotlin+KTX

firebaseAppDistribution.signInTester().addOnSuccessListener {
  // Handle successful sign-in.
}.addOnFailureListener {
  // Handle failed sign-in.
});

Java

firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
  // Handle successful sign-in.
}).addOnFailureListener(e -> {
  // Handle failed sign-in.
});

Configuração avançada de atualização

Os métodos checkForNewRelease e updateApp oferecem mais flexibilidade para personalizar quando o testador é solicitado a atualizar. Você também pode personalizar a caixa de diálogo de atualização pré-criada e o indicador de progresso de download para que eles possam combinar com a aparência do seu app.

Observe que updateApp não fornece indicação de progresso de download. Isso significa que você precisa implementar sua própria indicação de progresso usando NotificationManager, algum tipo de exibição de status no app ou outra abordagem.

O exemplo a seguir verifica se uma nova versão está disponível e, em seguida, exibe uma IU personalizada. Antes de chamar checkForNewRelease e updateApp, verifique se o testador fez login usando a configuração avançada de login.

Kotlin+KTX

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
    if (release != null) {
        // New release available. Start your update UI here.
    }
}.addOnFailureListener {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
}

Java

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
    if (release != null) {
        // New release available. Start your update UI here.
    }
}).addOnFailureListener(e -> {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
});

Quando o testador escolher a IU de atualização, chame updateApp():

Kotlin+KTX

firebaseAppDistribution.updateApp()
    .addOnProgressListener { updateState ->
      // Use updateState to show update progress.
    }

Java

firebaseAppDistribution.updateApp()
    .addOnProgressListener(updateState -> {
      // Use updateState to show update progress.
    });

Etapa 4: criar e testar a implementação

Crie o app e distribua o build para os testadores usando o console do Firebase para testar a implementação.

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

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