O SDK opcional do Firebase App Distribution permite que você exiba alertas no app para seus testadores quando novos builds do seu 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
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 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:
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.
Ativar alertas é um processo único no dispositivo de teste e persiste entre as atualizações do seu app. Os alertas permanecem ativados no dispositivo de teste até que o app seja desinstalado ou até que o método
signOutTester
seja chamado. Para mais informações, consulte a documentação de referência do método (Swift ou Objective-C).Verifica se há builds recém-disponibilizados para a instalação do testador.
Você pode incluir 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 viewDidAppear
de UIViewController
.
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
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];
}
}];
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 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.