我在运行iOS 8.1的iPad 2中遇到有关APNS的问题。我在Google上搜索了几天,并尝试了我能找到的所有解决方案。但是我似乎无法解决这个问题。
我做了什么:
我想做什么:
我想在后台收到APNS时执行网络请求。我相信我可以使用beginBackgroundTaskWithExpirationHandler和stuff来处理这部分。但是,在调查中我发现问题是由于didReceiveRemoteNotification:当app处于后台状态时,没有运行fetchCompletionHandler。
问题:
didReceiveRemoteNotification:当app在前台时,fetchCompletionHandler可以触发。但是,当xcode仍在调试app时,仅在后台触发。这意味着如果我拔掉电缆(调试会话结束),它就不能再触发了。如果我把它重新插回来也一样。没有回应。
然而,与此同时,我仍然可以收到带有警报正文和声音的APNS(虽然该方法仍未触发),正如我在设备日志中看到的那样。
我尝试了"沉默"的每一个组合。推送通知:声音="",警报=""等等但似乎没有任何效果。这里有专业人士的帮助吗?
谢谢。
答案 0 :(得分:1)
仔细检查后台应用程序刷新是否已打开。在旅途中将其关闭后,我遇到了一段时间。
此外,您不需要在didReceiveRemoteNotification:fetchCompletionHandler
内部使用后台任务,因为它已在后台运行。只需确保在完成网络请求后调用相应的完成处理程序。
最后,didReceiveRemoteNotification:fetchCompletionHandler
不会在常规(非静默)通知上调用,因为常规通知不会唤醒您的应用并执行代码。
编辑:要检查的另一个奇怪的模糊事物是通知帧数据中的优先级 - link to Apple Documentation - 命令F表示详细信息的“优先级”。当我这样做时,我构建通知的Ruby gem默认使用10,如果你只使用'content-available'而没有别的,那么这个假设是不允许的。事情忙于工作,我从来没有使用5的优先级来测试它,但它可能有所帮助。