Дополнительные Firebase App DistributionSDK для iOS и Android позволяют показывать тестировщикам оповещения в приложении, когда становятся доступны новые сборки. В этом руководстве рассказывается, как с помощью SDK App Distribution для iOS и Android создавать и настраивать оповещения о новых сборках для тестировщиков.
Подготовка
Если вы ещё этого не сделали, добавьте Firebase в проект iOS.
Шаг 1. Включите App Distribution Tester API
Выберите проект в консоли Google Cloud.
В разделе Firebase App Testers API нажмите Включить.
Шаг 2. Добавьте App Distribution в приложение
Откройте файл Podfile, созданный для проекта (или запустите
pod init, чтобы создать его), а затем добавьте следующую строку в раздел target:pod 'FirebaseAppDistribution'
В каталоге файла podfile запустите команду
pod install, а затем откройте созданный файл.xcworkspace.Импортируйте модуль Firebase в структуру
Appили классUIApplicationDelegate:Swift
import FirebaseCore import FirebaseAppDistributionObjective-C
@import FirebaseCore; @import FirebaseAppDistribution;Настройте общий экземпляр
FirebaseAppв методеapplication(_:didFinishLaunchingWithOptions:)делегата приложения:Swift
// Use Firebase library to configure APIs FirebaseApp.configure()Objective-C
// Use Firebase library to configure APIs [FIRApp configure];Если swizzling отключен, передайте все открытые URL в SDK App Distribution в реализации
application(_:open:options:):Swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if AppDistribution.appDistribution().application(application, open: url, options: options) { return true } // Handle other non-Firebase URLs here. return false }Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { if ([[FIRAppDistribution appDistribution] application:app openURL:url options:options]) { return YES; } // Handle other non-Firebase URLs here. return NO; }Наконец, перекомпилируйте приложение.
Шаг 3. Настройте оповещения в приложении
App Distribution SDK предлагает два способа настройки оповещений о сборках в приложении для тестировщиков: базовую конфигурацию с готовыми диалоговыми окнами для входа и обновления приложения и расширенную конфигурацию, позволяющую настроить собственный интерфейс. Если вы только начали работать с SDK App Distribution, рекомендуем сначала использовать базовую конфигурацию оповещений.
Базовая конфигурация
Используйте checkForUpdate, чтобы показать тестировщикам, которые ещё не включили уведомления, готовое диалоговое окно с предложением включить их, а затем проверить, доступна ли новая сборка. При вызове метода выполняется следующая последовательность действий:
Проверяет, включил ли тестировщик оповещения, предлагая ему войти в аккаунт Google на сайте App Distribution.
Если тестировщик ещё не включил оповещения, показывается стандартное диалоговое окно.
Включить оповещения на тестовом устройстве нужно только один раз. Они будут работать даже после обновления приложения, пока вы не удалите его или не вызовете метод
signOutTester. Подробную информацию можно найти в справочной документации по методу (Swift или Objective-C).Проверяет наличие новых сборок, которые можно установить.
Вы можете вызвать checkForUpdate() в любой момент работы приложения. Например, можно предложить тестировщикам установить новые сборки при запуске, добавив checkForUpdate() в onAppear(perform:) корневого представления приложения.
В следующем примере проверяется, включил ли тестировщик оповещения и есть ли у него доступ к новой сборке. Если да, то при появлении сборки для установки показывается диалоговое окно:
Swift
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
if error != nil {
// Handle error
return
}
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) {
// Handle error
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];
}
}];
Расширенная конфигурация
Методы signInTester() и isTesterSignedIn позволяют более гибко настраивать процесс входа для тестировщиков, чтобы он лучше соответствовал дизайну вашего приложения.
В приведенном ниже примере проверяется, вошел ли тестировщик в свой аккаунт тестировщика Firebase App Distribution. Если нет, вы можете показать ему интерфейс входа. После того как тестировщик войдет в аккаунт, вы можете вызвать функцию checkForUpdate(), чтобы проверить, есть ли у него доступ к новой сборке.
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
}];
}
Информацию о других методах, в том числе signOutTester(), можно найти в справочной документации по App Distribution для Swift и Objective-C.
Шаг 4. Создайте и протестируйте реализацию
Наконец, создайте приложение и проверьте реализацию, распространив сборку среди тестировщиков с помощью консоли Firebase.
В App Distribution руководстве по устранению неполадок вы найдете информацию о том, как решить распространенные проблемы, например:
- Тестировщик не получает оповещения в приложении
- Тестеру предлагается войти в аккаунт Google несколько раз