使用 Firebase App Distribution iOS SDK 提醒测试人员有关新应用版本的信息 - Codelab

1. 概览

欢迎学习“在 iOS 应用中集成 Firebase App Distribution SDK”Codelab。在此 Codelab 中,您将向应用添加 App Distribution SDK,以便在有新的 build 可供下载时向测试人员显示应用内提醒。您将学习如何同时使用基本配置和自定义配置,让测试人员登录以接收更新。然后,您需要将新版本推送到 App Distribution,并直接在应用中触发新的构建提醒。

学习内容

  • 如何使用 App Distribution 将预发布版本的应用分发给实际测试人员
  • 如何将 App Distribution iOS SDK 集成到您的应用中
  • 如何在有新的预发布 build 可供安装时提醒测试人员
  • 如何自定义 SDK 以满足您独特的测试需求

所需条件

  • Xcode 12(或更高版本)
  • CocoaPods 1.9.1(或更高版本)
  • 用于临时发布的 Apple 开发者帐号
  • 一台用于测试的 iOS 实体设备。( iOS 模拟器应用适用于此 Codelab 的大部分内容,但模拟器无法下载版本。)

您打算如何使用本教程?

仅阅读教程内容 阅读并完成练习

您如何评价您构建 iOS 应用的经验?

新手 中等 熟练

2. 创建 Firebase 控制台项目

添加新的 Firebase 项目

  1. 登录 Firebase。
  2. Firebase 控制台中,点击“添加项目”,然后将您的项目命名为“Firebase Codelab”。

您无需为此项目启用 Google Analytics。

  1. 点击 Create project

将应用添加到 Firebase

按照相关文档中的说明在 Firebase 中注册您的应用。使用“com.google.firebase.codelab.AppDistribution.<your_name>”作为 iOS 软件包 ID。

出现提示时,下载项目的 GoogleService-Info.plist 文件。您稍后会用到它。

3. 获取示例项目

下载代码

首先克隆示例项目。

git clone git@github.com:googlecodelabs/firebase-appdistribution-ios.git

如果您未安装 git,也可以从其 GitHub 页面或点击此链接下载示例项目。

下载依赖项并在 Xcode 中打开项目

  1. 在同一目录中打开 Podfile
cd firebase-appdistribution-ios/start
Open Podfile
  1. 将以下代码行添加到您的 podfile 中:

Podfile

pod 'Firebase/AppDistribution'

在项目目录中运行 pod update,并在 Xcode 中打开项目。

pod install --repo-update
xed .

更新软件包标识符以与您的 Firebase 应用匹配

在左侧菜单中,双击 AppDistributionExample。然后,找到常规标签页,并更改软件包标识符,使其与 Firebase 应用的软件包标识符相匹配,您可以在项目设置中找到该标识符。它应该是“com.google.firebase.codelab.AppDistribution.<your_name>”

将 Firebase 添加至您的应用

在文件系统中找到您之前下载的 GoogleService-Info.plist 文件,然后将其拖动到 Xcode 项目的根目录中。您也可以随时从项目的设置页面下载此文件。

3cf9290805e7fdab.png

AppDistributionExample/AppDelegate.swift 文件中,在文件顶部导入 Firebase

AppDistributionExample/AppDelegate.swift

import Firebase

didFinishLaunchingWithOptions 方法中,添加一个调用以配置 Firebase。

AppDistributionExample/AppDelegate.swift

FirebaseApp.configure()

4.使用 App Distribution SDK 设置有关新 build 的应用内提醒

在此步骤中,您将向应用添加 Firebase App Distribution SDK,并在有新的应用 build 可供安装时向测试人员显示应用内提醒。为此,请确保您已在 Google Cloud 控制台中为您的“Firebase Codelab”项目启用了 Firebase App Testers API。您需要使用同一个帐号登录,然后从顶部的下拉菜单中选择正确的项目。

配置应用内提醒

