傳送測試訊息至背景執行的 Apple 應用程式

如要開始使用 FCM,請建構最簡單的用途:當應用程式在裝置背景於背景執行時,從 通知編輯器傳送測試通知訊息到開發裝置。本頁面列出了需要完成的所有步驟,包括設定到驗證等。如果您已為 FCM 設定 Apple 用戶端應用程式,其中可能涵蓋您已完成的步驟。

將 Firebase 新增至您的 Apple 專案

本節說明如果您已為應用程式啟用其他 Firebase 功能,則可能需要完成的任務。具體來說,您必須上傳 APN 驗證金鑰註冊遠端通知

事前準備

  • 安裝下列項目:

    • Xcode 14.1 以上版本
  • 確認專案符合下列規定:

    • 您的專案必須指定下列平台版本或更新版本:
      • iOS 11 作業系統
      • macOS 10.13
      • tvOS 12
      • WatchOS 6
  • 設定實體 Apple 裝置執行應用程式,然後完成以下工作:

    • 為您的 Apple 開發人員帳戶取得 Apple 推播通知驗證金鑰。
    • 依序前往「App」>「Capabilities」,在 XCode 中啟用推播通知。

如果您還沒有 Xcode 專案,只是想試用 Firebase 產品,可以下載其中一個快速入門導覽課程範例

建立 Firebase 專案

您需要先建立 Firebase 專案並連結至應用程式,才能將 Firebase 新增到 Apple 應用程式。如要進一步瞭解 Firebase 專案,請參閱「瞭解 Firebase 專案」。

透過 Firebase 註冊應用程式

如要在 Apple 應用程式中使用 Firebase,您必須使用 Firebase 專案註冊應用程式。註冊應用程式通常稱為「新增」應用程式至專案中。

  1. 前往 Firebase 主控台

  2. 在專案總覽頁面中間,按一下「iOS+」圖示來啟動設定工作流程。

    如果您已經在 Firebase 專案中加入應用程式,請按一下「Add app」顯示平台選項。

  3. 在「bundle ID」欄位中輸入應用程式的軟體包 ID。

  4. (選用) 輸入其他應用程式資訊:「應用程式暱稱」和「App Store ID」

  5. 按一下 [Register app] (註冊應用程式)

新增 Firebase 設定檔

  1. 點選「Download GoogleService-Info.plist」,取得 Firebase Apple 平台設定檔 (GoogleService-Info.plist)。

  2. 將設定檔移至 Xcode 專案的根目錄。如果出現提示,請選擇將設定檔新增至所有目標。

如果專案中有多個軟體包 ID,您必須在 Firebase 控制台中,將每個軟體包 ID 與已註冊的應用程式建立關聯,讓每個應用程式擁有自己的 GoogleService-Info.plist 檔案。

在應用程式中新增 Firebase SDK

使用 Swift Package Manager 安裝及管理 Firebase 依附元件。

  1. 在 Xcode 中保持開啟應用程式專案,然後依序點選「File」>「Add Packages」
  2. 在系統提示時,新增 Firebase Apple 平台 SDK 存放區:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 選擇 Firebase 雲端通訊程式庫。
  5. 在目標建構設定的「Other Linker Flags」部分中新增 -ObjC 標記。
  6. 為了讓 Firebase 雲端通訊獲得最佳體驗,建議您在 Firebase 專案中啟用 Google Analytics (分析),並將 Google Analytics (分析) 專用 Firebase SDK 加到應用程式。您可以選取不使用 IDFA 收集功能的程式庫,或使用 IDFA 收集功能。
  7. 完成後,Xcode 會自動開始在背景解析並下載依附元件。

上傳 APN 驗證金鑰

將 APN 驗證金鑰上傳至 Firebase。如果您還沒有 APN 驗證金鑰,請務必前往 Apple Developer Member Center 建立 APN 驗證金鑰。

  1. 在 Firebase 控制台的專案中,依序選取齒輪圖示 >「專案設定」,然後選取「雲端通訊」分頁標籤。

  2. 在「iOS app configuration」下方的「APNs 驗證金鑰」中,按一下「上傳」按鈕。

  3. 瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下 [Open] (開啟)。加入金鑰金鑰 ID (可於 Apple Developer Member Center 中找到),然後按一下「上傳」

在應用程式中初始化 Firebase

