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

1. 概述

欢迎来到在 iOS 应用代码实验室中集成 Firebase 应用分发 SDK。在此 Codelab 中,您将向您的应用添加 App Distribution SDK,以便在有新版本可供下载时向测试人员显示应用内提醒。您将了解如何使用基本配置和自定义配置来让测试人员登录以接收更新。然后,您将向 App Distribution 推送新版本并在应用程序中触发新的构建警报。

你将学到什么

  • 如何使用 App Distribution 将预发布应用程序分发给现场测试人员
  • 如何将 App Distribution iOS SDK 集成到您的应用程序中
  • 当有新的预发布版本可供安装时如何提醒测试人员
  • 如何定制 SDK 以满足您独特的测试需求

你需要什么

  • Xcode 12(或更高版本)
  • CocoaPods 1.9.1(或更高版本)
  • 用于 Ad Hoc 分发的Apple 开发者帐户
  • 用于测试的物理 iOS 设备。 ( iOS 模拟器应用程序适用于大多数 Codelab,但模拟器无法下载版本。)

您将如何使用本教程?

仅通读一遍阅读并完成练习

您如何评价您构建 iOS 应用程序的体验?

新手中间的精通

2.创建Firebase控制台项目

添加新的 Firebase 项目

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

您不需要为此项目启用 Google Analytics。

  1. 单击创建项目

将应用程序添加到 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 设置应用内新建警报

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

配置应用内警报

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

我们将从基本的警报配置开始。您可以使用checkForUpdate向尚未启用警报的测试人员显示预构建的启用警报对话框,然后检查新版本是否可用。测试人员通过登录有权访问 App Distribution 中的应用程序的帐户来启用警报。调用时,该方法会执行以下序列:

  1. 检查测试人员是否启用了警报。如果没有,则会显示一个预先构建的对话框,提示他们使用 Google 帐户登录 App Distribution。

启用警报是测试设备上的一次性过程,并且在应用程序更新期间持续存在。警报在测试设备上保持启用状态,直到卸载应用程序或调用signOutTester方法。有关更多信息,请参阅该方法的参考文档( SwiftObjective-C )。

  1. 检查是否有新的可用版本供测试人员安装。返回一个释放对象或一个错误

您可以在应用程序中的任何位置包含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 控制台将构建分发给测试人员来测试您的实现。

构建您的应用程序

当您准备好向测试人员分发应用程序的预发布版本时,请选择“任何 iOS 设备 (arm64)”作为构建目标,然后选择“产品”->“存档”。创建存档后,使用开发发行版配置文件构建签名发行版。

98d8eb042c36a685.png

b2e9ccff91d761c1.png

8e815564f64d2d39.png

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

如果您在构建应用程序时遇到问题,请参阅Apple 的协同设计文档以获取故障排除步骤。

将您的应用程序分发给测试人员

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

  1. 打开 Firebase 控制台的“应用程序分发”页面。出现提示时选择您的 Firebase 项目。
  2. 开始

e4671bd304ecfe47.png

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

8a3da2939b9746f4.png

  1. 将应用程序的 IPA 文件拖到控制台进行上传。
  2. 上传完成后,指定您想要接收构建的测试人员组和单个测试人员。 (添加您的电子邮件以接收邀请。)然后,添加构建的发行说明。有关创建测试人员组的更多信息,请参阅管理测试人员

de63e3c3c64f909e.png

  1. 单击“分发”以使构建可供测试人员使用。

b6e75dc216fc3731.png

将您自己作为测试人员添加到版本中

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

eb61c6be96ff3a11.png

由于您提供了电子邮件地址,因此您将收到一封来自 Firebase App Distribution 的电子邮件,邀请您测试该应用。您现在是第一个测试者了!继续执行以下部分,在您的测试设备上设置为测试人员。

注册您的测试设备

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

  1. 在您的 iOS 测试设备上,打开从 Firebase App Distribution 发送的电子邮件,然后点击“开始”链接。确保在 Safari 中打开链接。
  2. 在显示的Firebase App Distribution测试器 Web 应用中,使用您的 Google 帐户登录并点击接受邀请。