App Distribution SDK 提供了两种为测试人员设置应用内构建提醒的方法:基本提醒配置(提供要向测试人员显示的预构建登录对话框)和高级提醒配置(允许您自定义自己的界面 (UI))。

我们先从基本提醒配置开始。您可以使用 checkForUpdate 向尚未启用提醒的测试人员显示预构建的启用提醒对话框,然后检查是否有新的 build。测试人员在 App Distribution 中登录有权访问该应用的账号后,即可启用提醒。调用时,该方法将遵循以下顺序:

  1. 检查测试人员是否已启用提醒。否则,系统会显示一个预构建的对话框,提示他们使用 Google 账号登录 App Distribution。

只需在测试设备上启用提醒一次,应用的所有更新都将保持启用状态。提醒会在测试设备上保持启用状态,直到应用被卸载或 signOutTester 方法被调用为止。如需了解详情,请参阅该方法的参考文档(SwiftObjective-C)。

  1. 检查是否有新推出的 build 可供测试人员安装。返回 release 对象或错误

您可以在应用的任何位置包含 checkForUpdate。例如,您可以通过在 UIViewControllerviewDidAppear 中加入 checkForUpdate,以在启动时提示测试人员安装新推出的版本。

AppDistributionViewController.swift 文件中,在文件顶部导入 Firebase

AppDistributionViewController.swift

import Firebase

打开 AppDistributionExample/AppDistributionViewController.swift,然后将代码行复制到 viewDidAppear 方法中,如下所示:

AppDistributionViewController.swift

 override func viewDidAppear(_ animated: Bool) {
    checkForUpdate()
 }

现在,实现 checkForUpdate() 方法。

AppDistributionViewController.swift

  private func checkForUpdate() {
    AppDistribution.appDistribution().checkForUpdate(completion: { [self] release, error in
      var uiAlert: UIAlertController

      if error != nil {
        uiAlert = UIAlertController(title: "Error", message: "Error Checking for update! \(error?.localizedDescription ?? "")", preferredStyle: .alert)
      } else if release == nil {
        uiAlert = UIAlertController(title: "Check for Update", message: "No releases found!!", preferredStyle: .alert)
        uiAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default))
      } else {
        guard let release = release else { return }

        let title = "New Version Available"
        let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
        uiAlert = UIAlertController(title: title, message: message, preferredStyle: .alert)

        uiAlert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
          _ in
          UIApplication.shared.open(release.downloadURL)
        })
        uiAlert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
          _ in
        })
      }
      self.present(uiAlert, animated: true, completion: nil)
    })
  }

5. 构建并邀请测试人员下载您的应用

在此步骤中,您将使用 Firebase 控制台将 build 分发给测试人员,以构建应用并测试您的实现。

构建应用

当您准备好将应用的预发布版本分发给测试人员时,请选择“Any iOS Device (arm64)”作为构建目标,然后选择“Product”(产品)->“Archive”(归档)。创建归档文件后,使用开发分发配置文件构建已签名的发行版。

98d8eb042c36a685

b2e9ccff91d761c1

8e815564f64d2d39

构建完成后,它会将 IPA 文件和一些日志文件保存在您指定的文件夹中。请按照以下步骤将 IPA 文件分发给测试人员。

如果您在构建应用时遇到问题,请参阅 Apple 的代码签名文档,了解问题排查步骤。

将应用分发给测试人员

如需将您的应用分发给测试人员,请使用 Firebase 控制台上传 IPA 文件:

  1. 打开 Firebase 控制台的“App Distribution”页面。出现提示时,选择您的 Firebase 项目。
  2. 开始使用

e4671bd304ecfe47

  1. 在“版本”页面上,从下拉菜单中选择您要分发的应用。

8a3da2939b9746f4

  1. 将应用的 IPA 文件拖到控制台中以便上传。
  2. 上传完成后,指定要接收此 build 的测试人员群组和各个测试人员。(请添加您的电子邮件地址以接收邀请。)然后,为该 build 添加版本说明。如需详细了解如何创建测试人员群组,请参阅管理测试人员

