fetchCompletionHandler

fetchCompletionHandler

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

我做了什么:

  • 启用的功能:远程通知,后台获取
  • 我在aps有效负载中有“content-available = 1”。
  • 我在didReceiveRemoteNotification:fetchCompletionHandler中使用了NSLog(),因此我可以在设备日志中清楚地看到该方法是否已触发

  • 我想做的事:

    我想在后台收到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/

    10-09 01:32