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

如要開始使用 FCM,請建立最簡單的用途:從 通知撰寫工具傳送測試通知訊息到開發裝置,此時應用程式在裝置上處於背景狀態。本頁列出所有步驟,從設定到驗證一應俱全。如果您已為 FCM設定 Apple 用戶端應用程式,可能已完成部分步驟。

將 Firebase 新增至 Apple 專案

如果您已為應用程式啟用其他 Firebase 功能,可能已完成本節所述工作。不過,如要使用 FCM,您需要上傳 APN 驗證金鑰,並註冊遠端通知

事前準備

  • 安裝下列項目:

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

    • 專案必須以這些平台版本或更新版本為目標:
      • iOS 13
      • macOS 10.15
      • tvOS 13
      • watchOS 7
  • 設定實體 Apple 裝置來執行應用程式,並完成下列工作:

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

如果您還沒有 Xcode 專案,只是想試用 Firebase 產品,可以下載我們的快速入門範例

建立 Firebase 專案

將 Firebase 加入 Apple 應用程式前,請先建立要連結至該應用程式的 Firebase 專案。如要進一步瞭解 Firebase 專案,請參閱「瞭解 Firebase 專案」一文。

向 Firebase 註冊應用程式

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

  1. 前往 Firebase 控制台

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

    如果已將應用程式新增至 Firebase 專案,請按一下「新增應用程式」,顯示平台選項。

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

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

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

新增 Firebase 設定檔

  1. 按一下「Download GoogleService-Info.plist」,取得應用程式的 Firebase 設定檔 (GoogleService-Info.plist)。

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

如果專案中有多個套件組合 ID,您必須將每個套件組合 ID 與 Firebase 控制台中的已註冊應用程式建立關聯,這樣每個應用程式才能擁有自己的 GoogleService-Info.plist 檔案。

在應用程式中新增 Firebase SDK

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

  1. 在 Xcode 中保持開啟應用程式專案,然後依序點選「File」(檔案) 和「Add Packages」(新增 Package)
  2. 系統提示時,請新增 Firebase Apple 平台 SDK 存放區:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 選擇 Firebase Cloud Messaging 程式庫。
  5. -ObjC 標記新增至目標建構設定的「Other Linker Flags」部分。
  6. 為獲得最佳 Firebase Cloud Messaging 使用體驗,建議您在 Firebase 專案中啟用 Google Analytics,並在應用程式中加入 Google Analytics 專用 Firebase SDK。您可以選擇不收集 IDFA 的程式庫,也可以選擇收集 IDFA 的程式庫。請參閱常見問題,瞭解 Firebase SDK 中 Google Analytics 的最新模組架構。
  7. 完成後,Xcode 會自動開始在背景中解析並下載依附元件。

上傳 APN 驗證金鑰

將 APNs 驗證金鑰上傳至 Firebase。 如果沒有 APNs 驗證金鑰,請務必在 Apple 開發人員會員中心建立。

  1. Firebase 控制台的專案中,依序選取齒輪圖示、「專案設定」和「Cloud Messaging」分頁標籤。

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

  3. 瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下「開啟」。新增金鑰的 ID (可在 Apple Developer Member Center 中取得),然後按一下「上傳」

在應用程式中初始化 Firebase

您需要在應用程式中加入 Firebase 初始化程式碼。匯入 Firebase 模組,並設定共用執行個體,如下所示:

  1. FirebaseCore 中匯入 UIApplicationDelegate 模組,以及應用程式委派使用的任何其他 Firebase 模組。舉例來說,如要使用 Cloud FirestoreAuthentication

    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 會在應用程式啟動時,為用戶端應用程式例項產生註冊權杖。與 APNs 裝置權杖類似,這個權杖可讓您將目標通知傳送至應用程式的任何特定執行個體。

與 Apple 平台通常會在應用程式啟動時傳送 APNs 裝置權杖的方式相同,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(completion:) 直接擷取權杖。如果權杖擷取作業因任何原因失敗,系統會提供非空值錯誤。

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

或者,您也可以監聽名為 NSNotificationkFIRMessagingRegistrationTokenRefreshNotification,而非提供委派方法。權杖屬性一律會包含目前的權杖值。

傳送通知訊息

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

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

  3. Firebase 控制台中,開啟「訊息」頁面

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

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

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

  7. 在右側窗格中選取「傳送測試訊息」

  8. 在標示為「新增 FCM 註冊權杖」的欄位中,輸入您在本指南先前章節中取得的註冊權杖。

  9. 選取「測試」

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

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

後續步驟

如要進一步瞭解通知訊息,並在應用程式中新增其他進階行為,請參閱: