Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

將測試消息發送到後台iOS應用

要開始使用FCM,請構建最簡單的用例:當應用程序在設備的後台運行時,將通知通知消息從Notifications作曲家發送到開發設備。此頁面列出了從安裝到驗證的所有步驟,如果您已經為FCM 設置了iOS客戶端應用 ,則該頁面可能涵蓋了您已經完成的步驟。

將Firebase添加到您的iOS項目

本部分介紹如果您已經為應用程序啟用了其他Firebase功能,則可能已完成的任務。專門針對FCM,您需要上傳APNs身份驗證密鑰註冊遠程通知

先決條件

  • 安裝以下內容:

    • Xcode 11.0或更高版本
    • CocoaPods 1.4.0或更高版本
  • 確保您的項目符合以下要求:

    • 您的項目必須針對iOS 8或更高版本。
  • 設置物理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添加到您的應用中。

    啟用分析

    618

    未啟用分析

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. 安裝Pod,然後打開您的.xcworkspace文件以查看Xcode中的項目:

    pod install
    open your-project.xcworkspace

上傳您的APNs身份驗證密鑰

將您的APNs身份驗證密鑰上載到Firebase。如果您還沒有APNs身份驗證密鑰,請參閱使用FCM配置APNs

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

  2. iOS應用配置下的APNs身份驗證密鑰中 ,點擊上傳按鈕。

  3. 瀏覽到保存密鑰的位置,選擇它,然後單擊“ 打開” 。添加密鑰的密鑰ID(可在Apple Developer Member Center中的證書,標識符和配置文件中找到),然後點擊上傳

在您的應用中初始化Firebase

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

  1. 將Firebase模塊導入UIApplicationDelegate

    迅速

    import Firebase

    目標C

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

物鏡

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];

訪問註冊令牌

要將消息發送到特定設備,您需要知道該設備的註冊令牌。因為您需要在Notifications作曲家的一個字段中輸入令牌才能完成本教程,所以請確保在檢索完令牌後將其複製或安全地存儲。

默認情況下,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:方法交付的。通常每個應用以註冊令牌開始一次調用此方法。調用此方法時,是執行以下操作的理想時間:

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

您可以使用instanceIDWithHandler:直接檢索令牌。該回調提供了一個InstanceIDResult ,其中包含令牌。如果InstanceID檢索以任何方式失敗,則提供非null錯誤。

迅速

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

物鏡

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

通常,令牌在本地可用,因此此方法不會打開網絡連接。您可以隨時使用此方法訪問令牌,而不是存儲令牌。

監控令牌刷新

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

迅速

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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而不必提供委託方法。令牌屬性始終具有當前令牌值。

發送通知消息

  1. 在目標設備上安裝並運行該應用程序。您需要接受許可請求才能接收遠程通知。

  2. 確保該應用程序在設備的後台。

  3. 打開“ 通知”編輯器,然後選擇“ 新建通知”

  4. 輸入消息文本。

  5. 選擇發送測試消息

  6. 在標有添加FCM註冊令牌的字段中,輸入您在本指南的上一部分中獲得的註冊令牌。

  7. 點擊測試

單擊“ 測試”後 ,目標客戶端設備(後台運行應用程序)應在通知中心接收通知。

要深入了解將消息傳遞到您的應用程序,請參閱FCM報告儀表板 ,該儀表板記錄了iOS和Android設備上已發送和打開的消息數,以及Android應用程序的“展示次數”(用戶看到的通知)數據。

下一步

要超越通知消息並向您的應用添加其他更高級的行為,請參閱: