Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

在iOS上設置Firebase Cloud Messaging客戶端應用

對於iOS客戶端應用程序,您可以通過Firebase Cloud Messaging APNs界面接收多達4KB的通知和數據有效負載。

要使用Objective-C或Swift編寫客戶端代碼,建議您使用FIRMessaging API快速入門示例提供了兩種語言的示例代碼。

要啟用通過APN發送推送通知,您需要:

  • 您的Apple Developer帳戶的Apple Push Notification身份驗證密鑰。 Firebase Cloud Messaging使用此令牌將推送通知發送到由App ID標識的應用程序。

  • 啟用推送通知的該應用程序ID的供應配置文件。此外,要在開發過程中測試您的應用,您需要提供配置文件以進行開發,以授權您的設備運行尚未在App Store中發布的應用。

您可以在Apple Developer Member Center中創建兩者。

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中啟用“推送通知”。

如果您還沒有Xcode項目,而只想試用Firebase產品,則可以下載我們的快速入門樣本之一

創建一個Firebase項目

在將Firebase添加到iOS應用之前,您需要創建一個Firebase項目以連接到iOS應用。訪問了解Firebase項目以了解有關Firebase項目的更多信息。

在Firebase中註冊您的應用

在擁有Firebase項目之後,可以將您的iOS應用添加到其中。

訪問“了解Firebase項目”以了解有關將應用程序添加到Firebase項目的最佳實踐和注意事項的更多信息,包括如何處理多個構建變體。

  1. 轉到Firebase控制台

  2. 在項目概述頁面的中心,單擊iOS圖標( )以啟動設置工作流程。

    如果您已經將應用程序添加到Firebase項目中,請單擊“添加應用程序”以顯示平台選項。

  3. iOS捆綁包ID字段中輸入您應用的捆綁包ID

  4. (可選)輸入其他應用程序信息:應用程序暱稱應用程序商店ID

  5. 點擊註冊應用

添加Firebase配置文件

  1. 單擊“下載GoogleService-Info.plist”以獲取Firebase iOS配置文件( GoogleService-Info.plist )。

  2. 將您的配置文件移到Xcode項目的根目錄中。如果出現提示,請選擇將配置文件添加到所有目標。

如果您的項目中有多個捆綁軟件ID,則必須將每個捆綁軟件ID與Firebase控制台中已註冊的應用程序相關聯,以便每個應用程序都可以擁有自己的GoogleService-Info.plist文件。

將Firebase SDK添加到您的應用程序

我們建議使用CocoaPods安裝Firebase庫。但是,如果您不想使用CocoaPods,則可以直接集成SDK框架,也可以使用Swift Package Manager beta

您使用的是快速入門示例之一嗎? Xcode項目和Podfile(帶有Pod)已經存在,但是您仍然需要添加Firebase配置文件安裝Pod。

  1. 如果您還沒有Podfile,請創建一個:

    cd your-project-directory
    pod init
  2. 在您的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'
  3. 安裝Pod,然後打開.xcworkspace文件以查看Xcode中的項目:

    pod install
    open your-project.xcworkspace

上載您的APNs身份驗證密鑰

將您的APNs身份驗證密鑰上載到Firebase。如果您還沒有APNs身份驗證密鑰,請確保在Apple Developer Member Center中創建一個。

  1. 在Firebase控制台的項目內部,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。

  2. iOS應用配置下的APNs身份驗證密鑰中,單擊“上載”按鈕。

  3. 瀏覽到保存密鑰的位置,選擇它,然後單擊“打開” 。添加密鑰的密鑰ID(可在Apple Developer Member Center中找到),然後單擊Upload

在您的應用中初始化Firebase

您需要將Firebase初始化代碼添加到您的應用程序。導入Firebase模塊並配置共享實例,如下所示:

  1. 將Firebase模塊導入UIApplicationDelegate

    迅速

    import Firebase

    物鏡

    @import Firebase;
  2. 配置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()

物鏡

第0283章

訪問註冊令牌

默認情況下,FCM SDK會在應用啟動時為客戶端應用實例生成註冊令牌。與APNs設備令牌類似,此令牌使您可以將定向的通知發送到應用程序的任何特定實例。

與iOS通常在應用啟動時提供APNs設備令牌的方式相同,FCM通過FIRMessagingDelegate messaging:didReceiveRegistrationToken: FIRMessagingDelegate messaging:didReceiveRegistrationToken:方法提供註冊令牌。 FCM SDK在初始應用啟動期間以及令牌更新或無效時都會檢索新的或現有的令牌。在所有情況下,FCM SDK都會使用有效令牌調用messaging:didReceiveRegistrationToken:

在以下情況下,註冊令牌可能會更改:

  • 該應用已在新設備上還原
  • 用戶卸載/重新安裝應用程序
  • 用戶清除應用程序數據。

設置消息傳遞委託

要接收註冊令牌,請在調用[FIRApp configure]之後實現消息傳遞委託協議並設置FIRMessagingdelegate屬性。例如,如果您的應用程序委託符合消息傳遞委託協議,則可以將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.
}

物鏡

- (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而不必提供委託方法。令牌屬性始終具有當前令牌值。

禁用欺騙功能:映射您的APNs令牌和註冊令牌

如果已禁用方法切換,則需要將APNs令牌顯式映射到FCM註冊令牌。覆蓋方法didRegisterForRemoteNotificationsWithDeviceToken以檢索APNs令牌,然後設置FIRMessagingAPNSToken屬性:

迅速

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客戶端后,即可為應用添加消息處理和其他更高級的行為。有關更多信息,請參見以下指南: