如果是 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 驗證金鑰。
-
在 Firebase 控制台的專案中,依序選取齒輪圖示 >「專案設定」,然後選取「雲端通訊」分頁標籤。
-
在「iOS app configuration」下方的「APNs 驗證金鑰」中,按一下「上傳」按鈕。
-
瀏覽至您儲存金鑰的位置,選取金鑰,然後按一下 [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 會透過 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 用戶端後,應用程式就能新增訊息處理和其他進階行為。詳情請參閱以下指南: