在 Apple 平台上設定 Firebase 雲端通訊用戶端應用程式

如果是 Apple 用戶端應用程式,您最多可以接收 4096 的通知和資料酬載 比 Firebase 雲端通訊 APNs 介面 1 GB 的位元組。

如要以 Objective-C 或 Swift 編寫用戶端程式碼,建議您使用 FIRMessaging API快速入門導覽課程範例 提供了這兩種語言的程式碼範例。

Firebase 雲端通訊中的方法游泳

FCM SDK 會在兩個主要區域執行方法切換: 對應 APNs 權杖 取得 FCM 註冊符記,並擷取期間的數據分析資料 下游訊息回呼處理。 不想使用旋轉工具的開發人員 如要停用這項功能,請在應用程式的FirebaseAppDelegateProxyEnabled Info.plist 檔案,並將其設為 NO (布林值)。指南的相關領域 提供的程式碼範例,包括是否已啟用方法滑動功能。

將 Firebase 新增至您的 Apple 專案

如果還沒試過 將 Firebase 新增至 Apple 專案

上傳 APN 驗證金鑰

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

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

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

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

註冊遠端通知

可能是啟動時或應用程式流程中的所需階段。 註冊應用程式以取得遠端通知。致電 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 而不是提供委派方法權杖屬性一律包含 目前的權杖值

已停用 Swizzling:對應 APN 權杖 和註冊符記

如果您已停用方法滑動功能,或要建構 SwiftUI 應用程式,您就必須 明確地將您的 APN 權杖對應至 FCM 註冊權杖。實作 將 application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 種方法分配給 擷取 APN 權杖,然後將 MessagingapnsToken敬上 資源:

Swift

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

FCM 註冊權杖產生後,您就可以存取該權杖 並監聽重新整理事件,並使用與

避免自動初始化

產生 FCM 註冊權杖時,程式庫會上傳 和設定資料傳送至 Firebase如果想 可以在設定時避免產生權杖,方法是 停用 FCM。方法是將中繼資料值新增至 Info.plist (而非 GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

如要重新啟用 FCM,您可以發起執行階段呼叫:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

設定這個值後,每次重新啟動的應用程式都會保留這個值。

後續步驟

設定 Apple 用戶端後,即可開始新增訊息處理功能 其他更進階的行為 導入您的應用程式詳情請參閱以下指南: