可选的 Firebase App Distribution iOS 和 Android SDK 可让您在可以安装应用的新版本时向测试人员显示应用内警报。本指南介绍了如何使用 App Distribution iOS 和 Android SDK 为您的测试人员创建和自定义新的构建警报。
在你开始之前
如果您还没有,请将 Firebase 添加到您的 Android 项目中。
第 1 步:启用 App Distribution Tester API
在Google Cloud Console中选择您的项目。
在 Firebase App Testers API 下,点击Enable 。
第 2 步:将应用分发添加到您的应用
App Distribution Android SDK 包含两个库:
-
firebase-appdistribution-api
- 仅限 API 的库,您可以将其包含在所有构建变体中。 -
firebase-appdistribution
- 完整的 SDK 实现(可选)。
仅 API 库允许您的代码调用 SDK。如果不存在完整的 SDK 实现,则调用将无效。
在您的模块(应用级)Gradle 文件(通常是app/build.gradle
)中声明 App Distribution Android SDK 的依赖项。为避免在您的 Play 构建中包含完整的 SDK 实现的自我更新功能,请将仅 API 库依赖项添加到所有构建变体。仅将完整的 SDK 实现添加到专门用于预发布测试的变体:
Java
dependencies {
// ADD the API-only library to all variants
implementation 'com.google.firebase:firebase-appdistribution-api:16.0.0-beta03'
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta03'
}
Kotlin+KTX
dependencies {
// ADD the API-only library to all variants
implementation 'com.google.firebase:firebase-appdistribution-api-ktx:16.0.0-beta03'
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta03'
}
第 3 步:配置应用内警报
App Distribution Android SDK 提供以下方法来为您的测试人员设置应用内构建警报:
- 一个基本的警报配置,带有预构建的应用程序更新和登录对话框以显示给测试人员。
- 一种高级警报配置,可让您自定义自己的用户界面。
如果您是第一次使用 App Distribution Android SDK,我们建议您使用Basic Configuration 。
基本配置
使用updateIfNewReleaseAvailable
向尚未启用警报的测试人员显示预构建的启用警报对话框,然后检查是否有新的构建可用。调用时,该方法执行以下序列:
检查测试人员是否启用了警报。如果测试人员尚未启用警报,该方法会提示测试人员使用他们的 Google 帐户登录 App Distribution。
检查新可用的构建以供测试人员安装。
显示提示测试人员更新的预构建警报。
如果新版本是 Android App Bundle (AAB),则将测试人员重定向到 Google Play 以完成更新过程。
如果新版本是 Android 应用程序包 (APK),SDK 会在后台下载新版本,并在下载完成时提示测试人员安装。 SDK 使用
NotificationManager
向用户发送下载进度通知。您还可以通过将onProgressUpdate
处理程序附加到updateIfNewReleaseAvailable
任务来添加自己的进度指示器。
您可以在应用程序中的任何位置调用updateIfNewReleaseAvailable
。例如,您可以在应用程序主活动的onResume
方法期间调用updateIfNewReleaseAvailable
。
以下示例检查测试人员是否启用了警报并有权访问新版本。如果满足这些条件,则会在构建可安装时显示一个对话框:
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;
}
}
});
Kotlin+KTX
// 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.
}
}
}
}
高级配置
高级登录配置
方法signInTester
和isTesterSignedIn
使您可以更灵活地自定义测试人员的登录体验,从而使测试人员的体验更好地匹配您的应用程序的外观和感觉。
以下示例检查测试人员是否已经登录到他们的 App Distribution 测试人员帐户。这使您可以选择仅向尚未登录的测试人员显示您的登录用户界面 (UI)。测试人员登录后,您可以调用updateIfNewReleaseAvailable
来检查测试人员是否有权访问新版本。
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.
});
}
Kotlin+KTX
// 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.
}
}
在您的登录 UI 中,当测试人员选择继续时,调用signInTester()
:
Java
firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
// Handle successful sign-in.
}).addOnFailureListener(e -> {
// Handle failed sign-in.
});
Kotlin+KTX
firebaseAppDistribution.signInTester().addOnSuccessListener {
// Handle successful sign-in.
}.addOnFailureListener {
// Handle failed sign-in.
});
高级更新配置
方法checkForNewRelease
和updateApp
使您可以更灵活地自定义何时提示您的测试人员进行更新。您还可以自定义预构建的更新对话框和下载进度指示器,以便它们更好地匹配您的应用程序的外观和感觉。
请注意, updateApp
不提供下载进度指示。这意味着您需要使用NotificationManager
、某种应用内状态显示或其他方法来实现自己的进度指示。
以下示例检查是否有新版本可用,然后显示自定义 UI。在调用checkForNewRelease
和updateApp
之前,请确保测试人员已使用高级登录配置登录。
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.
});
Kotlin+KTX
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.
}
当测试人员选择从您的更新 UI 继续更新时,调用updateApp()
:
Java
firebaseAppDistribution.updateApp()
.addOnProgressListener(updateState -> {
// Use updateState to show update progress.
});
Kotlin+KTX
firebaseAppDistribution.updateApp()
.addOnProgressListener { updateState ->
// Use updateState to show update progress.
}
第 4 步:构建和测试您的实现
通过使用 Firebase 控制台将构建分发给测试人员来构建您的应用并测试您的实施。
访问应用程序分发故障排除指南以获取有关常见问题的帮助,例如:
- 测试人员未收到应用内警报
- 多次提示测试人员登录 Google