iOS后台提取会清除以前的通知

时间:2015-01-20 10:38:26

标签: ios background fetch

看起来无论我从performFetchWithCompletionHandler返回UIBackgroundFetchResultNewData还是UIBackgroundFetchResultNoData,它都会清除我的应用程序的所有先前通知(本地或推送)。这对我来说是不可接受的。

任何人都知道如何获取并且不会使之前的通知被清除(消失)?

2 个答案:

答案 0 :(得分:5)

我的猜测是你有一个背景提取,将你的徽章编号设置为0,如果发生这种情况,你的所有通知都会被清除。

答案 1 :(得分:3)

来源:Apple's AppDelegate API Reference

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

告诉应用程序已收到远程通知,表明有数据要提取。使用此方法处理应用程序的传入远程通知。与

不同
application(_:didReceiveRemoteNotification:)

方法,只有当您的应用程序在前台运行时才会调用该方法,系统会在您的应用程序在前台或后台运行时调用此方法。此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从暂停状态唤醒),并在远程通知到达时将其置于后台状态。但是,如果用户强行退出,系统不会自动启动您的应用。在这种情况下,用户必须重新启动应用程序或重新启动设备,然后系统才会再次尝试自动启动应用程序。 如果用户从系统显示的警报中打开您的应用程序,系统可能会在您的应用程序即将进入前台时再次调用此方法,以便您可以更新用户界面并显示与通知相关的信息。 < / p>

注意:在将应用程序的徽章编号设置为0之前,您需要确保应用程序正在检查状态。测试以下情况:

  • 应用程序正在运行,收到通知

  • 申请已终止,收到通知

  • 直接从应用图标

  • 启动应用
  • 从收到的通知中启动应用

了解下面提到的3之间的差异对于您的用例至关重要。

  1. 检查application(_:didReceiveRemoteNotification:)

  2. 中收到的通知对象
  3. 检查application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

  4. 中收到的通知对象
  5. 检查didFinishLaunchingWithOptions <{1}}