Дополнительные Firebase App DistributionSDK для iOS и Android позволяют показывать тестировщикам оповещения в приложении, когда становятся доступны новые сборки. В этом руководстве рассказывается, как с помощью SDK App Distribution для iOS и Android создавать и настраивать оповещения о новых сборках для тестировщиков.
Подготовка
Если вы ещё этого не сделали, добавьте Firebase в проект для Android.
Шаг 1. Включите App Distribution Tester API
Выберите проект в консоли Google Cloud.
В разделе Firebase App Testers API нажмите Включить.
Шаг 2. Добавьте App Distribution в приложение
Шаг 2. Добавьте App Distribution в приложение
Android SDK App Distribution состоит из двух библиотек:
firebase-appdistribution-api– библиотека только для API, которую можно включить во все варианты сборки.firebase-appdistribution– полная реализация SDK (необязательно).
Библиотека API позволяет коду вызывать SDK. Если SDK не реализован полностью, вызовы не будут иметь никакого эффекта.
Объявите зависимость для App Distribution Android SDK в файле Gradle модуля (на уровне приложения), который обычно называется <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle. Чтобы избежать включения в сборки Play функции автоматического обновления полной реализации SDK, добавьте зависимость библиотеки только для API во все варианты сборки.
Добавляйте полную реализацию SDK только в варианты, предназначенные исключительно для тестирования предварительной версии.
dependencies {
// ADD the API-only library to all variants
implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta20")
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta20")
}
Ищете модуль библиотеки, предназначенный для Kotlin? Начиная с октябрьской версии 2023 года, разработчики на Kotlin и Java могут использовать основной модуль библиотеки (подробнее о переходе на основной модуль).
Шаг 3. Настройте оповещения в приложении
App Distribution Android SDK позволяет настроить оповещения о сборках в приложении для тестировщиков следующими способами:
- Базовая конфигурация оповещений с готовыми диалоговыми окнами для обновления приложения и входа в аккаунт, которые показываются тестировщикам.
- Расширенная конфигурация оповещений, позволяющая настроить собственный интерфейс.
Если вы впервые используете App Distribution Android SDK, рекомендуем выбрать базовую конфигурацию.
Базовая конфигурация
Используйте updateIfNewReleaseAvailable, чтобы показывать тестировщикам, которые ещё не включили уведомления, готовое диалоговое окно с предложением включить их, а затем проверять, доступна ли новая сборка. При вызове метода выполняется следующая последовательность действий:
Проверяет, включил ли тестировщик уведомления. Если тестер ещё не включил оповещения, метод предложит ему войти в App Distribution с помощью аккаунта Google.
Проверяет наличие новых сборок, которые можно установить.
Показывает встроенное уведомление с предложением обновить приложение.
Если новая сборка представляет собой набор Android App Bundle (AAB), тестировщик будет перенаправлен на страницу Google Play, чтобы завершить процесс обновления.
Если новая сборка представляет собой пакет приложения для Android (APK), SDK скачивает ее в фоновом режиме и предлагает тестировщику установить ее после завершения скачивания. SDK отправляет пользователю уведомления о ходе скачивания с помощью
NotificationManager. Вы также можете добавить собственный индикатор выполнения, прикрепив обработчикonProgressUpdateк задачеupdateIfNewReleaseAvailable.
Вы можете вызвать updateIfNewReleaseAvailable в любой момент работы приложения. Например, это можно сделать updateIfNewReleaseAvailable в методе onResume
основного класса activity.
В примере ниже проверяется, включил ли тестировщик уведомления и есть ли у него доступ к новой сборке. Если эти условия соблюдены, при наличии сборки для установки появится диалоговое окно:
Kotlin
// 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;
}
}
});
Расширенные настройки
Расширенные настройки входа
Методы signInTester и isTesterSignedIn позволяют более гибко настраивать процесс входа для тестировщиков, чтобы он лучше соответствовал дизайну вашего приложения.
В следующем примере проверяется, вошел ли тестировщик в аккаунт тестировщика App Distribution. Вы можете настроить показ интерфейса входа только для тестировщиков, которые ещё не вошли в аккаунт. После того как тестировщик войдет в аккаунт, вы можете вызвать метод updateIfNewReleaseAvailable, чтобы проверить, есть ли у него доступ к новой сборке.
Kotlin
// 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.
});
}
Когда тестировщик нажимает кнопку "Продолжить" в интерфейсе входа, вызовите signInTester():
Kotlin
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.
});
Расширенные настройки обновлений
Методы checkForNewRelease и updateApp позволяют более гибко настраивать момент, когда тестировщику будет предложено обновить приложение. Вы также можете настроить встроенное диалоговое окно обновления и индикатор прогресса скачивания, чтобы они лучше соответствовали стилю вашего приложения.
Обратите внимание, что updateApp не показывает прогресс скачивания. Это означает, что вам нужно реализовать собственную индикацию прогресса с помощью NotificationManager, какого-либо статуса в приложении или иным способом.
В следующем примере проверяется, доступна ли новая версия, а затем отображается пользовательский интерфейс. Перед вызовом checkForNewRelease и updateApp убедитесь, что тестировщик вошел в аккаунт, используя расширенную конфигурацию входа.
Kotlin
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.
});
Когда тестировщик решит продолжить обновление через ваш интерфейс, вызовите updateApp():
Kotlin
firebaseAppDistribution.updateApp()
.addOnProgressListener { updateState ->
// Use updateState to show update progress.
}
Java
firebaseAppDistribution.updateApp()
.addOnProgressListener(updateState -> {
// Use updateState to show update progress.
});
Шаг 4. Создайте и протестируйте реализацию
Создайте приложение и проверьте реализацию, распространив сборку среди тестировщиков с помощью консоли Firebase.
В App Distribution руководстве по устранению неполадок вы найдете информацию о том, как решить распространенные проблемы, например:
- Тестировщик не получает оповещения в приложении
- Тестеру предлагается войти в аккаунт Google несколько раз