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

use*_*662 5 apple-push-notifications ios

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

我做了什么:

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

我想做的事:

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

问题:

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

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

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

谢谢.

cuo*_*456 3

仔细检查后台应用程序刷新是否已打开。我在旅行时将其关闭一段时间后遇到了这个问题。

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

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


编辑:另一个需要检查的奇怪的模糊的事情是通知框架数据中的优先级 -链接到 Apple 文档- 命令 F 表示“优先级”以了解详细信息。当我这样做时,我构建通知的 Ruby gem 默认使用 10,如果您只使用“内容可用”而不使用其他任何东西,那么这应该是不允许的。工作很忙,我从来没有使用优先级 5 来测试它,但这可能会有所帮助。