4d1af345ef944620.png

现在,您将看到您受邀参加的版本。

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

fd141215e54a938d.png

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

现在,当您返回应用程序分发时,该版本现在被标记为“设备已注册”:

fe93d649dfa25877.png

测试人员的 UDID 现已与开发人员共享。现在由开发人员为测试人员构建应用程序的新版本。

在控制台查看测试者信息

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

1bef6f182c1c58f9.png

如果开发人员使用的设备尚未包含在配置文件中,您也会收到一封电子邮件。这将通知您需要添加的新 UDID。您还可以选择将所有 UDID 导出为文本文件。

  1. 要导出所有 UDID,请打开“测试人员和组”选项卡。

2745d49a6abc47fe.png

  1. 点击“导出 Apple UDID”。

cb45477f8cc436ba.png

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

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

当您收到其中一封电子邮件时,请使用 UDID 更新您的配置文件,并按照以下步骤向测试人员分发新版本:

  1. 将设备添加到您的 Apple 开发者门户。
  • 选项 1:将设备 UDID 作为 CSV 文件导入。在 App Distribution 仪表板的“测试人员和组”选项卡中,选择“所有测试人员”,然后单击“导出 Apple UDID”以下载 CSV 文件。接下来,使用“注册多个设备”选项将该文件导入您的Apple 开发人员帐户。请参阅Apple 的文档以了解更多信息。请注意,您的 Apple 开发者帐户每年可能仅允许您导入有限数量的设备。
  • 选项 2:通过电子邮件收集并输入 UDID。在 Apple 开发者门户的“添加设备”页面上,注册您收到的电子邮件中指定的新 UDID。

ffb74294e68ee1c8.png

  1. 将注册的设备添加到您的配置文件中。
  2. 下载配置文件并使用它来重建您的应用程序。如果您只是为了更新已注册的设备而进行重建,请不要更新内部版本号或版本。
  3. 从 Firebase 控制台或 CLI重新分发您的应用。如果您已经分发了具有相同内部版本号和版本的内部版本,则只有新注册设备的用户才会收到通知电子邮件。

从测试设备下载版本

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

a4049260bae2850b.png

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

当您导航到 UDID Codelab 应用程序时,您可以看到该版本已准备好下载。

爸爸6d03b6ad78746.png

  1. 如果您使用的是物理设备,请按下载,然后安装并运行该应用程序!
  2. 当应用程序启动时,它会要求您启用新的构建警报。选择“打开”

6e3540a2900734e6.png

  1. 然后它会要求您登录。单击“继续”。

82d90d7935bfaea0.png

  1. 使用您的测试者帐户登录。

13bee1d03fa94ebf.png

  1. 您将被带回应用程序。下次运行该应用程序时,您无需登录或接受警报。

815d6757eb5f6327.png

向您的测试人员分发更新

  1. 将您的内部版本号更新为“2”。

861aa63ebbc6ec54.png

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

b6e75dc216fc3731.png

测试构建警报

  1. 如果该应用程序已打开,请确保已将其关闭。重新启动应用程序。
  2. 当应用程序重新启动时,您应该会收到“新版本可用”警报。

3bd532992df458e6.png

  1. 单击“更新”以接收最新版本。
  2. 在下一个屏幕上单击“安装”。

3a761d8fa4b79d33.png

  1. 恭喜!您可以使用内置警报更新您的应用程序。

6. 自定义测试人员登录

方法signInTester/signOutTesterisTesterSignedIn使您能够更灵活地自定义测试人员的登录体验,从而更好地匹配您的应用程序的外观和感觉。

以下示例检查测试人员是否已登录其 Firebase App Distribution 测试人员帐户,因此您可以选择仅向尚未登录的测试人员显示登录 UI。测试人员登录后,您可以调用checkForUpdate检查测试人员是否有权访问新版本。

让我们通过注释掉checkForUpdate()调用来禁用viewDidAppear中自动检查更新的功能。

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 应用程序分发
  • Firebase 应用程序分发新警报 iOS SDK

下一步

了解更多

有一个问题?

报告问题