问题描述
当应用程序不再处于后台模式时,我在阅读通知时遇到问题。所以它完全关闭了。 通知设置工作正常。 即使该应用程序不再在后台运行,也会读取通知。在日志文件中,您可以看到到达时间。 为了进行测试,我打开了通知指针。它计数。
func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable : Any],fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {}
正确执行,我可以通过CKRecordID访问数据。
但是,如果该应用不再位于后台(即完全关闭),则不会再执行fetchCompletionHandler。 我已经通过NSLog对此进行了检查。
现在,我需要一种在启动应用程序时再次读取通知的方法。所以我需要CKRecordID。
仅与传输的数据有关。我不需要在屏幕上显示。
还可以更改设置,以便在再次启动应用程序时仅接收数据。我真的不需要它们在后台。
解决方法
据我所知,当设备离线或应用未运行时,没有办法获得错过的通知。
您将需要创建一个CKQuery
来检查CloudKit设备上次启动时错过了什么。您的CKQuery
必须与UserDefaults
与本地保存到设备的时间戳进行比较,才能知道要从CloudKit获取什么。
有关我的意思的详细说明,请参见我的answer here to a similar question。