调用了 didRegisterForRemoteNotificationsWithDeviceToken 但未发送推送通知

Posted

技术标签:

【中文标题】调用了 didRegisterForRemoteNotificationsWithDeviceToken 但未发送推送通知【英文标题】:didRegisterForRemoteNotificationsWithDeviceToken is called but push notification not sent 【发布时间】:2017-07-11 02:40:34 【问题描述】:

我正在尝试在 ios 中实现推送通知。我已经成功地让它工作了一次。但现在我面临一个奇怪的问题。我已退出 XCode 并重新打开它,没有更改任何代码,我仍在获取 deviceToken,但现在我的设备上没有收到任何推送通知。我也在使用 Firebase 来获取通知,它也可以正常工作,但现在它给了我空白字符串作为设备令牌。

在 AppDelegate 中我使用以下代码:

    if #available(iOS 10.0, *) 
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: _, _ in )
     else 
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    

    application.registerForRemoteNotifications()

//This is triggered and I am getting the push notification token but using this instead of firebase token to send directly via APNS is also not working.
public func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
    Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)


//This is triggered but the token here is a blank string
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) 
    Messaging.messaging().subscribe(toTopic: "ios_topic")

这一直有效,直到我退出 XCode,但突然停止工作,没有任何代码更改。我尝试了一切,包括系统重启。有时,didRegisterForRemoteNotificationsWithDeviceToken 在全新安装期间会被调用两次,一次是在我授予权限之前,一次是在授予权限之后。

【问题讨论】:

【参考方案1】:

可能是因为设备令牌现在被解析为“32BYTES”。

在这里查看更多:

Swift 3 - device tokens are now being parsed as '32BYTES'

【讨论】:

以上是关于调用了 didRegisterForRemoteNotificationsWithDeviceToken 但未发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

未调用 UIcollectionView 的 didDeselectItemAt 但调用了 didSelectItemAt?

未调用 didEnterRegion 但在目标 C 中调用了 didExitRegion

为啥我的列表项调用了它不应该调用的函数?

调用的目标发生了异常这个异常怎么处理

startForegroundService() 没有调用 startForeground(),但确实调用了

即使调用了 didDetermineState,也没有调用 didrangebeacons