我正在使用FCM来获取远程推送通知。
因此,在从以下回调中获取第一个 FCM 令牌时,我能够触发通知并正确接收它们。
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
重新启动应用程序后,我获得了一个新的 FCM 令牌。新令牌不会触发任何通知。
根据文档,我遵循的先决条件: https://firebase.google.com/docs/cloud-messaging/ios/client
使用 FirebaseMessaging (3.3.0)
所以我找到了解决方案,每次从回调中获得FCM新令牌后。
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
我们必须重新注册远程推送通知。
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.badge, .alert, .sound]) {
(granted, error) in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
} else {
//print("APNS Registration failed")
//print("Error: (String(describing: error?.localizedDescription))")
}
}
} else {
let type: UIUserNotificationType = [UIUserNotificationType.badge, UIUserNotificationType.alert, UIUserNotificationType.sound]
let setting = UIUserNotificationSettings(types: type, categories: nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()
}
FirebaseMessaging 将使用设备令牌重新配置新的 FCM 令牌。
注意:不需要,需要显式设置设备令牌。由于 FirebaseMessaging 使用的是方法重排,因此它会自动从委托方法中检索它。
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)