未插入设备时未调用iOS8.1.2 didReceiveRemoteNotification方法

时间:2015-01-06 17:02:10

标签: objective-c apple-push-notifications ios8.1

在iOS版本8.1.2中,我发现了一个非常奇怪的问题:
我实现了以下方法来处理appDelegate中的推送信息

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

如果您的设备未插入,则不会调用此方法。

2 个答案:

答案 0 :(得分:2)

如果您环顾四周,您会发现其他人认为这将是iOS 7.1测试版中的一个错误,已在7.1版本中修复,但它可能与任何测试版无关,Testflight,具体8.1.2版本等,就像你在答案中说的那样。我很确定this是唯一正确的答案。顺便说一下,我有同样的问题,但在8.1.3中,所以我想它也会再次出现在你身上。

删除应用后,重启手机并安装应用,didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:被称为完全正常(这解释了"使用tesflight!","在7.1中.x它可以工作!"等等,但是如果由于接收到远程通知或者没有按时调用完成处理程序而进行太多计算,系统将不再喜欢你并且稍后开始调用该方法当它想要时,通常是在收到通知后0-30分钟,或者说很长时间(见下面的更新)。对我来说,有时这是在第一次远程通知之后发生的。当然,除非插入设备,否则它会更加可靠。

重新连接(插入)设备后,系统可能会调用您的方法,通常需要15分钟才能调用它,或者如果您在一小时后推送相同的通知,它可能会立即工作但是也不确定。这真的是一种痛苦,但不要把它想象成一种固定的东西,它就像苹果公司创造它一样。

<强>更新: 它最终会被调用。我在18.13h发送了远程通知,直到第二天09.41h才调用didReceiveRemoteNotification:fetchCompletionHandler:。所以在我的情况下,调用该方法需要15.5小时。 在我的情况下,原因可能是我使用远程通知在后台启动和停止位置跟踪,这是很重要的事情。

答案 1 :(得分:0)

关于此问题的fount another answer之后,我确认这确实是iOS 8.1.2中的错误。 我很惊讶网上没有太多东西。

但通过我的测试,它与配置文件无关,使用Apple的TestFlight不起作用。