要开始使用 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 中启用推送通知。
- 使用您的 Google 帐户登录 Firebase 。
如果您还没有 Xcode 项目并且只想试用 Firebase 产品,您可以下载我们的快速入门示例之一。
创建一个 Firebase 项目
在将 Firebase 添加到您的 Apple 应用程序之前,您需要创建一个 Firebase 项目以连接到您的应用程序。访问了解 Firebase 项目以了解有关 Firebase 项目的更多信息。
向 Firebase 注册您的应用
要在您的 Apple 应用程序中使用 Firebase,您需要在 Firebase 项目中注册您的应用程序。注册您的应用程序通常称为将您的应用程序“添加”到您的项目中。
转到Firebase 控制台。
在项目概览页面的中央,单击iOS+图标以启动设置工作流程。
如果您已将应用程序添加到 Firebase 项目,请单击添加应用程序以显示平台选项。
在bundle ID字段中输入您应用程序的 bundle ID。
捆绑包 ID唯一标识 Apple 生态系统中的应用程序。
查找您的包 ID:在 Xcode 中打开您的项目,在项目导航器中选择顶级应用程序,然后选择常规选项卡。
Bundle Identifier字段的值是包 ID(例如,
com.yourcompany.yourproject
)。请注意,bundle ID 值区分大小写,在您的 Firebase 项目中注册后,无法更改此 Firebase 应用程序的值。
(可选)输入其他应用信息:应用昵称和App Store ID 。
应用昵称:仅在 Firebase 控制台中对您可见的内部便利标识符
App Store ID :由 Firebase 动态链接用于将用户重定向到您的 App Store 页面,由 Google Analytics 用于将转换事件导入 Google Ads 。如果您的应用还没有 App Store ID,您可以稍后在项目设置中添加 ID。
单击注册应用程序。
添加 Firebase 配置文件
单击下载 GoogleService-Info.plist以获取您的 Firebase Apple 平台配置文件 (
GoogleService-Info.plist
)。Firebase 配置文件包含项目的唯一但非机密标识符。要了解有关此配置文件的更多信息,请访问了解 Firebase 项目。
您可以随时再次下载您的Firebase 配置文件。
确保配置文件名未附加其他字符,例如
(2)
。
将配置文件移动到 Xcode 项目的根目录中。如果出现提示,请选择将配置文件添加到所有目标。
如果您的项目中有多个 bundle ID,则必须将每个 bundle ID 与 Firebase 控制台中注册的应用相关联,以便每个应用都可以拥有自己的GoogleService-Info.plist
文件。
将 Firebase SDK 添加到您的应用
使用 Swift Package Manager 安装和管理 Firebase 依赖项。
- 在 Xcode 中,打开您的应用程序项目,导航至File > Add Packages 。
- 出现提示时,添加 Firebase Apple 平台 SDK 存储库:
- 选择 Firebase 云消息传递库。
- 为了获得 Firebase 云消息传递的最佳体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将适用于 Google Analytics 的 Firebase SDK 添加到您的应用程序中。您可以选择没有 IDFA 集合或有 IDFA 集合的库。
- 完成后,Xcode 将自动开始在后台解析和下载您的依赖项。
https://github.com/firebase/firebase-ios-sdk
上传您的 APNs 身份验证密钥
将您的 APNs 身份验证密钥上传到 Firebase。如果您还没有 APNs 身份验证密钥,请确保在Apple Developer Member Center中创建一个。
在 Firebase 控制台的项目内,选择齿轮图标,选择Project Settings ,然后选择Cloud Messaging选项卡。
在iOS app configuration下的APNs authentication key中,点击Upload按钮。
浏览到您保存密钥的位置,选择它,然后单击打开。添加密钥的密钥 ID(可在Apple Developer Member Center中获得)并单击Upload 。
在您的应用中初始化 Firebase
您需要将 Firebase 初始化代码添加到您的应用程序中。导入 Firebase 模块并配置共享实例,如下所示:
- 在您的
UIApplicationDelegate
中导入FirebaseCore
模块,以及您的应用委托使用的任何其他Firebase 模块。例如,要使用 Cloud Firestore 和身份验证:斯威夫特用户界面
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
迅速
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
目标-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- 在您的应用委托的
application(_:didFinishLaunchingWithOptions:)
方法中配置一个FirebaseApp
共享实例:斯威夫特用户界面
// Use Firebase library to configure APIs FirebaseApp.configure()
迅速
// Use Firebase library to configure APIs FirebaseApp.configure()
目标-C
// Use Firebase library to configure APIs [FIRApp configure];
- 如果您使用的是 SwiftUI,则必须创建一个应用程序委托并通过
UIApplicationDelegateAdaptor
或NSApplicationDelegateAdaptor
将其附加到您的App
结构。您还必须禁用应用委托调配。有关详细信息,请参阅SwiftUI 说明。斯威夫特用户界面
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
注册远程通知
在启动时或应用程序流程中的所需时间点,注册您的应用程序以获取远程通知。如图所示调用registerForRemoteNotifications
:迅速
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
目标-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
访问注册令牌
要向特定设备发送消息,您需要知道该设备的注册令牌。由于您需要在通知编辑器的字段中输入令牌才能完成本教程,因此请务必复制令牌或在检索后安全地存储它。
默认情况下,FCM SDK 在应用启动时为客户端应用实例生成一个注册令牌。与 APNs 设备令牌类似,此令牌允许您向应用程序的任何特定实例发送有针对性的通知。
与 Apple 平台通常在应用程序启动时提供 APNs 设备令牌的方式相同,FCM 通过FIRMessagingDelegate
的messaging:didReceiveRegistrationToken:
方法提供注册令牌。 FCM SDK 在初始应用程序启动期间以及令牌更新或失效时检索新令牌或现有令牌。在所有情况下,FCM SDK 都会使用有效令牌调用messaging:didReceiveRegistrationToken:
在以下情况下,注册令牌可能会更改:
- 该应用程序已在新设备上恢复
- 用户卸载/重新安装应用程序
- 用户清除应用程序数据。
设置消息代理
要接收注册令牌,请实施消息传递委托协议并在调用[FIRApp configure]
后设置FIRMessaging
的delegate
属性。例如,如果您的应用程序委托符合消息传递委托协议,您可以将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. }
或者,您可以监听名为kFIRMessagingRegistrationTokenRefreshNotification
的NSNotification
而不是提供委托方法。令牌属性始终具有当前令牌值。
发送通知消息
在目标设备上安装并运行该应用程序。在 Apple 设备上,您需要接受接收远程通知的权限请求。
确保应用程序在设备的后台运行。
在 Firebase 控制台中,打开消息页面。
如果这是您的第一条消息,请选择创建您的第一个营销活动。
- 选择Firebase Notification messages并选择Create 。
否则,在“活动”选项卡上,选择“新建活动” ,然后选择“通知”。
输入消息文本。所有其他字段都是可选的。
从右窗格中选择发送测试消息。
在标记为添加 FCM 注册令牌的字段中,输入您在本指南上一节中获得的注册令牌。
选择测试。
选择测试后,目标客户端设备(应用程序在后台)应该会收到通知。
要深入了解向您的应用程序发送的消息,请参阅FCM 报告仪表板,它记录了在 Apple 和 Android 设备上发送和打开的消息数量,以及 Android 应用程序的“印象”(用户看到的通知)数据。
下一步
要超越通知消息并向您的应用程序添加其他更高级的行为,请参阅: