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

以 Apple 用戶端應用程式來說,您可以透過 Firebase 雲端通訊 APN 介面接收通知和資料酬載,上限為 4096 個位元組。

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

Firebase 雲端通訊中的方法滑動

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

將 Firebase 新增至 Apple 專案

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

上傳 APN 驗證金鑰

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

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

  2. 在「iOS app configuration」下方的「APNs authentication key」中,按一下「Upload」按鈕。

  3. 瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下「Open」。新增金鑰的金鑰 ID (可於 Apple Developer Member Center 取得),然後按一下「Upload」

註冊遠端通知

請在啟動時或應用程式流程的合適時間點註冊應用程式,以便接收遠端通知。呼叫 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 用戶端後,即可開始在應用程式中新增訊息處理和其他進階行為。詳情請參閱以下指南: