APNS:didReceiveRemoteNotification:当app在后台时,fetchCompletionHandler没有运行(除非xcode正在调试)

我在运行iOS 8.1的iPad 2中遇到了关于APNS的问题。 我在Google上搜索了几天,并尝试了我能找到的所有解决方案。 但是我似乎无法解决这个问题。

我做了什么:

  1. 启用的function:远程通知,后台提取
  2. 我在aps有效载荷中有“content-available = 1”。
  3. 我在didReceiveRemoteNotification中使用了NSLog():fetchCompletionHandler所以我可以清楚地看到设备日志中是否触发了该方法

我想做的事:

我想在后台收到APNS时执行网络请求。 我相信我可以使用beginBackgroundTaskWithExpirationHandler和stuff来处理这部分。 但是,在调查中我发现问题是由于didReceiveRemoteNotification:当app处于后台状态时,没有运行fetchCompletionHandler。

问题:

didReceiveRemoteNotification:当app在前台时,fetchCompletionHandler可以触发。 但是当xcode仍在调试应用程序时,仅在后台触发。 这意味着如果我拔掉电缆(调试会话结束),它就不能再触发了。 如果我把它重新插回来也一样。没有回应。

但是,与此同时,我仍然可以收到带有警报正文和声音的APNS(虽然该方法仍未触发),正如我在设备日志中看到的那样。

我尝试了“静音”推送通知的每一个组合:sound =“”,alert =“”等。但似乎没有任何效果。 这里有专业人士的帮助吗?

谢谢。

仔细检查后台应用程序刷新是否已打开。 旅行后把它关掉后,我跑了一会儿。

此外,您不需要在didReceiveRemoteNotification:fetchCompletionHandler使用后台任务,因为它已在后台运行。 只需确保在完成网络请求后调用相应的完成处理程序。

最后, didReceiveRemoteNotification:fetchCompletionHandler将不会在常规(非静默)通知上被调用,因为常规通知不会唤醒您的应用并执行代码。


编辑:另一个奇怪的模糊不清的事情是通知框架数据中的优先级 – 链接到Apple文档 – 命令F为’优先级’的详细信息。 当我这样做时,构建通知的Ruby gem在默认情况下使用10,如果你只使用’content-available’而没有别的,那么这个假设是不允许的。 事情忙于工作,我从来没有使用5的优先级来测试它,但它可能会有所帮助。