iOS后台获取仅适用于调试器

时间:2016-02-12 12:23:50

标签: ios notifications apple-push-notifications push

我一直在看这几天,没有取得任何进展。我开发了一个小型测试iOS(9.2.1)应用程序,它接收来自Azure通知中心的推送通知。只要应用程序通过xcode启动并处于调试模式,一切似乎都能正常工作,包括后台通知推送。

我通过以下回调收到的每个通知都只是将文件写入设备上的文档文件夹。如果我使用xcode设备资源管理器,我可以看到这些文件出现

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    makefile(random file name based on timestamp);
    completionHandler(UIBackgroundFetchResult.NewData);
}

我还在plist文件的UIBackgroundModes部分启用了以下模式

  • 远程通知

我发送给ANS服务器的paypload是:

"aps":{ "sound":"default", "content-available":1 }

就像我上面提到的,只要应用程序通过xcode运行,我就可以按下主页按钮,但它会进入后台并且它会收到推送数据。但是,如果我断开USB电缆,它将停止接收后台推送事件。

值得注意的是,内置的操作系统通知确实出现了。有谁知道这里可能出现什么问题?

修改 如果我通过xcode启动应用程序,请拔下USB,发送通知 - 没有任何反应。一旦我重新连接到xcode,它就进来了,代码就运行了!这与认证(开发/生产)有关吗

1 个答案:

答案 0 :(得分:0)

content-available键表示iOS应将此视为静默通知。静默通知是静默的-不会显示警报,徽章或播放声音。

同时包含content-available面向用户的功能(例如声音或警报)的通知有效载荷可以被视为其中一种。行为是不确定的-通知应该是静默的,或者不是静默的。

静默通知由application(didReceiveRemoteNotification:fetchCompletionHandler)处理,而不由application(_:didReceiveRemoteNotification:)处理。有可能当您的应用似乎没有收到有关iOS正在调用此方法的通知时。

就您而言,您可能还会受到iOS的限制。如果收到的静默通知过于频繁,或者您的应用使用过多的资源来处理静默通知等,则iOS将延迟通知的发送。从Xcode启动时,不会延迟它们。

  1. 您的静默通知中不应包含声音。发出单独的通知,或尝试从应用程序内部在后台播放声音。

  2. 检查向应用程序发送静默通知的速率。每小时最多发送2个。

  3. 验证您的静默通知处理代码是否不占用过多的CPU,内存或能源。处理静默通知时,请使用15mb以下的内存。还要确保在30秒的iOS调用application:didReceiveRemoteNotification:fetchCompletionHandler

  4. 中调用了fetchCompletionHandler块