获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

向后台 Apple 应用程序发送测试消息

要开始使用 FCM,请构建最简单的用例:当应用程序在设备后台运行时,将测试通知消息从通知编辑器发送到开发设备。此页面列出了实现此目的的所有步骤,从设置到验证——如果您已为 FCM设置 Apple 客户端应用程序,它可能涵盖您已经完成的步骤。

将 Firebase 添加到您的 Apple 项目

如果您已经为您的应用启用了其他 Firebase 功能,本部分涵盖您可能已经完成的任务。具体对于 FCM,您需要上传您的 APNs 身份验证密钥注册远程通知

先决条件

  • 安装以下内容:

    • Xcode 13.3.1 或更高版本
  • 确保您的项目满足以下要求:

    • 您的项目必须针对这些平台版本或更高版本:
      • iOS 11
      • macOS 10.13
      • 电视操作系统 12
      • watchOS 6
  • 设置物理 Apple 设备来运行您的应用程序,并完成以下任务:

    • 为您的Apple Developer 帐户获取 Apple Push Notification Authentication Key。
    • App > Capabilities下的 XCode 中启用推送通知。

如果您还没有 Xcode 项目并且只想试用 Firebase 产品,您可以下载我们的快速入门示例之一。

创建一个 Firebase 项目

在将 Firebase 添加到您的 Apple 应用程序之前,您需要创建一个 Firebase 项目以连接到您的应用程序。访问了解 Firebase 项目以了解有关 Firebase 项目的更多信息。

向 Firebase 注册您的应用

要在您的 Apple 应用程序中使用 Firebase,您需要在 Firebase 项目中注册您的应用程序。注册您的应用程序通常称为将您的应用程序“添加”到您的项目中。

  1. 转到Firebase 控制台

  2. 在项目概览页面的中央,单击iOS+图标以启动设置工作流程。

    如果您已将应用程序添加到 Firebase 项目,请单击添加应用程序以显示平台选项。

  3. bundle ID字段中输入您应用程序的 bundle ID。

  4. (可选)输入其他应用信息:应用昵称App Store ID

  5. 单击注册应用程序

添加 Firebase 配置文件

  1. 单击下载 GoogleService-Info.plist以获取您的 Firebase Apple 平台配置文件 ( GoogleService-Info.plist )。

  2. 将配置文件移动到 Xcode 项目的根目录中。如果出现提示,请选择将配置文件添加到所有目标。

如果您的项目中有多个 bundle ID,则必须将每个 bundle ID 与 Firebase 控制台中注册的应用相关联,以便每个应用都可以拥有自己的GoogleService-Info.plist文件。

将 Firebase SDK 添加到您的应用

使用 Swift Package Manager 安装和管理 Firebase 依赖项。

  1. 在 Xcode 中,打开您的应用程序项目,导航至File > Add Packages
  2. 出现提示时,添加 Firebase Apple 平台 SDK 存储库:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. 选择 Firebase 云消息传递库。
  5. 为了获得 Firebase 云消息传递的最佳体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将适用于 Google Analytics 的 Firebase SDK 添加到您的应用程序中。您可以选择没有 IDFA 集合或有 IDFA 集合的库。
  6. 完成后,Xcode 将自动开始在后台解析和下载您的依赖项。

上传您的 APNs 身份验证密钥

将您的 APNs 身份验证密钥上传到 Firebase。如果您还没有 APNs 身份验证密钥,请确保在Apple Developer Member Center中创建一个。

  1. 在 Firebase 控制台的项目内,选择齿轮图标,选择Project Settings ,然后选择Cloud Messaging选项卡。

  2. iOS app configuration下的APNs authentication key中,点击Upload按钮。

  3. 浏览到您保存密钥的位置,选择它,然后单击打开。添加密钥的密钥 ID(可在Apple Developer Member Center中获得)并单击Upload

在您的应用中初始化 Firebase

您需要将 Firebase 初始化代码添加到您的应用程序中。导入 Firebase 模块并配置共享实例,如下所示:

  1. 在您的UIApplicationDelegate中导入FirebaseCore模块,以及您的应用委托使用的任何其他Firebase 模块。例如,要使用 Cloud Firestore 和身份验证:

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    目标-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 在您的应用委托的application(_:didFinishLaunchingWithOptions:)方法中配置一个FirebaseApp共享实例:

    迅速

    // 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 设备令牌类似,此令牌允许您向应用程序的任何特定实例发送有针对性的通知。

与 Apple 平台通常在应用程序启动时提供 APNs 设备令牌的方式相同,FCM 通过FIRMessagingDelegatemessaging:didReceiveRegistrationToken:方法提供注册令牌。 FCM SDK 在初始应用程序启动期间以及令牌更新或失效时检索新令牌或现有令牌。在所有情况下,FCM SDK 都会使用有效令牌调用messaging:didReceiveRegistrationToken:

在以下情况下,注册令牌可能会更改:

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

设置消息代理

要接收注册令牌,请实施消息传递委托协议并在调用[FIRApp configure]后设置FIRMessagingdelegate属性。例如,如果您的应用程序委托符合消息传递委托协议,您可以将application:didFinishLaunchingWithOptions:上的委托设置为其自身。

迅速

Messaging.messaging().delegate = self

目标-C

[FIRMessaging messaging].delegate = self;

获取当前注册令牌

注册令牌通过messaging:didReceiveRegistrationToken:方法传递。通常每个应用程序以注册令牌开始调用此方法一次。调用此方法时,是执行以下操作的理想时机:

  • 如果注册令牌是新的,请将其发送到您的应用程序服务器。
  • 将注册令牌订阅到主题。这仅适用于新订阅或用户重新安装应用程序的情况。

您可以使用token(completion:)直接检索令牌。如果令牌检索以任何方式失败,则会提供非空错误。

迅速

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

或者,您可以监听名为kFIRMessagingRegistrationTokenRefreshNotificationNSNotification而不是提供委托方法。令牌属性始终具有当前令牌值。

发送通知消息

  1. 在目标设备上安装并运行该应用程序。在 Apple 设备上,您需要接受接收远程通知的权限请求。

  2. 确保应用程序在设备的后台运行。

  3. 在 Firebase 控制台中,打开消息页面

  4. 如果这是您的第一条消息,请选择创建您的第一个营销活动

    1. 选择Firebase Notification messages并选择Create
  5. 否则,在“活动”选项卡上,选择“新建活动” ,然后选择“通知”。

  6. 输入消息文本。所有其他字段都是可选的。

  7. 从右窗格中选择发送测试消息

  8. 在标记为添加 FCM 注册令牌的字段中,输入您在本指南上一节中获得的注册令牌。

  9. 选择测试

选择测试后,目标客户端设备(应用程序在后台)应该会收到通知。

要深入了解向您的应用程序发送的消息,请参阅FCM 报告仪表板,它记录了在 Apple 和 Android 设备上发送和打开的消息数量,以及 Android 应用程序的“印象”(用户看到的通知)数据。

下一步

要超越通知消息并向您的应用程序添加其他更高级的行为,请参阅: