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

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

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

但在一些极less数情况下,委托没有被调用:

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

甚至没有被调用的方法:

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

这可能是什么原因。 一旦我收到设备令牌,我将继续使用我的应用程序stream程。 所以,在一些罕见的情况下我的应用程序hungs。

任何线索?

根据文档,在设备与推送服务器保持连接之前,不会发生任何callback。 所以如果没有wifi或数据连接可用,callback不会发生 – 而苹果不认为这是一个错误的条件。 据我所知,唯一可能导致didFail …callback的错误是一个不正确的证书/应用程序权限问题(一个开发问题),或者用户拒绝了权限(虽然我只是偶尔能够重现此通过更改date和closures手机)。

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

您应该至less应该在您的应用程序中处理这种情况,例如沿着“无法注册应用程序,请再试一次…”的方向显示错误消息。

还有一件事情:如果你的电话是根植/监狱与其他networking等使用,你将有问题。 我的电话根深蒂固,没有任何代表被叫。 我有一个同事把它放在他们的iPad,它运作良好,所以我知道代码是好的。

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

您必须在供应configuration文件中启用推送通知,然后使用应用程序标识在Developer Portal中进行设置。 那么它应该工作。