在iOS和Android中实施FCM

时间:2019-10-08 05:41:30

标签: android ios firebase firebase-cloud-messaging

我正在开发一个应用程序。我在其中使用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端显示。

0 个答案:

没有答案