如果是 Apple 用戶端應用程式,您可以透過 Firebase Cloud Messaging APN 介面接收通知和資料酬載,大小上限為 4096 個位元組。
如要在 Objective-C 或 Swift 中編寫用戶端程式碼,建議您使用 FIRMessaging API。快速入門範例提供兩種語言的程式碼範例。
Firebase Cloud Messaging 中的方法交換
FCM SDK 會在兩個重要領域執行方法 swizzling:將 APNs 權杖對應至 FCM 註冊權杖,並在下游訊息回呼處理期間擷取數據分析資料。如果開發人員不想使用 swizzling,可以在應用程式的 Info.plist 檔案中新增標記 FirebaseAppDelegateProxyEnabled
,並將其設為 NO (布林值) 來停用 swizzling。指南的相關部分會提供程式碼範例,包括啟用和停用方法混合功能的範例。
將 Firebase 新增至 Apple 專案
如果您尚未將 Firebase 新增至 Apple 專案,請新增 Firebase。
上傳 APNs 驗證金鑰
將 APNs 驗證金鑰上傳至 Firebase。如果您尚未取得 APNs 驗證金鑰,請務必前往 Apple Developer Member Center 建立金鑰。
-
在 Firebase 控制台的專案中,依序選取齒輪圖示、「Project Settings」(專案設定),然後選取「Cloud Messaging」分頁。
-
在「iOS 應用程式設定」下方的「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 會在應用程式啟動時,為用戶端應用程式例項產生註冊權杖。與 APNs 裝置憑證類似,您可以使用這個憑證,將指定通知傳送至應用程式的任何特定例項。
就像 Apple 平台通常會在應用程式啟動時提供 APNs 裝置符記一樣,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(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. }
或者,您也可以監聽名為 kFIRMessagingRegistrationTokenRefreshNotification
的 NSNotification
,而非提供委派方法。權杖屬性一律包含目前的權杖值。
已停用 swizzling:對應 APNs 權杖和註冊權杖
如果您已停用方法混合,或正在建構 SwiftUI 應用程式,則必須明確將 APNs 權杖對應至 FCM 註冊權杖。實作 application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
方法來擷取 APNs 權杖,然後設定 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 註冊權杖後,您可以使用啟用 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 用戶端後,您就可以在應用程式中新增訊息處理和其他進階行為。請參閱以下指南瞭解詳情: