Дополнительные пакеты Firebase App Distribution для iOS и Android SDK позволяют отображать внутри приложения оповещения для тестировщиков о новых сборках приложения, доступных для установки. В этом руководстве объясняется, как использовать App Distribution для iOS и Android SDK для создания и настройки оповещений о новых сборках для тестировщиков.
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
Шаг 1 : включите API App Distribution Tester
Выберите свой проект в консоли Google Cloud .
В разделе Firebase App Testers API нажмите Включить .
Шаг 2 : Добавьте App Distribution в свое приложение
App Distribution Android SDK состоит из двух библиотек:
-
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
). Чтобы избежать включения функции самообновления полной реализации SDK в ваши сборки Play , добавьте зависимость библиотеки API-only ко всем вариантам сборки . Добавляйте полную реализацию SDK только в варианты, предназначенные исключительно для предварительного тестирования.
dependencies {
// ADD the API-only library to all variants
implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta16")
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta16")
}
Ищете модуль библиотеки, специфичный для 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
основной активности приложения.
В следующем примере проверяется, включены ли у тестировщика оповещения и есть ли у него доступ к новой сборке. Если эти условия выполнены, отображается диалоговое окно, когда сборка становится доступной для установки:
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 более одного раза