向後台 Apple 應用程式發送測試訊息

要開始使用 FCM,請建立最簡單的用例:當應用程式位於裝置背景時,從通知編輯器向開發設備發送測試通知訊息。此頁面列出了實現此目的的所有步驟,從設定到驗證 - 如果您已為 FCM設定了 Apple 用戶端應用程序,它可能涵蓋您已經完成的步驟。

將 Firebase 新增到您的 Apple 項目

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

先決條件

  • 安裝以下內容:

    • Xcode 14.1 或更高版本
  • 確保您的專案符合以下要求:

    • 您的專案必須針對這些平台版本或更高版本:
      • iOS 11
      • macOS 10.13
      • 電視作業系統12
      • watchOS 6
  • 設定實體 Apple 裝置來運行您的應用程序,並完成以下任務:

    • 為您的Apple 開發者帳戶取得 Apple 推播通知驗證金鑰。
    • App > Capability下的 XCode 中啟用推播通知。

如果您還沒有 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.git
  4. 選擇 Firebase 雲端訊息傳遞庫。
  5. -ObjC標誌新增至目標建置設定的「其他連結器標誌」部分。
  6. 為了獲得 Firebase Cloud Messaging 的最佳體驗,我們建議在您的 Firebase 專案中啟用 Google Analytics ,並將適用於 Google Analytics 的 Firebase SDK 新增至您的應用程式。您可以選擇沒有 IDFA 收集或有 IDFA 收集的庫。
  7. 完成後,Xcode 將自動開始在背景解析並下載您的依賴項。

上傳您的 APNs 驗證金鑰

將您的 APNs 驗證金鑰上傳到 Firebase。如果您還沒有 APNs 驗證金鑰,請確保在Apple 開發者會員中心建立一個。

  1. 在 Firebase 控制台的項目內,選擇齒輪圖標,選擇項目設置,然後選擇雲端訊息傳遞選項卡。

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

  3. 瀏覽到儲存金鑰的位置,選擇它,然後按一下「開啟」 。新增金鑰的金鑰 ID(可在Apple 開發者會員中心取得)並點選Upload

在您的應用程式中初始化 Firebase

您需要將 Firebase 初始化程式碼新增到您的應用程式中。導入 Firebase 模組並配置共享實例,如下所示:

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

    斯威夫特使用者介面

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

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

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

    斯威夫特使用者介面

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

    迅速

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. 如果您使用 SwiftUI,則必須建立應用程式委託並透過UIApplicationDelegateAdaptorNSApplicationDelegateAdaptor將其附加到您的App結構。您還必須停用應用程式委託調配。有關更多信息,請參閱SwiftUI 說明

    斯威夫特使用者介面

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

註冊遠端通知

在啟動時或在應用程式流程中的所需位置,註冊您的應用程式以取得遠端通知。呼叫registerForRemoteNotifications ,如下所示:

迅速


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:上的委託設定為其本身。

迅速

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. 在目標裝置上安裝並執行應用程式。在 Apple 裝置上,您需要接受接收遠端通知的權限請求。

  2. 確保該應用程式位於裝置的背景。

  3. 在 Firebase 控制台中,開啟訊息傳遞頁面

  4. 如果這是您的第一個訊息,請選擇建立您的第一個行銷活動

    1. 選擇Firebase 通知訊息,然後選擇建立
  5. 否則,在「行銷活動」標籤上,選擇「新行銷活動」 ,然後選擇「通知」

  6. 輸入訊息文字。所有其他欄位都是可選的。

  7. 從右側窗格中選擇傳送測試訊息

  8. 在標記為 新增 FCM 註冊令牌 的欄位中,輸入您在本指南上一部分中獲得的註冊令牌。

  9. 選擇測試

選擇“測試”後,目標用戶端裝置(應用程式位於背景)應該會收到通知。

若要深入了解向您的應用程式發送的訊息,請參閱FCM 報告儀表板,該儀表板記錄Apple 和Android 裝置上發送和開啟的訊息數,以及Android 應用程式的「展示次數」(使用者看到的通知)數據。

下一步

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