透過 Firebase 應用程式發布 iOS SDK 通知測試人員您的新應用程式版本 - 程式碼研究室

1. 總覽

歡迎來到「在 iOS 應用程式中整合 Firebase 應用程式發布 SDK」程式碼研究室。在這個程式碼研究室中,您需要在應用程式中新增應用程式發布 SDK,以便在有新版本可供下載時向測試人員顯示應用程式內快訊。您將瞭解如何使用基本設定和自訂設定,讓測試人員登入以接收更新。接著,您可以將新版本推送至應用程式發布,並在應用程式中觸發新的建構快訊。

課程內容

  • 如何使用「應用程式發布」功能向即時測試人員發行預先發布版應用程式
  • 如何將應用程式發布 iOS SDK 整合至應用程式
  • 如何在有可安裝的新預先發布版版本時通知測試人員
  • 如何自訂 SDK 以符合自己獨特的測試需求

事前準備

  • Xcode 12 (或更高版本)
  • CocoaPods 1.9.1 (或更高版本)
  • 適用於 Ad Hoc 發行功能的 Apple 開發人員帳戶
  • 用於測試的實體 iOS 裝置。( iOS 模擬器應用程式適用於本程式碼研究室的大部分內容,但模擬器無法下載版本)。

您會如何使用這個教學課程?

僅供閱讀 閱讀並完成練習

針對開發 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 .

請更新軟體包 ID,使其與 Firebase 應用程式相符

在左選單中,按兩下「AppDistributionExample.」接著找出「一般」分頁,將軟體包 ID 修改為與 Firebase 應用程式的軟體包 ID (位於專案設定中)。應為「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. 使用應用程式發布 SDK 設定應用程式內全新建構快訊

在這個步驟中,您要將 Firebase 應用程式發布 SDK 加入應用程式,並在應用程式可以安裝新版應用程式時向測試人員顯示應用程式內快訊。如要這麼做,請確定您已為「Firebase Codelab」啟用 Firebase App Testers API專案 (位於 Google Cloud 控制台中)請使用同一個帳戶登入,然後從頂端的下拉式選單中選取正確的專案。

設定應用程式內快訊

應用程式發布 SDK 提供兩種為測試人員設定應用程式內版本快訊的方法:一種是基本的快訊設定,具有預先建構的登入對話方塊,會向測試人員顯示;另一種則是進階快訊設定 (可讓您自訂自己的使用者介面 (UI)。

我們會從基本快訊設定開始。您可以使用 checkForUpdate 向尚未啟用快訊的測試人員顯示預先建立的啟用快訊對話方塊,然後檢查是否有可用的新版本。測試人員可以在「應用程式發布」中登入有權存取應用程式的帳戶,以便接收快訊。呼叫此方法時,會執行以下序列:

  1. 檢查測試人員是否已啟用快訊。如果沒有,系統會顯示預先建構的對話方塊,提示使用者使用 Google 帳戶登入「應用程式發布」。

快訊功能在測試裝置上是一次性程序,啟用後會一直保持在應用程式的更新狀態。除非解除安裝應用程式,或呼叫 signOutTester 方法,否則測試裝置上快訊會保持啟用狀態。詳情請參閱該方法的參考說明文件 ( SwiftObjective-C)。

  1. 檢查可供測試人員安裝的新版本。傳回 release 物件或 error

您隨時可以在應用程式中加入 checkForUpdate。舉例來說,您可以提示測試人員在啟動時安裝新可用版本,方法是在 UIViewControllerviewOnceAppear 中加入 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 控制台建構應用程式,並測試導入作業,方法是透過 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 應用程式發布的電子郵件,邀請您測試應用程式。你現在已是第一位測試人員!繼續按照下一節的說明在測試裝置上設定測試人員。

註冊測試裝置

您必須先註冊測試裝置,才能下載及測試 Ad Hoc 版本。

  1. 在 iOS 測試裝置上開啟 Firebase 應用程式發布傳送的電子郵件,然後輕觸「開始使用」連結。請務必在 Safari 中開啟該連結。
  2. 在畫面顯示的「Firebase 應用程式發布」測試人員網頁應用程式中,使用你的 Google 帳戶登入,然後輕觸「接受邀請」

4d1af345ef944620.png

現在你會看到自己受邀使用的版本。

  1. 輕觸「註冊裝置」即可將 UDID 提供給 Firebase,方便之後更新應用程式的佈建設定檔。

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:以 CSV 檔案格式匯入裝置 UDID。在測試人員中,「應用程式發布」資訊主頁的「群組」分頁,選取 [所有測試人員],然後按一下 [匯出 Apple UDID],即可下載 CSV 檔案。接著使用 [註冊多個裝置] 選項,將檔案匯入 Apple 開發人員帳戶。詳情請參閱 Apple 說明文件。請注意,您的 Apple 開發人員帳戶每年只能匯入數量有限的裝置。
  • 方法 2:收集並輸入 UDID。在 Apple 開發人員入口網站的「Add Devices」頁面中,註冊所收到電子郵件中指定的新的 UDID。

ffb74294e68ee1c8.png

  1. 將已註冊的裝置新增至佈建設定檔
  2. 下載佈建設定檔,並使用該設定檔重新建構應用程式。如果只是要重新建構來更新已註冊的裝置,請勿更新版本號碼或版本。
  3. 透過 Firebase 控制台或 CLI 重新發布應用程式。如果您已發布具有相同版本號碼和版本的版本,則只有新註冊裝置的使用者會收到通知電子郵件。

透過測試裝置下載版本

這個版本現已包含測試裝置的 UDID,因此測試裝置可下載並安裝該應用程式。在新版本中加入 UDID 時,應用程式發布功能會傳送電子郵件給測試人員。

a4049260bae2850b.png

  1. 在測試裝置上,使用電子郵件中的連結或裝置主畫面上的圖示,返回「應用程式發布測試人員」網頁應用程式。

前往 UDID 程式碼研究室應用程式時,您會看到該版本已經可供下載。

dad6d03b6ad78746.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 應用程式發布測試人員帳戶,您就可以選擇只向尚未登入的測試人員顯示登入使用者介面。登入測試人員後,您可以呼叫 checkForUpdate 檢查測試人員是否有權使用新版本。

讓我們透過註解排除 checkForUpdate() 呼叫,停用 view DidAppear 中自動檢查更新的功能。

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 應用程式發布
  • Firebase 應用程式發布新版快訊 iOS SDK

後續步驟

瞭解詳情

有任何疑問嗎?

回報問題