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

如果是 Apple 用戶端應用程式,您可以透過 Firebase Cloud Messaging APN 介面接收通知和資料酬載,大小上限為 4096 個位元組。

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

Firebase Cloud Messaging 中的方法滑動

FCM SDK 會在兩個重要領域執行方法混合作業:將 APNs 權杖對應至 FCM 註冊權杖,並在下游訊息回呼處理期間擷取數據分析資料。如果開發人員不想使用滑動功能,可以在應用程式的 Info.plist 檔案中加入 FirebaseAppDelegateProxyEnabled 標記,並將其設為 NO (布林值) 以停用此功能。指南的相關部分會提供程式碼範例,說明啟用和停用方法混合功能的情況。

將 Firebase 新增至您的 Apple 專案

如果您尚未將 Firebase 新增至 Apple 專案,請新增 Firebase

上傳 APN 驗證金鑰

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

  1. Firebase 控制台的專案中選取齒輪圖示,然後依序選取「Project Settings」和「Cloud Messaging」分頁標籤。

  2. 在「iOS app configuration」下方的「APNs 驗證金鑰」中,按一下「上傳」按鈕。

  3. 瀏覽至儲存金鑰的位置,選取金鑰,然後按一下「Open」。新增金鑰的金鑰 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 會在應用程式啟動時為用戶端應用程式執行個體產生註冊權杖。與 APNs 裝置憑證類似,您可以使用這個憑證,將指定通知傳送至應用程式的任何特定例項。

與 Apple 平台通常在應用程式啟動時提供 APN 裝置權杖的方式相同,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,而非提供委派方法。權杖屬性一律包含目前的權杖值。

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

如果您已停用方法混合,或正在建構 SwiftUI 應用程式,則必須明確將 APNs 權杖對應至 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 註冊權杖後,您可以使用啟用 swizzling 時相同的方法存取權杖,並監聽重新整理事件。

避免自動初始化

產生 FCM 註冊權杖時,程式庫會將 ID 和設定資料上傳至 Firebase。如果您想先取得使用者的明確選擇加入資訊,可以停用 FCM,避免在設定時產生權杖。如要這麼做,請將中繼資料值新增至 Info.plist (而非 GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

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

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

設定後,這個值會在應用程式重新啟動時保留。

後續步驟

設定 Apple 用戶端後,應用程式就能新增訊息處理和其他進階行為。詳情請參閱以下指南: