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

时间:2011-07-08 23:47:50

标签: iphone objective-c ios cocoa-touch push-notification

我通过调用以下代码来注册推送通知:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];

但在极少数情况下,代理人不会被召唤:

- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iNewDeviceToken {

甚至没有跟随方法被调用:

- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError {

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

有任何线索吗?

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

线索就在那里:当失败时,你得到一个NSError个实例。因此,要找出错误原因,请检查NSError并查看它告诉您的内容。

你应该至少在你的应用程序中处理这种情况,例如显示错误消息“未能注册应用程序,请再试一次......”。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

还有一件事:如果你的手机被root / jail破坏用于其他网络等,你就会遇到问题。我的手机扎根了,没有一个代表被叫。我有一个同事把它放在iPad上,它工作正常,所以我知道代码没问题。

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