對於iOS客戶端應用程序,您可以通過Firebase Cloud Messaging APNs界面接收多達4KB的通知和數據有效負載。
要使用Objective-C或Swift編寫客戶端代碼,建議您使用FIRMessaging API 。快速入門示例提供了兩種語言的示例代碼。
Firebase Cloud Messaging中的方法混亂
FCM SDK在兩個關鍵區域執行方法處理:將您的APNs令牌映射到FCM註冊令牌,以及在下游消息回調處理期間捕獲分析數據。不想使用混亂的開發人員可以通過在應用程序的Info.plist文件中添加標誌FirebaseAppDelegateProxyEnabled
並將其設置為NO(布爾值)來禁用它。指南的相關區域提供了代碼示例,無論啟用還是不啟用方法轉換都有效。
將Firebase添加到您的iOS項目
本部分介紹如果您已經為應用程序啟用了其他Firebase功能,則可能已完成的任務。專門針對FCM,您需要上傳APNs身份驗證密鑰並註冊遠程通知。
先決條件
安裝以下內容:
- Xcode 12.2或更高版本
- CocoaPods 1.10.0或更高版本
確保您的項目符合以下要求:
- 您的項目必須針對iOS 10或更高版本。
設置物理iOS設備以運行您的應用程序,並完成以下任務:
- 為您的Apple Developer帳戶獲取Apple Push Notification身份驗證密鑰。
- 在“應用程序”>“功能”下的XCode中啟用“推送通知”。
- 使用您的Google帳戶登錄Firebase 。
如果您還沒有Xcode項目,而只想試用Firebase產品,則可以下載我們的快速入門樣本之一。
創建一個Firebase項目
在將Firebase添加到iOS應用之前,您需要創建一個Firebase項目以連接到iOS應用。訪問了解Firebase項目以了解有關Firebase項目的更多信息。
在Firebase中註冊您的應用
在擁有Firebase項目之後,可以將您的iOS應用添加到其中。
訪問“了解Firebase項目”以了解有關將應用程序添加到Firebase項目的最佳實踐和注意事項的更多信息,包括如何處理多個構建變體。
轉到Firebase控制台。
在項目概述頁面的中心,單擊iOS圖標(
)以啟動設置工作流程。如果您已經將應用程序添加到Firebase項目中,請單擊“添加應用程序”以顯示平台選項。
在iOS捆綁包ID字段中輸入您應用的捆綁包ID 。
捆綁包ID唯一地標識Apple生態系統中的應用程序。
查找包ID:在Xcode中打開您的iOS項目,在項目導航器中選擇頂級應用程序,然後選擇“常規”選項卡。
捆綁包標識符字段的值是iOS捆綁包ID(例如
com.yourcompany.yourproject
)。請注意,捆綁包ID值區分大小寫,並且在您的Firebase項目中註冊後,此Firebase iOS應用程序無法更改它。
(可選)輸入其他應用程序信息:應用程序暱稱和應用程序商店ID 。
應用暱稱:內部便捷標識符,僅在Firebase控制台中對您可見
App Store ID :由Firebase動態鏈接用於將用戶重定向到您的App Store頁面,由Google Analytics(分析)用於將轉化事件導入Google Ads 。如果您的應用還沒有App Store ID,則可以稍後在“項目設置”中添加ID。
點擊註冊應用。
添加Firebase配置文件
單擊“下載GoogleService-Info.plist”以獲取Firebase iOS配置文件(
GoogleService-Info.plist
)。Firebase配置文件包含項目的唯一但非秘密的標識符。要了解有關此配置文件的更多信息,請訪問了解Firebase項目。
您可以隨時再次下載Firebase配置文件。
確保配置文件名未附加其他字符,例如
(2)
。
將您的配置文件移到Xcode項目的根目錄中。如果出現提示,請選擇將配置文件添加到所有目標。
如果您的項目中有多個捆綁軟件ID,則必須將每個捆綁軟件ID與Firebase控制台中已註冊的應用程序關聯,以便每個應用程序都可以擁有自己的GoogleService-Info.plist
文件。
將Firebase SDK添加到您的應用程序
我們建議使用CocoaPods安裝Firebase庫。但是,如果您不想使用CocoaPods,則可以直接集成SDK框架,也可以使用Swift Package Manager beta 。
您使用的是快速入門示例之一嗎? Xcode項目和Podfile(帶有Pod)已經存在,但是您仍然需要添加Firebase配置文件並安裝Pod。
如果您還沒有Podfile,請創建一個:
cd your-project-directory
pod init
在您的Podfile中,添加要在應用程序中使用的Firebase Pod。
您可以將任何受支持的Firebase產品添加到您的iOS應用中。
為了獲得Firebase Cloud Messaging的最佳體驗,我們建議您在項目中啟用Google Analytics(分析) 。另外,作為設置Google Analytics(分析)的一部分,您需要將Firebase SDK for Analytics添加到您的應用中。
啟用分析
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
# Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'尚未啟用分析
# Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
安裝Pod,然後打開
.xcworkspace
文件以查看Xcode中的項目:pod install
open your-project.xcworkspace
上載您的APNs身份驗證密鑰
將您的APNs身份驗證密鑰上載到Firebase。如果您還沒有APNs身份驗證密鑰,請參閱使用FCM配置APNs 。
在Firebase控制台的項目內部,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。
在iOS應用配置下的APNs身份驗證密鑰中,單擊“上載”按鈕。
瀏覽到保存密鑰的位置,選擇它,然後單擊“打開” 。添加密鑰的密鑰ID(可在Apple Developer Member Center中的證書,標識符和配置文件中找到),然後點擊上傳。
在您的應用中初始化Firebase
您需要將Firebase初始化代碼添加到您的應用程序。導入Firebase模塊並配置共享實例,如下所示:
- 將Firebase模塊導入
UIApplicationDelegate
:迅速
import Firebase
物鏡
@import Firebase;
- 配置
FirebaseApp
共享實例,通常在應用程序的application:didFinishLaunchingWithOptions:
方法中:迅速
// Use Firebase library to configure APIs FirebaseApp.configure()
物鏡
// Use Firebase library to configure APIs [FIRApp configure];
註冊以獲取遠程通知
在啟動時或在應用程序流程中的所需位置,註冊您的應用程序以獲取遠程通知。調用registerForRemoteNotifications
,如下所示: 迅速
if #available(iOS 10.0, *) { // For iOS 10 display notification (sent via APNS) UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: {_, _ in }) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerUserNotificationSettings(settings) } application.registerForRemoteNotifications()
物鏡
if ([UNUserNotificationCenter class] != nil) { // iOS 10 or later // For iOS 10 display notification (sent via APNS) [UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; } else { // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications. UIUserNotificationType allNotificationTypes = (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; } [application registerForRemoteNotifications];
訪問註冊令牌
默認情況下,FCM SDK會在應用啟動時為客戶端應用實例生成註冊令牌。與APNs設備令牌類似,此令牌使您可以將定向的通知發送到應用程序的任何特定實例。
與iOS通常在應用啟動時提供APNs設備令牌的方式相同,FCM通過FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
方法提供註冊令牌。 FCM SDK在初始應用啟動期間以及令牌更新或無效時都會檢索新的或現有的令牌。在所有情況下,FCM SDK都會使用有效令牌調用messaging:didReceiveRegistrationToken:
在以下情況下,註冊令牌可能會更改:
- 該應用已在新設備上還原
- 用戶卸載/重新安裝應用程序
- 用戶清除應用程序數據。
設置消息傳遞委託
要接收註冊令牌,請在調用[FIRApp configure]
之後實現消息傳遞委託協議並設置FIRMessaging
的delegate
屬性。例如,如果您的應用程序委託符合消息傳遞委託協議,則可以將application:didFinishLaunchingWithOptions:
上的委託設置為其自身。
迅速
Messaging.messaging().delegate = self
物鏡
[FIRMessaging messaging].delegate = self;
獲取當前註冊令牌
註冊令牌是通過messaging:didReceiveRegistrationToken:
方法交付的。通常每個應用以註冊令牌開始一次調用此方法。調用此方法時,現在是執行以下操作的理想時間:
- 如果註冊令牌是新的,請將其發送到您的應用程序服務器。
- 將註冊令牌訂閱到主題。僅對於新訂閱或用戶重新安裝該應用程序的情況,才需要這樣做。
您可以直接使用token(completion :)檢索令牌。如果令牌檢索以任何方式失敗,則將提供非null錯誤。
迅速
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)" } }
物鏡
[[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; } }];
您可以隨時使用此方法訪問令牌,而不是存儲令牌。
監控令牌刷新
要在令牌更新時得到通知,請提供符合消息傳遞委託協議的委託。下面的示例註冊委託並添加適當的委託方法:
迅速
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. }
物鏡
第068章或者,您可以偵聽名為kFIRMessagingRegistrationTokenRefreshNotification
的NSNotification
而不提供委託方法。令牌屬性始終具有當前令牌值。
禁用欺騙功能:映射您的APNs令牌和註冊令牌
如果已禁用方法切換,則需要將APNs令牌顯式映射到FCM註冊令牌。覆蓋方法didRegisterForRemoteNotificationsWithDeviceToken
以檢索APNs令牌,然後設置FIRMessaging
的APNSToken
屬性:
迅速
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
物鏡
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
生成FCM註冊令牌後,您可以使用與啟用Swizzling相同的方法來訪問它並偵聽刷新事件。
防止自動初始化
生成FCM註冊令牌後,庫會將標識符和配置數據上載到Firebase。如果要首先獲得用戶的明確選擇加入,則可以通過禁用FCM來防止在配置時生成令牌。為此,請將元數據值添加到您的Info.plist
(而不是GoogleService-Info.plist
)中:
FirebaseMessagingAutoInitEnabled = NO
要重新啟用FCM,可以進行運行時調用:
迅速
Messaging.messaging().autoInitEnabled = true
物鏡
[FIRMessaging messaging].autoInitEnabled = YES;
設置後,此值將在應用程序重啟後持續存在。
下一步
設置iOS客戶端后,即可為應用添加消息處理和其他更高級的行為。有關更多信息,請參見以下指南: