向后台应用发送您的第一条消息

要开始使用 FCM,可构建最简单的使用情形:当应用在设备后台运行时,从通知编辑器向某位特定用户的设备发送一条通知消息。本页面列出了实现上述目标所需的从设置到验证的所有步骤。如果您已针对 FCM 设置了 iOS 客户端应用,则这些步骤中可能也包括您已经完成的步骤。

将 Firebase 添加至您的 iOS 项目

如果您已经为您的应用启用了其他 Firebase 功能,那么您可能已完成本部分将要介绍的一些任务。此外,您需要专门针对 FCM 上传您的 APNs 身份验证密钥注册接收远程通知

前提条件

开始之前,需要在您的环境中设置几项内容:

  • Xcode 8.0 或更高版本
  • 一个针对 iOS 8 或更高版本的 Xcode 项目
  • Swift 项目必须使用 Swift 3.0 或更高版本
  • 您的应用的软件包标识符
  • CocoaPods 1.2.0 或更高版本
  • 针对云消息传递:
    • 一台 iOS 真机
    • Apple 开发者帐号的一个 Apple 推送通知身份验证密钥
    • 在 Xcode 中通过 App > Capabilities 启用推送通知功能

如果您还没有 Xcode 项目,只是想试用一下某项 Firebase 功能,可以下载我们的快速入门示例。如果使用快速入门示例,请不要忘记从项目设置中获取软件包标识符,下一步中会用到该标识符。

将 Firebase 添加到您的应用

现在需要将 Firebase 添加至您的应用。要执行此操作,您需要一个 Firebase 项目和适用于您的应用的 Firebase 配置文件。

  1. 如果您还没有 Firebase 项目,请在 Firebase 控制台中创建一个。如果您已经有与自己的移动应用相关联的现有 Google 项目,请点击导入 Google 项目。如果没有,请点击添加项目
  2. 点击将 Firebase 添加到您的 iOS 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
  3. 出现提示时,输入应用的软件包 ID。请务必输入应用在使用的软件包 ID;只有在将应用添加到 Firebase 项目时您才能进行此设置。
  4. 最后,您需要下载一个 GoogleService-Info.plist 文件。您可以随时重新下载此文件
  5. 如果您尚未使用 Xcode 中的 Add Files 实用工具(进入 File 菜单,然后点击 Add Files)将此文件添加到您的 Xcode 项目根目录,请执行此操作。请确保将此文件添加到应用的构建目标中。

添加 SDK

如果您是设置一个新项目,则需要安装 SDK。您可能已经在创建 Firebase 项目的过程中完成此步操作。

我们建议使用 CocoaPods 安装相关的库。您可以按照安装说明来安装 Cocoapods。如果不想使用 CocoaPods,则可以直接集成 SDK 框架,而不使用 CocoaPods

如果您计划下载并运行某个快速入门示例,示例中会提供 Xcode 项目和 Podfile,不过您还是需要安装 Pod 并下载 GoogleService-Info.plist 文件。如果您希望将 Firebase 库集成至自己的某个项目中,则需要为想要使用的库添加 Pod。

  1. 如果还没有 Xcode 项目,请立即创建一个。

  2. 如果还没有 Podfile,请创建一个:

    $ cd your-project directory
    $ pod init
    
  3. 添加您想安装的 Pod。您可以按照以下方法在 Podfile 中纳入一个 Pod:

    pod 'Firebase/Core'
    pod 'Firebase/Messaging'
    

    这会在您的 iOS 应用中添加 Firebase 正常运行所需的必备库以及 Google Analytics for Firebase 功能。下面列出了目前可供使用的一系列 pod 和 subspec。在针对不同功能的设置指南中也对此给出了相应的链接。

  4. 安装 Pod 并打开 .xcworkspace 文件以便在 Xcode 中查看该项目。

    $ pod install
    $ open your-project.xcworkspace
    
  5. Firebase 控制台中下载一个 GoogleService-Info.plist 文件并将其添加到您的应用中。

上传您的 APNs 身份验证密钥

将您的 APNs 身份验证密钥上传到 Firebase。如果您还没有 APNs 身份验证密钥,请参阅配置 FCM APNs

  1. 在 Firebase 控制台中,在您的项目内依次选择齿轮图标、项目设置以及云消息传递标签。

  2. iOS 应用配置下的 APNs 身份验证密钥中,点击上传按钮。

  3. 转到您保存密钥的位置,选择该密钥,然后点击打开。添加该密钥的密钥 ID(可在 Apple Developer Member CenterCertificates, Identifiers & Profiles 中找到),然后点击上传

在您的应用中初始化 Firebase

您需要为应用添加 Firebase 初始化代码。导入 Firebase 模块并配置一个共享实例,具体操作如下所示:

  1. UIApplicationDelegate 中导入 Firebase 模块:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. 配置一个 FirebaseApp 共享实例,通常是在应用的 application:didFinishLaunchingWithOptions: 方法中配置:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

注册接收远程通知

在启动时,或者在应用流程中的相应时刻,注册您的应用以便接收远程通知。按如下所示调用 registerForRemoteNotifications

Swift

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

Objective-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 通常在应用启动时传送 APNs 设备令牌,FCM 会以同一种方式在应用每次启动时通过 FIRMessaging 委托的 messaging:didReceiveRegistrationToken 回调来提供注册令牌。在应用第一次启动期间,以及在每次注册令牌更改时,FCM SDK 都会检索令牌。在这两种情况下,FCM SDK 都会调用 FIRMessageDelegate 协议中的 messaging:didReceiveRegistrationToken:

注册令牌可能会在发生下列情况时更改:

  • 应用在新设备上恢复
  • 用户卸载/重新安装应用
  • 用户清除应用数据

设置消息委托

要在应用启动时接收注册令牌,请在类中实现消息委托协议,并在调用 [FIRApp configure] 后将其提供给委托属性。例如,如果您的应用委托符合消息委托协议,可以将 application:didFinishLaunchingWithOptions: 上的委托设为它自己。

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

接收当前的注册令牌

注册令牌是通过 messaging:didReceiveRegistrationToken: 方法传送的。系统通常会在应用每次启动时用 FCM 令牌调用此方法。调用此方法后,最适合执行以下操作:

  • 如果注册令牌是新的,将其发送到您的应用服务器(建议实现服务器逻辑来确定令牌是不是新的)。
  • 为注册令牌订阅主题。只需针对新订阅或者在用户重新安装了应用时执行此操作。

Swift

let token = Messaging.messaging().fcmToken
print("FCM token: \(token ?? "")")

Objective-C

NSString *fcmToken = [FIRMessaging messaging].FCMToken;
NSLog(@"FCM registration token: %@", fcmToken);
在调用此委托方法后,就可以通过令牌属性(对于 Objective-C,是 FCMToken;对于 Swift,是 fcmToken)获得注册令牌。在调用此委托方法之前,上述属性可能为 nil。

监控令牌的生成

要在每次令牌更新时获得通知,请提供符合消息委托协议的委托。以下示例注册了此类委托,并添加了合适的委托方法:

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")

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

    // 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 注册令牌的字段中,输入您在本指南上一部分获得的注册令牌。

点击发送消息后,在后台中运行相应应用的指定客户端设备会在通知中心接收到该通知。

后续步骤

如果除了通知消息之外,您还要向应用添加其他更高级的行为,请参阅以下章节:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面