通知测试人员有关新 build 的信息


利用可选的 Firebase App Distribution iOS 和 Android SDK,您可以在有新的应用 build 可供安装时向测试人员显示应用内提醒。本指南介绍了如何使用 App Distribution iOS 和 Android SDK 为您的测试人员创建和自定义新的 build 提醒。

准备工作

将 Firebase 添加到您的 Android 项目(如果尚未添加)。

第 1 步:启用 App Distribution Tester API

  1. Google Cloud 控制台中选择您的项目。

  2. 在“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。调用时,该方法将遵循以下顺序:

  1. 检查测试人员是否已启用提醒。如果测试人员尚未启用提醒,该方法会提示测试人员使用其 Google 账号登录 App Distribution

  2. 检查是否有新推出的 build 可供测试人员安装。

  3. 显示提示测试人员进行更新的预构建提醒。

  4. 如果新 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;
        }
      }
    });

高级配置

高级登录配置

signInTesterisTesterSignedIn 方法可让您更灵活地自定义测试人员的登录体验,以使测试人员的体验能够更好地与应用的外观和风格相匹配。

以下示例会检查测试人员是否已登录其 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.
});

高级更新配置

checkForNewReleaseupdateApp 方法可让您更灵活地自定义何时提醒测试人员进行更新。您还可以自定义预构建的更新对话框和下载进度指示器,以使它们能够更好地与应用的外观和风格相匹配。

请注意,updateApp 不提供下载进度指示。这意味着,您需要使用 NotificationManager、某种应用内状态显示或某种其他方法实现自己的进度指示。

以下示例会检查是否有新版本,然后会显示自定义界面。在调用 checkForNewReleaseupdateApp 之前,请确保使用高级登录配置来让测试人员登录。

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