您必須將 Firebase 初始化程式碼加進應用程式。匯入 Firebase 模組並設定共用執行個體,如下所示:

  1. FirebaseCore 模組匯入 UIApplicationDelegate,以及應用程式委派使用的任何其他 Firebase 模組。例如,如要使用 Cloud Firestore 和驗證:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 在應用程式委派的 application(_:didFinishLaunchingWithOptions:) 方法中設定 FirebaseApp 共用例項:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. 如果您使用 SwiftUI,則必須建立應用程式委派,並透過 UIApplicationDelegateAdaptorNSApplicationDelegateAdaptor 將其附加至 App 結構體。您也必須停用應用程式委派功能切換功能。詳情請參閱 SwiftUI 操作說明

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

註冊遠端通知

無論是在啟動時或應用程式流程中的所需時間點,註冊應用程式,即可接收遠端通知。呼叫 registerForRemoteNotifications,如下所示:

Swift


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

存取註冊權杖

如要傳送訊息給特定裝置,您需要知道該裝置的註冊權杖。您需要在 通知編輯器的欄位中輸入權杖以完成本教學課程,因此在擷取權杖後,請務必複製權杖,或妥善儲存權杖。

根據預設,FCM SDK 會在應用程式啟動時為用戶端應用程式執行個體產生註冊權杖。這個權杖與 APN 裝置權杖類似,可讓您向應用程式的任何特定執行個體傳送指定通知。

與 Apple 平台通常在應用程式啟動時提供 APN 裝置權杖的方式相同,FCM 會透過 FIRMessagingDelegatemessaging:didReceiveRegistrationToken: 方法提供註冊權杖。在應用程式初次啟動時,以及權杖更新或失效時,FCM SDK 會擷取新的或現有權杖。在所有情況下,FCM SDK 都會使用有效的權杖呼叫 messaging:didReceiveRegistrationToken:

發生下列情況時,註冊符記可能會變更:

  • 應用程式會在新裝置上還原
  • 使用者解除安裝/重新安裝應用程式
  • 使用者清除應用程式資料。

設定訊息委派

如要接收註冊權杖,請導入訊息委派通訊協定,並在呼叫 [FIRApp configure] 後設定 FIRMessagingdelegate 屬性。舉例來說,如果您的應用程式委派項目符合訊息委派通訊協定,則可將 application:didFinishLaunchingWithOptions: 上的委派設為本身。

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

擷取目前的註冊權杖

註冊權杖會透過 messaging:didReceiveRegistrationToken: 方法提供。從註冊憑證開始,每個應用程式通常都會呼叫這個方法一次。呼叫此方法時,理想的時機如下:

  • 如果是新的註冊權杖,請將其傳送至應用程式伺服器。
  • 將註冊權杖訂閱主題。只有在新的訂閱項目或使用者重新安裝應用程式時,才需要執行這項作業。

您可以使用 token(complete:) 直接擷取權杖。如果權杖擷取失敗,就會產生非空值錯誤。

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

您隨時可以使用這個方法存取權杖,不必儲存權杖。

監控權杖重新整理作業

如要在權杖更新時收到通知,請提供符合訊息委派通訊協定的委派代表。以下範例會註冊委派項目,並新增適當的委派方法:

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")

  let dataDict: [String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(
    name: Notification.Name("FCMToken"),
    object: nil,
    userInfo: dataDict
  )
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

您也可以監聽名為 kFIRMessagingRegistrationTokenRefreshNotificationNSNotification,而不是提供委派方法。權杖屬性一律採用目前的權杖值。

傳送通知訊息

  1. 在目標裝置上安裝並執行應用程式。在 Apple 裝置上,您必須接受接收遠端通知的要求。

  2. 確認應用程式在裝置的背景執行。

  3. 在 Firebase 控制台中開啟「Messaging」頁面。

  4. 如果這是您的第一則廣告活動,請選取「製作您的第一個廣告活動」

    1. 選取「Firebase 通知訊息」,然後選取「建立」
  5. 否則,請在「廣告活動」分頁中,依序選取「新增廣告活動」和「通知」

  6. 輸入訊息文字。所有其他欄位皆為選填。

  7. 從右側窗格中選取「Send test message」

  8. 在標示為「Add an FCM 註冊 token」的欄位中,輸入您在本指南的前一個章節取得的註冊憑證。

  9. 選取「測試」

選取「Test」後,目標用戶端裝置 (應用程式在背景執行) 應該會收到通知。

如要深入瞭解傳送給應用程式的訊息,請參閱 FCM 報告資訊主頁,其中記錄在 Apple 和 Android 裝置上傳送及開啟的訊息數,以及 Android 應用程式的「曝光」(使用者看到的通知) 資料。

後續步驟

除了通知訊息外,如要為應用程式新增其他進階行為,請參閱: