某些设备无法生成设备令牌?

时间:2015-09-03 06:31:19

标签: ios swift apple-push-notifications appdelegate devicetoken

我注意到某些设备不会为推送通知生成设备令牌。我一直在使用以下代码生成设备令牌并实现了  didRegisterForRemoteNotificationsWithDeviceToken方法

        var types: UIUserNotificationType = UIUserNotificationType.Badge |
            UIUserNotificationType.Alert |
            UIUserNotificationType.Sound
        var settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )
        application.registerUserNotificationSettings( settings )
        application.registerForRemoteNotifications()

我获得了某些设备的设备令牌。但是我认为由于缺乏互联网连接而没有为某些设备生成设备令牌。可以肯定的是,我关闭了互联网连接,并确保这是我的问题,但它成功生成令牌?

据我所知,我的应用程序使用苹果服务器请求设备令牌......

为什么会发生这种情况。设备令牌是如何生成的?

我真的不需要互联网连接来生成设备令牌

4 个答案:

答案 0 :(得分:3)

必须注册设备进行远程连接

var types: UIUserNotificationType = UIUserNotificationType.Badge |
        UIUserNotificationType.Alert |
        UIUserNotificationType.Sound
    var settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )
    application.registerUserNotificationSettings( settings )
    application.registerForRemoteNotifications()

以上代码仅在您拥有互联网时才有效

当您在此功能didRegisterForRemoteNotificationsWithDeviceToken

中获得设备令牌时,您可以执行的操作

将其存储在NSUserDefault中,如果没有从NSUserDefault获取设备令牌,请立即检查您是否具有上述方法的互联网连接。 要检查internetConnection,您可以使用Reachability类从https://github.com/ashleymills/Reachability.swift

获取它

答案 1 :(得分:1)

如果您的应用程序先前已注册,则调用 ''<== assuming cell contains value 1 monthSel.SelectByText "10" 'or monthSel.SelectByText ActiveSheet.Cells(2,1).value daySel.SelectByValue "29" yearSel.SelectByValue 2019 'different ways of doing same thing shown 会导致操作系统将设备令牌立即传递给委托,而不会产生额外的开销。

  

否则,更改WIFI

希望有帮助。

答案 2 :(得分:0)

确保您没有意外点击“不允许”#39;显示推送通知权限对话框时。如果是这种情况,您必须转到设置并手动为您的应用启用推送通知,然后您将获得设备令牌。

对于互联网连接问题:请求设备令牌确实需要互联网连接才能将您的设备注册到APNS。但是,一旦您注册了您的设备,其他所有后续呼叫都将为您提供设备令牌而无需互联网连接,因为它无法访问APNS服务器:

你可以看看它:

  

通过请求设备令牌并将其传递给提供者   您的应用程序启动时,您可以帮助确保提供程序   拥有设备的当前令牌。如果用户将备份还原到   设备或计算机,而不是为其创建备份的设备或计算机   (例如,用户将数据迁移到新设备或计算机),他   或者她必须至少启动一次申请才能收到   再次通知。如果用户将备份数据还原到新设备   或计算机,或重新安装操作系统,设备令牌   变化。此外,永远不要缓存设备令牌并将其提供给您   供应商;始终在需要时从系统获取令牌。   如果您的申请先前已注册,请致电   registerForRemoteNotificationTypes:操作系统中的结果   将设备令牌立即传递给代理人而不会产生任何影响   额外的开销。

答案 3 :(得分:0)

添加方法:

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) 
{
  print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error)
}

所以你可以找出错误是什么。我已经遇到了类似的问题。