我在运行iOS 8.1的iPad 2中遇到有关APNS的问题。我在Google上搜索了几天,并尝试了所有可以找到的解决方案。但是我似乎无法解决这个问题。
我做了什么:
我想做的事:
我想在后台收到APNS时执行网络请求。我相信我可以使用beginBackgroundTaskWithExpirationHandler和其他东西很好地处理这一部分。但是,在调查中,我发现问题是由于app处于后台状态时未运行didReceiveRemoteNotification:fetchCompletionHandler所致。
问题:
didReceiveRemoteNotification:fetchCompletionHandler可以在应用程序处于前台时触发。但是只有在xcode仍在调试应用程序时,才会在后台触发。 这意味着,如果我拔下电缆(调试 session 已结束),它将无法再触发。如果我重新插回电源,也一样。无响应。
但是,与此同时,我仍然可以像在设备日志中看到的那样收到带有警报正文和声音的APNS(尽管该方法仍未触发)。
我尝试了“静默”推送通知的每种组合:声音=“”,警报=“”,等等。但是似乎没有任何效果。这里的专业人士有什么帮助吗?
谢谢你。
最佳答案
仔细检查“后台应用刷新”是否已打开。在旅行时将其关闭后,我遇到了一段时间。
另外,您不需要在didReceiveRemoteNotification:fetchCompletionHandler
内部使用后台任务,因为它已经在后台运行。完成网络请求后,只需确保调用适当的完成处理程序即可。
最后,由于常规通知不会唤醒您的应用并执行代码,因此不会在常规(非静默)通知中调用didReceiveRemoteNotification:fetchCompletionHandler
。
编辑:另一个令人费解的奇怪检查是通知帧数据中的优先级-link to Apple Documentation-详细信息的“优先级”命令F。当我这样做时,构建通知的我的Ruby gem默认情况下使用10,如果您仅使用“content-available”(内容可用),而别无其他,则认为这是不允许的。工作变得很忙,我从来没有使用5的优先级进行测试,但这可能会有所帮助。
关于ios - APNS : didReceiveRemoteNotification:fetchCompletionHandler did not run when app is in background (unless xcode is debugging),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33819444/