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
Selecione seu projeto no console do Google Cloud.
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:
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.
Verifica se há builds recém-disponibilizados para a instalação do testador.
Exibe um alerta predefinido solicitando que o testador faça a atualização.
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 gerenciadoronProgressUpdate
à tarefaupdateIfNewReleaseAvailable
.
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.