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 para Android, 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

O SDK do App Distribution para Android é 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 App Distribution para Android no seu arquivo do Gradle (nível do app) do módulo, que geralmente é <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle. Para evitar incluir a funcionalidade de atualização completa do SDK nas versões do Google 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:

Kotlin+KTX

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

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

Java

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

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

Etapa 3: configurar alertas no app

O SDK do App Distribution para Android 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 App Distribution para Android pela 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 updateIfNewReleaseAvailable para verificar se ele 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 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.