我正在设置Firebase Cloud Messaging
以便将通知发送到iOS应用。
我希望能够向所有接受接收通知的用户发送通知。
在阅读和试验了很多之后,我的理解是(对于我的用例)我应该设置某种通用主题,然后将每个通知发送给该主题。
我的问题是:如何首先创建一个主题,然后如何在我的iOS Swift应用程序中注册(客户端)一个主题?
尽管我尝试浏览网络以获取有关该信息,但我发现的内容并不多。
有关信息,我正在使用Xcode版本10.1,iOS 12.1和Swift 4.2。
答案 0 :(得分:2)
第1步:设置Firebase
如果您尚未将Firebase添加到您的项目中,请在此处进行全部记录: https://firebase.google.com/docs/ios/setup
您将需要开始配置Firebase。对于我的项目,我在应用程序启动时在AppDelegate中启动了配置。
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self
...
}
...
}
第2步:请求授权
假设您已在Apple Developer Portal和Firebase Cloud Messaging设置上配置了所有APNs身份验证密钥/证书,
https://developer.apple.com/account/ios/certificate/ https://console.firebase.google.com/u/0/project/FIREBASE_PROJECT_NAME/settings/cloudmessaging/ios:APP_BUNDLE_ID
接下来,您将需要请求设备上的推送通知的授权。我已将其放置在项目的前几个UIViewController中。
class FirstViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { (success, error) in
guard success else { return }
UIApplication.shared.registerForRemoteNotifications()
})
}
}
第3步:设备令牌
在步骤2中注册远程通知时:
UIApplication.shared.registerForRemoteNotifications()
您将需要在AppDelegate中实现此委托函数:
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {
...
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().apnsToken = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
}
...
}
请注意,收到的deviceToken在NSData中,而Firebase所需的apnsToken在String中。
第4步:主题订阅
还记得我们在步骤1中设置为AppDelegate的委托引用吗?
Messaging.messaging().delegate = self
您将需要实现其委托功能,以使应用知道Firebase确实已收到令牌,并且可以预订主题。
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {
...
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
Messaging.messaging().subscribe(toTopic: "/topics/example")
}
...
}
第5步:验证
检查您的应用是否已成功订阅主题的一种简单方法是通过Firebase控制台发送推送通知。
https://console.firebase.google.com/u/0/project/FIREBASE_PROJECT_NAME/notification