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

如要開始使用 FCM,請建立最簡單的用途:傳送 測試通知訊息 通知編輯器至開發裝置 應用程式於裝置背景運作時。 本頁面列出從設定到驗證,完成的所有步驟。 其中可能包含您已完成的步驟 已設定 Apple 用戶端應用程式

將 Firebase 新增至您的 Apple 專案

這個部分涵蓋您已啟用的 還有應用程式適用的其他 Firebase 功能針對 FCM 的部分,您應該 需要 上傳 APN 驗證金鑰註冊遠端通知

事前準備

  • 安裝下列項目:

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

    • 您的專案必須指定下列平台版本或更新版本:
      • iOS 13
      • macOS 10.15
      • tvOS 13
      • watchOS 7
  • 設定實體 Apple 裝置執行應用程式。 並完成以下工作:

  • 使用 Google 帳戶。

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

建立 Firebase 專案

您需要先建立 Firebase,才能將 Firebase 新增到 Apple 應用程式 連線至應用程式前往 如要進一步瞭解 Firebase 專案,請參閱這篇文章 Firebase 專案。

透過 Firebase 註冊應用程式

如要在 Apple 應用程式中使用 Firebase,請向以下應用程式註冊應用程式: Firebase 專案。註冊應用程式通常稱為「新增」將應用程式 專案。

  1. 前往 Firebase 主控台

  2. 按一下專案總覽頁面中央的「iOS+」圖示 啟動設定工作流程

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

  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 中保持開啟應用程式專案,然後前往「檔案」檔案 >新增套件
  2. 在系統提示時,新增 Firebase Apple 平台 SDK 存放區:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 選擇 Firebase 雲端通訊程式庫。
  5. 在目標建構設定的「Other Linker Flags」部分中新增 -ObjC 標記。
  6. 為獲得最佳 Firebase 雲端通訊體驗,建議你 啟用 Google Analytics ,然後將 Google Analytics 專用 Firebase SDK 加進應用程式。你可以 選取沒有收集廣告識別碼 (IDFA) 或收集廣告識別碼的程式庫。
  7. 完成後,Xcode 會自動開始解析並下載 複製到背景依附元件

上傳 APN 驗證金鑰

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

  1. 在 Firebase 控制台的專案中,選取 齒輪圖示,選取 「Project Settings」,然後選取 「雲端通訊」分頁。

  2. 在「iOS 應用程式設定」下方的「APNs 驗證金鑰」中, 按一下「上傳」圖示 按鈕。

  3. 瀏覽至儲存金鑰的位置並選取金鑰,然後按一下 開啟。加入金鑰的金鑰 ID (位於 Apple Developer Member Center 時,按一下 按一下「上傳」

在應用程式中初始化 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. 設定 FirebaseApp敬上 共用執行個體 application(_:didFinishLaunchingWithOptions:) 方法:

    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,則必須建立並附加應用程式委派 透過 UIApplicationDelegateAdaptorApp NSApplicationDelegateAdaptor。您也必須停用應用程式委派功能切換功能。適用對象 詳情請參閱 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:。 取得有效憑證

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

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

設定訊息委派

如要接收註冊權杖,請實作訊息委派 並在呼叫後設定 FIRMessagingdelegate 屬性 [FIRApp configure]。 舉例來說,如果您的應用程式委派項目符合訊息委派代表 您可以在 application:didFinishLaunchingWithOptions: 上設定委派 同理,

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

擷取目前的註冊權杖

註冊權杖是透過 messaging:didReceiveRegistrationToken:。此方法通常只會呼叫一次 應用程式的開頭是註冊符記呼叫此方法時,理想的時機如下:

  • 如果是新的註冊權杖,請將其傳送至應用程式伺服器。
  • 將註冊權杖訂閱主題。只有在 使用者重新安裝應用程式。

您可以使用 token(result:)。 如果憑證擷取以任何方式失敗,就會發生非空值錯誤。

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.
}

或者,您也可以收聽名稱為 NSNotification,且名稱為 kFIRMessagingRegistrationTokenRefreshNotification 而不是提供委派方法權杖屬性一律包含 目前的權杖值

傳送通知訊息

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

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

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

  4. 如果這是第一則訊息,請選取「建立您的第一則訊息」 廣告活動

    1. 選取「Firebase 通知訊息」,然後選取「建立」
  5. 或者,在「廣告活動」分頁中選取「新增廣告活動」 點選「通知」

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

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

  8. 在標示為「新增 FCM 註冊權杖」的欄位中輸入註冊資訊 取得的符記

  9. 選取「測試」

選取「測試」後,目標用戶端裝置 (應用程式位於 背景) 應接收通知。

如要進一步瞭解訊息傳送至應用程式的資訊,請參閱 FCM 報表資訊主頁,其中記錄 透過 Apple 和 Android 裝置傳送及開啟的訊息數量,以及 「曝光」資料Android 應用程式 (使用者看到的通知)。

後續步驟

除了通知訊息外,還能在 應用程式,請參閱: