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

如要開始使用 FCM,請建立最簡單的用途:當應用程式處於裝置背景時,從 通知編輯器傳送測試通知訊息。本頁面列出完成此目標的所有步驟,從設定到驗證,如果您已為 FCM 設定 Apple 用戶端應用程式,可能會涵蓋您已完成的步驟。

將 Firebase 新增至 Apple 專案

本節將說明如果您已為應用程式啟用其他 Firebase 功能,可能已完成的作業。具體來說,您需要上傳 APNs 驗證金鑰,並註冊遠端通知FCM

事前準備

  • 安裝下列項目:

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

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

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

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

建立 Firebase 專案

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

透過 Firebase 註冊應用程式

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

  1. 前往 Firebase 控制台

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

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

  3. 在「軟體包 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 Cloud Messaging 程式庫。
  5. -ObjC 標記新增至目標的建構設定「Other Linker Flags」部分。
  6. 為提供最佳的 Firebase Cloud Messaging 體驗,建議您在 Firebase 專案中啟用 Google Analytics,並將 Google Analytics 專用 Firebase SDK 新增至應用程式。您可以選擇不收集 IDFA 的程式庫,也可以選擇收集 IDFA 的程式庫。
  7. 完成後,Xcode 就會自動開始在背景中解析並下載依附元件。

上傳 APNs 驗證金鑰

將 APNs 驗證金鑰上傳至 Firebase。如果您尚未取得 APNs 驗證金鑰,請務必前往 Apple Developer Member Center 建立金鑰。

  1. Firebase 控制台的專案中,依序選取齒輪圖示、「Project Settings」(專案設定),然後選取「Cloud Messaging」分頁。

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

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

在應用程式中初始化 Firebase

您必須在應用程式中加入 Firebase 初始化程式碼。匯入 Firebase 模組,並設定共用例項,如下所示:

  1. UIApplicationDelegate 中匯入 FirebaseCore 模組,以及應用程式委派程式使用的任何其他 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 結構體。您也必須停用應用程式委派程式 swizzling。詳情請參閱 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];

存取註冊權杖

如要傳送訊息給特定裝置,您必須知道該裝置的註冊權杖。您必須在 Notifications Compose 編輯器的欄位中輸入權杖,才能完成本教學課程,因此請務必複製權杖,或在擷取權杖後將其安全儲存。

根據預設,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.
}

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

傳送通知訊息

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

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

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

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

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

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

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

  8. 在「Add an FCM registration token」欄位中,輸入您在本指南前一個部分取得的註冊權杖。

  9. 選取「測試」

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

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

後續步驟

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