看起来无论我从performFetchWithCompletionHandler返回UIBackgroundFetchResultNewData还是UIBackgroundFetchResultNoData,它都会清除我的应用程序的所有先前通知(本地或推送)。这对我来说是不可接受的。
任何人都知道如何获取并且不会使之前的通知被清除(消失)?
答案 0 :(得分:5)
我的猜测是你有一个背景提取,将你的徽章编号设置为0,如果发生这种情况,你的所有通知都会被清除。
答案 1 :(得分:3)
来源:Apple's AppDelegate API Reference
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
告诉应用程序已收到远程通知,表明有数据要提取。使用此方法处理应用程序的传入远程通知。与
不同application(_:didReceiveRemoteNotification:)
方法,只有当您的应用程序在前台运行时才会调用该方法,系统会在您的应用程序在前台或后台运行时调用此方法。此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从暂停状态唤醒),并在远程通知到达时将其置于后台状态。但是,如果用户强行退出,系统不会自动启动您的应用。在这种情况下,用户必须重新启动应用程序或重新启动设备,然后系统才会再次尝试自动启动应用程序。 如果用户从系统显示的警报中打开您的应用程序,系统可能会在您的应用程序即将进入前台时再次调用此方法,以便您可以更新用户界面并显示与通知相关的信息。 < / p>
注意:在将应用程序的徽章编号设置为0之前,您需要确保应用程序正在检查状态。测试以下情况:
应用程序正在运行,收到通知
申请已终止,收到通知
直接从应用图标
从收到的通知中启动应用
了解下面提到的3之间的差异对于您的用例至关重要。
检查application(_:didReceiveRemoteNotification:)
检查application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
检查didFinishLaunchingWithOptions
<{1}}