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

如果是 Apple 用戶端應用程式,您可以透過 Firebase 雲端通訊 APNs 介面接收高達 4096 個位元組的通知和資料酬載。

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

Firebase 雲端通訊中的方法游泳

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

將 Firebase 新增至您的 Apple 專案

如果您尚未將 Firebase 新增至 Apple 專案,請先完成這項操作。

上傳 APN 驗證金鑰

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

  1. 在 Firebase 控制台的專案中,依序選取齒輪圖示 >「專案設定」,然後選取「雲端通訊」分頁標籤。

  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 會在應用程式啟動時為用戶端應用程式執行個體產生註冊權杖。這個權杖與 APN 裝置權杖類似,可讓您向應用程式的任何特定執行個體傳送指定通知。

與 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(complete:) 直接擷取權杖。如果權杖擷取失敗,就會產生非空值錯誤。

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 應用程式,就必須明確將 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 註冊權杖時,程式庫會將 ID 和設定資料上傳至 Firebase。如果想先明確讓使用者選擇加入,可以停用 FCM,防止在設定時間產生權杖。為此,請將中繼資料值新增至 Info.plist (而非 GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

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

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

後續步驟

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