向後台 Apple 應用程序發送測試消息

要開始使用 FCM,請構建最簡單的用例:當應用程序在設備的後台時,從Notifications Composer向開發設備發送測試通知消息。此頁面列出了從設置到驗證的所有步驟——如果您為 FCM設置了 Apple 客戶端應用程序,它可能涵蓋您已經完成的步驟。

將 Firebase 添加到您的 Apple 項目

如果您已經為您的應用啟用了其他 Firebase 功能,本部分將介紹您可能已完成的任務。特別是對於 FCM,您需要上傳您的 APNs 身份驗證密鑰註冊遠程通知

先決條件

  • 安裝以下內容:

    • Xcode 13.3.1 或更高版本
  • 確保您的項目滿足以下要求:

    • 您的項目必須針對這些平台版本或更高版本:
      • iOS 10
      • macOS 10.12
      • 電視操作系統 12
      • 手錶操作系統 6
  • 設置物理 Apple 設備來運行您的應用程序,並完成以下任務:

    • 為您的Apple Developer 帳戶獲取 Apple Push Notification Authentication Key。
    • 在 XCode 中的App > Capabilities下啟用推送通知。

如果您還沒有 Xcode 項目並且只想試用 Firebase 產品,您可以下載我們的快速入門示例之一。

創建一個 Firebase 項目

在將 Firebase 添加到您的 Apple 應用之前,您需要創建一個 Firebase 項目以連接到您的應用。請訪問了解 Firebase 項目以了解有關 Firebase 項目的更多信息。

向 Firebase 註冊您的應用

要在您的 Apple 應用中使用 Firebase,您需要在您的 Firebase 項目中註冊您的應用。註冊您的應用程序通常稱為將您的應用程序“添加”到您的項目中。

  1. 轉到Firebase 控制台

  2. 在項目概覽頁面的中心,單擊iOS+圖標以啟動設置工作流程。

    如果您已將應用添加到 Firebase 項目,請點擊添加應用以顯示平台選項。

  3. 捆綁包 ID字段中輸入您應用的捆綁包 ID。

  4. (可選)輸入其他應用信息:應用暱稱應用商店ID

  5. 點擊註冊應用

添加 Firebase 配置文件

  1. 單擊下載 GoogleService-Info.plist以獲取您的 Firebase Apple 平台配置文件 ( GoogleService-Info.plist )。

  2. 將配置文件移動到 Xcode 項目的根目錄中。如果出現提示,請選擇將配置文件添加到所有目標。

如果您的項目中有多個捆綁包 ID,則必須將每個捆綁包 ID 與 Firebase 控制台中的註冊應用相關聯,以便每個應用都可以擁有自己的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
  4. 選擇 Firebase 雲消息庫。
  5. 為了獲得 Firebase 雲消息傳遞的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將 Firebase SDK for Google Analytics 添加到您的應用中。您可以選擇沒有 IDFA 集合或有 IDFA 集合的庫。
  6. 完成後,Xcode 將在後台自動開始解析和下載您的依賴項。

上傳您的 APNs 身份驗證密鑰

將您的 APNs 身份驗證密鑰上傳到 Firebase。如果您還沒有 APNs 身份驗證密鑰,請確保在Apple Developer Member Center中創建一個。

  1. 在 Firebase 控制台的項目中,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。

  2. iOS app configuration下的APNs authentication key中,單擊Upload按鈕。

  3. 瀏覽到您保存密鑰的位置,選擇它,然後單擊打開。添加密鑰的密鑰 ID(可在Apple Developer Member Center中獲得),然後單擊Upload

在您的應用中初始化 Firebase

您需要將 Firebase 初始化代碼添加到您的應用程序。導入 Firebase 模塊並配置共享實例,如下所示:

  1. 在您的UIApplicationDelegate中導入FirebaseCore模塊,以及您的應用委託使用的任何其他Firebase 模塊。例如,要使用 Cloud Firestore 和身份驗證:

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 配置FirebaseApp共享實例,通常在App的初始化程序或應用委託的application(_:didFinishLaunchingWithOptions:)方法中:

    迅速

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

註冊遠程通知

無論是在啟動時,還是在應用程序流程中的所需位置,註冊您的應用程序以獲取遠程通知。調用registerForRemoteNotifications如圖:

迅速

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

訪問註冊令牌

要將消息發送到特定設備,您需要知道該設備的註冊令牌。因為您需要在通知編輯器的字段中輸入令牌才能完成本教程,所以請確保在檢索令牌後復製或安全地存儲它。

默認情況下,FCM SDK 在應用啟動時為客戶端應用實例生成一個註冊令牌。與 APNs 設備令牌類似,此令牌允許您向應用程序的任何特定實例發送有針對性的通知。

與 Apple 平台通常在應用啟動時提供 APNs 設備令牌的方式相同,FCM 通過FIRMessagingDelegate的 messages messaging:didReceiveRegistrationToken:方法提供註冊令牌。 FCM SDK 在初始應用程序啟動期間以及令牌更新或失效時檢索新的或現有的令牌。在所有情況下,FCM SDK 都會使用有效令牌調用messaging:didReceiveRegistrationToken:

註冊令牌可能會在以下情況下更改:

  • 該應用程序已在新設備上恢復
  • 用戶卸載/重新安裝應用程序
  • 用戶清除應用數據。

設置消息傳遞委託

要接收註冊令牌,請在調用[FIRApp configure]後實現消息傳遞委託協議並設置FIRMessagingdelegate屬性。例如,如果您的應用程序委託符合消息傳遞委託協議,您可以將application:didFinishLaunchingWithOptions:上的委託設置為自身。

迅速

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

獲取當前註冊令牌

註冊令牌通過方法messaging:didReceiveRegistrationToken: 。此方法通常在每個應用程序以註冊令牌開始時調用一次。調用此方法時,是執行以下操作的理想時機:

  • 如果註冊令牌是新的,請將其發送到您的應用程序服務器。
  • 將註冊令牌訂閱到主題。這僅適用於新訂閱或用戶重新安裝應用程序的情況。

您可以使用token(completion:)直接檢索令牌。如果令牌檢索以任何方式失敗,則會提供非空錯誤。

迅速

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;
  }
}];

您可以隨時使用此方法來訪問令牌而不是存儲它。

監控令牌刷新

要在更新令牌時收到通知,請提供符合消息傳遞委託協議的委託。以下示例註冊了委託並添加了正確的委託方法:

迅速

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. 在目標設備上安裝並運行該應用程序。您需要接受接收遠程通知的權限請求。

  2. 確保應用程序位於設備的後台。

  3. 打開通知編輯器並選擇新通知

  4. 輸入消息文本。

  5. 選擇發送測試消息

  6. 在標記為Add an FCM registration token的字段中,輸入您在本指南上一部分中獲得的註冊令牌。

  7. 點擊測試

單擊測試後,目標客戶端設備(應用程序在後台)應該會在通知中心收到通知。

要深入了解向您的應用程序傳遞的消息,請參閱FCM 報告儀表板,它記錄了在 Apple 和 Android 設備上發送和打開的消息數量,以及 Android 應用程序的“展示次數”(用戶看到的通知)的數據。

下一步

要超越通知消息並向您的應用添加其他更高級的行為,請參閱: