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

對於 iOS 客戶端應用程序,您可以通過 Firebase Cloud Messaging APNs 接口接收最多 4000 字節的通知和數據負載。

寫在Objective-C或斯威夫特您的客戶端代碼,我們建議您使用FIRMessaging API 。該快速啟動示例提供了一種用於兩種語言的示例代碼。

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

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

  • 對於應用程序ID與配置輪廓推送通知啟用。此外,要在開發過程中測試您的應用程序,您需要一個用於開發的配置文件來授權您的設備運行尚未在 App Store 上發布的應用程序。

您可以在同時創建蘋果開發會員中心

Firebase 雲消息傳遞中的方法調配

在兩個關鍵領域的FCM SDK執行方法混寫:映射你的APN令牌到FCM註冊令牌,並在捕獲分析數據下游消息回調處理。誰不喜歡使用交叉混合開發人員可以通過添加標誌禁用它FirebaseAppDelegateProxyEnabled在應用程序的Info.plist文件,並將其設置為NO(布爾值)。指南的相關區域提供了啟用和不啟用方法調配的代碼示例。

將 Firebase 添加到您的 iOS 項目

如果您已為您的應用啟用其他 Firebase 功能,則本部分涵蓋您可能已完成的任務。對於FCM具體而言,你需要上傳你的APN認證密鑰註冊遠程通知

先決條件

  • 安裝以下內容:

    • Xcode 12.2 或更高版本
    • CocoaPods 1.10.0 或更高版本
  • 確保您的項目滿足以下要求:

    • 您的項目必鬚麵向 iOS 10 或更高版本。
  • 建立一個物理iOS設備來運行你的應用程序,並完成以下任務:

    • 獲得蘋果推送通知驗證密鑰為您的蘋果開發者賬號
    • 啟用應用下XCode中推送通知>能力

如果你不已經有一個Xcode項目,只是想嘗試一個火力地堡的產品,你可以下載我們的一個入門示例

創建 Firebase 項目

在將 Firebase 添加到您的 iOS 應用之前,您需要創建一個 Firebase 項目以連接到您的 iOS 應用。參觀了解火力地堡項目,詳細了解項目的火力地堡。

向 Firebase 註冊您的應用

擁有 Firebase 項目後,您可以向其中添加您的 iOS 應用。

參觀了解火力地堡項目,詳細了解最佳實踐和注意事項添加應用到火力地堡項目,包括如何處理多個構建變種。

  1. 轉至火力地堡控制台

  2. 在項目概述頁面的中心,點擊iOS圖標( )啟動安裝工作流程。

    如果您已經添加的應用程序到你的火力地堡項目,單擊添加應用程序,以顯示平台的選擇。

  3. iOS系結ID字段中輸入您的應用程序的包ID。

  4. (可選)輸入其他應用程序的信息:應用程序的暱稱App Store的ID。

  5. 點擊註冊應用

添加 Firebase 配置文件

  1. 點擊下載GoogleService-Info.plist中獲得你的火力地堡的iOS配置文件( GoogleService-Info.plist )。

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

如果你在你的項目中有多個包ID,必須每捆ID用在火力地堡控制台,以便每個應用程序都可以有自己的註冊應用關聯GoogleService-Info.plist文件。

將 Firebase SDK 添加到您的應用

我們建議您使用的CocoaPods安裝火力地堡庫。但是,如果你不想使用的CocoaPods,您可以直接集成SDK框架或使用雨燕包管理器來代替。

您是否正在使用的一個快速入門樣本 Xcode項目和Podfile(帶豆莢)已經存在,但你仍然需要添加火力地堡的配置文件安裝的豆莢。

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

    cd your-project-directory
    pod init
  2. 在 Podfile 中,添加要在應用中使用的 Firebase pod。

    您可以添加任何的支持火力地堡產品到您的iOS應用。

    對於火力地堡雲端通訊獲得最佳體驗,我們建議讓谷歌Analytics(分析)在您的項目。此外,作為設置 Analytics 的一部分,您需要將 Firebase SDK for Analytics 添加到您的應用。

    啟用分析

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    了解更多關於IDFA,設備級的廣告標識,在蘋果公司的用戶隱私和數據使用應用跟踪透明度文檔。

    未啟用分析

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. 安裝莢,然後打開你的.xcworkspace文件,看看在Xcode項目:

    pod install
    open your-project.xcworkspace

