以 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 中建立一個。
-
在 Firebase 控制台的專案內,選取齒輪圖示,依序選取「專案設定」和「雲端通訊」分頁標籤。
-
在「iOS app configuration」下方的「APNs authentication key」中,按一下「Upload」按鈕。
-
瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下「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 會透過 FIRMessagingDelegate
的 messaging:didReceiveRegistrationToken:
方法提供註冊權杖。應用程式初始啟動時,以及每當權杖更新或失效時,FCM SDK 都會擷取新的或現有的權杖。在任何情況下,FCM SDK 都會使用有效權杖呼叫 messaging:didReceiveRegistrationToken:
。
在下列情況下,註冊權杖可能會變更:
- 應用程式已在新裝置上還原
- 使用者解除安裝/重新安裝應用程式
- 使用者清除應用程式資料。
設定訊息委派代表
如要接收註冊權杖,請實作訊息委派通訊協定,並在呼叫 [FIRApp configure]
後設定 FIRMessaging
的 delegate
屬性。舉例來說,如果您的應用程式委派符合訊息委派通訊協定,您可以將 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. }
您也可以監聽名為 kFIRMessagingRegistrationTokenRefreshNotification
的 NSNotification
,而不是提供委派方法。權杖屬性一律採用目前的權杖值。
停用 Swizzling 功能:對應 APN 權杖和註冊權杖
如果您已停用方法清除功能,或是建構 SwiftUI 應用程式,就必須明確將 APN 權杖對應至 FCM 註冊權杖。實作 application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
方法擷取 APN 權杖,然後設定 Messaging
的 apnsToken
屬性:
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 用戶端後,即可開始在應用程式中新增訊息處理和其他進階行為。詳情請參閱以下指南: