我正在开发一个应用程序。我在其中使用FCM。我已经完成了在Android中使用FCM的工作。现在,我正在使用同一应用程序的iOS版本。
我正在使用this API从服务器发送以下消息
{
"message":
{
"token":"57e4f5984b5b42d34710c26a...16fe0b4bf25f49eec106bc6",
"notification":{
"title":"Tusday",
"body":"Testing on 9:55 AM"
}
}
}
现在,这是我想在两面都显示的东西,android确实可以接收它,但是在iOS中我仍然无法接收它。
以下是我的一些困惑:
FCM注册令牌VS设备令牌 哪一个必须发送到服务器,服务器应使用该服务器将通知发送到iOS设备
在android中,onTokenRefresh是我们可以获取令牌并将其发送到应用程序服务器的唯一方法,但是在iOS中,有两种不同的方法,并且我们可以获取两种类型的令牌:APNs令牌和Registration令牌。但我相信以下方法会返回FCM注册令牌
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print(fcmToken)
}
我想知道哪个令牌需要发送到应用程序服务器?
代码实现
我只是在使用FCM的所有方法进行打印,但是无论是在后台模式还是前台模式下,它们都不起作用
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Did Receive")
completionHandler()
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("Will Present")
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
print("Did Receive remote notification")
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
print("Did Receive device token")
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
}
/// Register for push notifications
func registerForPushNotification(){
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
if error == nil{
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
} else {
let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
UIApplication.shared.registerForRemoteNotifications()
}
}
}
服务器端缺少什么? 正如我上面所说的,我如上所述将相同的有效负载发送到android和iOS,然后为什么不发送它。我尝试使用上述fcm API发送它。
我缺少什么?为什么在使用控制台发送时,为什么要发送?我检查了发件人ID和服务器密钥是否都相同。可能是什么问题?我是否在iOS方面缺少某些东西,或者这是服务器故障?
注意:在服务器端,我可以看到消息已成功发送,但从未在iOS端显示。