上傳您的 APNs 身份驗證密鑰

將您的 APNs 身份驗證密鑰上傳到 Firebase。如果你不已經有一個APN的認證密鑰,確保在創建一個蘋果開發者會員中心

  1. 在火力地堡控制台你的項目中,選擇齒輪圖標,選擇項目設置,然後選擇雲端通訊標籤。

  2. 在根據iOS應用配置的APN認證密鑰,點擊上傳按鈕。

  3. 瀏覽到您保存密鑰的位置,選擇它,然後單擊打開。添加鍵ID為鍵(可在蘋果開發者會員中心),然後單擊上傳

在您的應用中初始化 Firebase

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

  1. 導入火力地堡模塊在UIApplicationDelegate

    迅速

    import Firebase

    目標-C

    @import Firebase;
  2. 配置一個FirebaseApp共享實例,通常在你的應用程序的application:didFinishLaunchingWithOptions:方法:

    迅速

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    目標-C

    // 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()

目標-C

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的通常輸送上的應用程序起動的令牌裝置的APN,FCM提供通過令牌的登記FIRMessagingDelegatemessaging:didReceiveRegistrationToken:方法。 FCM SDK 在應用程序初始啟動期間以及每當令牌更新或失效時檢索新的或現有的令牌。在所有情況下,FCM SDK調用messaging:didReceiveRegistrationToken:使用有效的令牌。

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

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

設置消息代理

以接收註冊標記,實現郵件委託協議並設置FIRMessagingdelegate屬性調用後[FIRApp configure] 。例如,如果您的應用程序委託符合消息委託協議,可以設置委託在application:didFinishLaunchingWithOptions:到自身。

迅速

Messaging.messaging().delegate = self

目標-C

[FIRMessaging messaging].delegate = self;

獲取當前註冊令牌

註冊標記是通過該方法遞送messaging:didReceiveRegistrationToken: 。此方法通常在每個應用程序以註冊令牌開始時調用一次。調用此方法時,是執行以下操作的理想時間:

  • 如果註冊令牌是新的,請將其發送到您的應用程序服務器。
  • 將註冊令牌訂閱到主題。這僅適用於新訂閱或用戶重新安裝應用程序的情況。

您可以直接使用檢索令牌令牌(完成:) 。如果令牌檢索以任何方式失敗,則會提供非空錯誤。

迅速

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)"
  }
}

目標-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;
  }
}];

您可以隨時使用此方法訪問令牌而不是存儲它。

監控令牌刷新

要在令牌更新時收到通知,請提供符合消息傳遞委託協議的委託。以下示例註冊委託並添加適當的委託方法:

迅速

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.
}

目標-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.
}

或者,你可以聽一個NSNotification命名kFIRMessagingRegistrationTokenRefreshNotification而不是提供一個委託方法。令牌屬性始終具有當前令牌值。

Swizzling 已禁用:映射您的 APNs 令牌和註冊令牌

如果您禁用了方法 swizzling,則需要將您的 APNs 令牌顯式映射到 FCM 註冊令牌。重載的方法didRegisterForRemoteNotificationsWithDeviceToken檢索的APN令牌,然後設置FIRMessagingAPNSToken屬性:

迅速

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

目標-C

// 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

目標-C

[FIRMessaging messaging].autoInitEnabled = YES;

設置後,此值在應用程序重新啟動後仍然存在。

下一步

設置 iOS 客戶端后,您就可以向應用程序添加消息處理和其他更高級的行為了。有關更多信息,請參閱這些指南: