O SDK do Firebase App Distribution, que é opcional, permite exibir alertas no app para os testadores quando novos builds do 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
Selecione o projeto no Console do Google Cloud.
Em API Firebase App Testers, clique em Ativar.
Etapa 2: adicionar o App Distribution ao seu app
Recomendamos o uso do CocoaPods para instalar as bibliotecas do Firebase. No entanto, se você prefere não usar CocoaPods, é possível integrar os frameworks do SDK diretamente.
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'
No diretório do podfile, execute
pod install
e abra o arquivo.xcworkspace
criado.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 noInfo.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
Importe o módulo do Firebase no
UIApplicationDelegate
:Swift
import Firebase
Objective-C
@import Firebase;
Configure uma instância compartilhada do
FirebaseApp
, normalmente no métodoapplication:didFinishLaunchingWithOptions:
do seu app:Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
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 de alerta básica, que vem com uma caixa de diálogo predefinida para ser exibida aos testadores, e uma configuração de alerta avançada, que permite personalizar sua própria interface do usuário (IU). Se você é novo no SDK, recomendamos primeiro testar 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:
Verifica se um testador ativou alertas solicitando que ele faça login no App Distribution com a Conta do Google.
Se o testador ainda não tiver ativado os alertas, uma caixa de diálogo pré-criada será exibida. A ativação de alertas é um processo único no dispositivo de teste e persiste em todas as atualizações do app. Depois que o recurso for ativado, os alertas permanecerão ativados no dispositivo até que o app seja desinstalado ou até que o método
signOutTester
seja chamado. Para mais informações sobre esse método de configuração avançada, consulte a documentação de referência do App Distribution para Swift e Objective-C.Verifica se há builds recém-disponibilizados para a instalação do testador.
Por exemplo, o código a seguir verifica se o testador ativou os alertas e tem acesso a um novo build:
Swift
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
})
Objective-C
[[FIRAppDistribution appDistribution]
checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
NSError *_Nullable error) {
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
}];
É possível incluir esse método 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 exibe uma caixa de diálogo para o testador quando um novo build estiver disponível para instalação:
Swift
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
[[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];
}
}];
Para saber mais sobre os métodos adicionais, consulte a documentação de referência do App Distribution para Swift e Objective-C.
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
// 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
// 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 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.