de63e3c3c64f909e

  1. 点击“分发”以将 build 提供给测试人员。

b6e75dc216fc3731

将您自己添加为此版本的测试人员

在 Firebase 控制台中,您现在可以在应用的版本下看到添加的测试人员。

EB61c6be96ff3a11

由于您添加了自己的电子邮件地址,因此会收到一封 Firebase App Distribution 邀请您测试该应用的电子邮件。您现在是首位测试人员了!继续下一部分,在测试设备上设置为测试人员。

注册测试设备

您需要先注册测试设备,才能下载并测试临时版本。

  1. 在您的 iOS 测试设备上,打开 Firebase App Distribution 发送的电子邮件,然后点按“开始使用”链接。请务必在 Safari 中打开该链接。
  2. 在显示的 Firebase App Distribution 测试人员 Web 应用中,登录您的 Google 帐号,然后点按接受邀请

4d1af345ef944620

现在,您会看到受邀加入的版本。

  1. 点按注册设备以与 Firebase 共享您的 UDID,以便您稍后更新应用的配置文件。

fd141215e54a938d

  1. 按照说明操作,然后转到“设置”以下载配置文件并分享您的 UDID。

现在,当您返回到 App Distribution 后,该发布版本现在会标记为“设备已注册”:

fe93d649dfa25877

现已将测试人员的 UDID 分享给开发者。现在需要开发者为测试人员构建应用的新版本。

在控制台中查看测试人员信息

返回到 Firebase 控制台的开发者视图,测试人员将在版本下显示为“已接受”:

“1bef6f182c1c58f9”

如果用户使用的设备尚未包含在配置文件中,您还会以开发者身份向他们发送一封电子邮件。这样,当您需要添加新 UDID 时,系统就会通知您。您还可以选择将所有 UDID 导出为文本文件。

  1. 要导出所有 UDID,请打开“测试人员和群组”标签页。

2745d49a6abc47fe

  1. 点击“导出 Apple UDID”。

cb45477f8cc436ba

此文件应包含测试设备的 UDID。

Device ID            Device Name                            Device Platform
1234567890     tester.app.distribtuion@gmail.com - iPhone SE 2nd Gen        ios

收到这类电子邮件后,请使用该 UDID 更新您的预配配置文件,然后按照以下步骤将新的 build 分发给测试人员:

  1. 将设备添加到您的 Apple Developer 门户。
  • 选项 1:以 CSV 文件的形式导入设备 UDID。在 App Distribution 信息中心的“测试人员和群组”标签页中,选择“所有测试人员”,然后点击“导出 Apple UDID”以下载 CSV 文件。接下来,使用“注册多台设备”选项将该文件导入您的 Apple 开发者帐号。如需了解详情,请参阅 Apple 文档。请注意,您的 Apple 开发者帐号可能每年只允许您导入一定数量的设备。
  • 选项 2:收集 UDID 并通过电子邮件输入。在 Apple Developer 门户的 Add Devices(添加设备)页面上,注册您收到的电子邮件中指定的新 UDID。

ffb74294e68ee1c8.png

  1. 将已注册的设备添加到您的预配配置文件
  2. 请下载配置文件,并使用该配置文件重新构建应用。如果您重新构建的目的只是为了更新已注册的设备,请勿更新 build 号或版本。
  3. 通过 Firebase 控制台或 CLI 重新分发您的应用。如果您已分发了具有相同 build 号和版本的 build,则只有新注册设备的用户才会收到通知电子邮件。

从测试设备下载该版本

现在,相应版本已包含测试设备的 UDID,因此测试设备可以下载并安装该应用。当测试人员的 UDID 添加到新版本后,App Distribution 会向测试人员发送电子邮件。

a4049260bae2850b

  1. 在测试设备上,使用电子邮件中的链接或设备主屏幕上的图标返回 App Distribution 测试人员 Web 应用。

