利用可选的 Firebase App Distribution iOS 和 Android SDK,您可以在有新的应用 build 可供安装时向测试人员显示应用内提醒。本指南介绍了如何使用 App Distribution iOS 和 Android SDK 为您的测试人员创建和自定义新的 build 提醒。
准备工作
将 Firebase 添加到您的 Android 项目(如果尚未添加)。
第 1 步:启用 App Distribution Tester API
在 Google Cloud 控制台中选择您的项目。
在“Firebase App Testers API”下,点击启用。
第 2 步:将 App Distribution 添加到您的应用
App Distribution Android SDK 由两个库构成:
firebase-appdistribution-api
- 仅限 API 的库,可添加到所有 build 变体中。firebase-appdistribution
- 完整的 SDK 实现(可选)。
通过仅限 API 的库,您的代码可以调用 SDK。如果不存在完整的 SDK 实现,调用将不起作用。
在模块(应用级)Gradle 文件(通常为 <project>/<app-module>/build.gradle.kts
或 <project>/<app-module>/build.gradle
)中声明 App Distribution Android SDK 的依赖项。为避免在 Play build 中添加完整的 SDK 实现的自行更新功能,请将仅限 API 的库的依赖项添加到所有 build 变体中。仅将完整的 SDK 实现添加到专门用于预发布测试的变体。
dependencies {
// ADD the API-only library to all variants
implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta14")
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta14")
}
是否想要查找 Kotlin 专用的库模块?从 2023 年 10 月发布的版本开始,Kotlin 和 Java 开发者可以依赖于主库模块(如需了解详情,请参阅关于此计划的常见问题解答)。
第 3 步:配置应用内提醒
App Distribution Android SDK 提供了以下为测试人员设置应用内 build 提醒的方法:
- 基本提醒配置,提供要向测试人员显示的预构建应用更新和登录对话框。
- 高级提醒配置,可让您自定义专属界面。
如果您是首次使用 App Distribution Android SDK,我们建议您使用基本配置。
基本配置
使用 updateIfNewReleaseAvailable
向尚未启用提醒的测试人员显示预构建的“启用提醒”对话框,然后检查是否有新的 build。调用时,该方法将遵循以下顺序:
检查测试人员是否已启用提醒。如果测试人员尚未启用提醒,该方法会提示测试人员使用其 Google 账号登录 App Distribution。
检查是否有新推出的 build 可供测试人员安装。
显示提示测试人员进行更新的预构建提醒。
如果新 build 是 Android App Bundle (AAB),则会将测试人员重定向到 Google Play 以完成更新流程。
如果新 build 是 Android 应用软件包 (APK),则该 SDK 会在后台下载新 build,并在下载完成时提示测试人员安装。该 SDK 会使用
NotificationManager
向用户发送下载进度通知。您还可以通过向updateIfNewReleaseAvailable
任务附加onProgressUpdate
处理程序来添加自己的进度指示器。
您可以在应用中的任何时间点调用 updateIfNewReleaseAvailable
。例如,您可以在应用主 Activity 的 onResume
方法执行过程中调用 updateIfNewReleaseAvailable
。
以下示例会检查测试人员是否启用了提醒以及是否可以访问新的 build。如果满足这些条件,则当 build 可供安装时,系统会显示一个对话框:
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
以检查测试人员是否可以访问新的 build。
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 控制台分发 build 给测试人员来测试您的实现。
如需有关类似于以下常见问题的帮助,请访问 App Distribution 问题排查指南:
- 测试人员收不到应用内提醒
- 系统多次提示测试人员登录 Google