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

如果是 Apple 用戶端應用程式,您最多可以接收 4096 的通知和資料酬載 Firebase Cloud Messaging APNs 介面上輸入的 位元組。

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

Firebase Cloud Messaging 中的方法滑動

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 用戶端後,即可開始新增訊息處理功能 其他更進階的行為 導入您的應用程式詳情請參閱以下指南: