推送通知委托回调没有被调用

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 

这可能是什么原因。收到设备令牌后,我将继续执行我的应用程序流程。因此,在一些罕见的情况下,我的应用会挂起。

有什么线索吗?

【问题讨论】:

didRegisterForRemoteNotificationsWithDeviceTokenregisterForRemoteNotificationTypes 也被调用时被调用。 【参考方案1】:

根据文档,在设备与推送服务器建立持久连接之前,不会发生任何回调。因此,如果没有可用的 wifi 或数据连接,回调将不会发生 - 苹果不会将此视为错误情况。据我所知,唯一可能导致 didFail... 回调的错误是不正确的证书/应用程序权限问题(开发问题),或者用户拒绝了权限(尽管我只能偶尔重现这个更改日期并关闭手机)。

【讨论】:

【参考方案2】:

线索就在那里:当它失败时你会得到一个NSError 实例。所以要弄清楚它为什么出错,检查NSError 看看它告诉你什么。

您可能至少也应该在您的应用中处理这种情况,例如显示错误消息“无法注册应用程序,请重试...”。

【讨论】:

他说两个处理程序都没有被调用,所以他没有收到 NSError ......我现在遇到了同样的问题,它适用于 5 台设备,但第 6 台设备没有调用 didRegister 或didFailToRegister【参考方案3】:

还有一件事:如果您的手机已root/越狱以用于其他网络等,您将遇到问题。我的手机已经root,没有一个代表被叫到。我让一个同事把它放在他们的 iPad 上,效果很好,所以我知道代码没问题。

所以,我在手机上重新安装了操作系统,它开始工作了。

【讨论】:

【参考方案4】:

您必须在配置文件中启用推送通知,并在 Developer Portal 中使用 App Id 进行设置。那么它应该可以工作了。

【讨论】:

以上是关于推送通知委托回调没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

注册推送通知

通话期间未调用远程通知回调

推送通知的“查看”委托

应用在前台运行时收到 iOS 推送通知

在推送服务中推送尖锐不发送通知和无回调

如果应用程序处于后台模式,则为推送通知调用啥委托