导航到 UDID Codelab 应用后,您会看到此版本已可供下载。

dad6d03b6ad78746

  1. 如果您使用的是实体设备,请按“下载”,然后安装并运行应用!
  2. 当应用启动时,它会要求您启用新的构建提醒。选择“开启”

6e3540a2900734e6

  1. 然后,系统会要求您登录。点击“继续”。

82d90d7935bfaea0.png

  1. 使用您的测试人员账号登录。

13bee1d03fa94ebf.png

  1. 您将返回到该应用。下次运行该应用时,您无需登录或接受提醒。

815d6757eb5f6327

向测试人员分发更新

  1. 将您的 build 号更新为“2”。

861aa63ebbc6ec54.png

  1. 选择“Any iOS Device (arm64)”作为构建目标,然后选择“Product”(产品)->“Archive”(归档)。生成归档文件后,使用开发分发配置文件构建已签名的发行版。
  2. 构建完成后,它会将 IPA 文件和一些日志文件保存在您指定的文件夹中。在 Firebase 控制台中上传这个新的 IPA,将您的电子邮件地址重新添加为测试人员,然后进行分发。

b6e75dc216fc3731

测试 build 提醒

  1. 如果该应用已打开,请确保你已经将其关闭。重启应用。
  2. 当应用重启时,您应该会收到“有新版本可用”提醒。

3bd532992df458e6.png

  1. 点击“更新”即可获取最新版本。
  2. 在下一个屏幕上点击“安装”。

3a761d8fa4b79d33

  1. 恭喜!您可以通过内置提醒更新应用。

6. 自定义测试人员的登录方式

signInTester/signOutTesterisTesterSignedIn 方法可让您更灵活地自定义测试人员的登录体验,以便更好地匹配应用的外观和风格。

以下示例会检查测试人员是否已登录其 Firebase App Distribution 测试人员帐号,因此您可以选择仅向尚未登录的测试人员显示登录界面。在测试人员登录后,您可以调用 checkForUpdate 以检查测试人员是否可以访问新的构建版本。

让我们注释掉 checkForUpdate() 调用,从而禁止在 viewDidAppea 中自动检查更新。

AppDistributionViewController.swift

 override func viewDidAppear(_ animated: Bool) {
    // checkForUpdate()
 }

而是调用 checkForUpdateButtonClicked() 中的 checkForUpdate()

 @objc func checkForUpdateButtonClicked() {
    checkForUpdate()
 }

现在,我们来实现 signInOutButtonClicked() 方法,该方法会在用户未登录的情况下使用户登录,如果用户已登录,则使用户退出登录。

AppDistributionViewController.swift

 @objc func signInOutButtonClicked() {
    if isTesterSignedIn() {
      AppDistribution.appDistribution().signOutTester()

      self.configureCheckForUpdateButton()
      self.configureSignInSignOutButton()
      self.configureSignInStatus()

    } else {
      AppDistribution.appDistribution().signInTester(completion: { error in
        if error == nil {
          self.configureCheckForUpdateButton()
          self.configureSignInSignOutButton()
          self.configureSignInStatus()
        } else {
          let uiAlert = UIAlertController(title: "Custom:Error", message: "Error during tester sign in! \(error?.localizedDescription ?? "")", preferredStyle: .alert)
          uiAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default) {
            _ in
          })

          self.present(uiAlert, animated: true, completion: nil)
        }
      })
    }
  }

最后,让我们来实现 isTesterSignedIn 方法。

AppDistributionViewController.swift

 private func isTesterSignedIn() -> Bool {
    return AppDistribution.appDistribution().isTesterSignedIn
 }

构建和测试您的实现

7. 恭喜!

您已使用 Firebase App Distribution iOS SDK 在应用中构建了“应用内提醒显示”功能。

所学内容

  • Firebase App Distribution
  • Firebase App Distribution 新提醒 iOS SDK

后续步骤

了解详情

有疑问?

报告问题