推送通知委托回调没有被调用
Posted
技术标签:
【中文标题】推送通知委托回调没有被调用【英文标题】:Push Notification delegate call backs are not getting called 【发布时间】:2011-07-08 23:47:49 【问题描述】:我正在通过调用以下代码来注册推送通知:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];
但在极少数情况下,不会调用以下委托:
- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iNewDeviceToken
甚至没有调用以下方法:
- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError
这可能是什么原因。收到设备令牌后,我将继续执行我的应用程序流程。因此,在一些罕见的情况下,我的应用会挂起。
有什么线索吗?
【问题讨论】:
didRegisterForRemoteNotificationsWithDeviceToken
在registerForRemoteNotificationTypes
也被调用时被调用。
【参考方案1】:
根据文档,在设备与推送服务器建立持久连接之前,不会发生任何回调。因此,如果没有可用的 wifi 或数据连接,回调将不会发生 - 苹果不会将此视为错误情况。据我所知,唯一可能导致 didFail... 回调的错误是不正确的证书/应用程序权限问题(开发问题),或者用户拒绝了权限(尽管我只能偶尔重现这个更改日期并关闭手机)。
【讨论】:
【参考方案2】:线索就在那里:当它失败时你会得到一个NSError
实例。所以要弄清楚它为什么出错,检查NSError
看看它告诉你什么。
您可能至少也应该在您的应用中处理这种情况,例如显示错误消息“无法注册应用程序,请重试...”。
【讨论】:
他说两个处理程序都没有被调用,所以他没有收到 NSError ......我现在遇到了同样的问题,它适用于 5 台设备,但第 6 台设备没有调用 didRegister 或didFailToRegister【参考方案3】:还有一件事:如果您的手机已root/越狱以用于其他网络等,您将遇到问题。我的手机已经root,没有一个代表被叫到。我让一个同事把它放在他们的 iPad 上,效果很好,所以我知道代码没问题。
所以,我在手机上重新安装了操作系统,它开始工作了。
【讨论】:
【参考方案4】:您必须在配置文件中启用推送通知,并在 Developer Portal 中使用 App Id 进行设置。那么它应该可以工作了。
【讨论】:
以上是关于推送通知委托回调没有被调用的主要内容,如果未能解决你的问题,请参考以下文章