ios - iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知
问题描述
当应用程序不再处于后台模式时,我在阅读通知时遇到问题。所以它完全关闭了。通知设置工作正常。即使应用程序不再在后台,也会读取通知。在日志文件中,您可以看到到达。出于测试目的,我打开了通知指针。算了。
什么有效:当应用程序在后台时:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {}
正确执行,我可以通过 CKRecordID 访问数据。
但是如果应用程序不再在后台,即完全关闭,则不再执行 fetchCompletionHandler。我已经通过 NSLog 进行了检查。
现在我需要一种在应用程序启动时再次阅读通知的方法。所以我需要 CKRecordIDs。
它仅与传输的数据有关。我不需要在屏幕上显示。
也可以更改设置,以便在再次启动应用程序时只接收数据。我真的不需要他们在后台。
它是关于将数据从一台设备传输到另一台设备的游戏。
谁有我的代码片段?或者提示我可以在哪里搜索?
解决方案
据我所知,当设备离线或应用程序未运行时,没有办法获得错过的通知。
您将需要创建一个CKQuery
来检查 CloudKit 以了解设备上次启动时错过的内容。您CKQuery
必须与本地保存到设备的时间戳进行比较,UserDefaults
才能知道从 CloudKit 中获取什么。
有关我的意思的更长描述,请参见我对类似问题的回答。
推荐阅读
- sql - SQL 合并相似的行并连接某些列
- protocol-buffers - 在 grpc 中传递时间戳时的问题
- javascript - 为什么 redux-sessionstorage 在恢复状态时不更新节点的属性?
- c++ - 当我尝试调用 createTargetMachine() 时,为什么 LLVM 会出现段错误?
- php - 丑陋的字符在 html/php 中返回几个月 février 和 décembre
- ruby - 无法确定测试是否在后挂钩中失败
- c# - 如何在数据库c#中保存库项目返回的id
- express - 有没有办法使用多种语言进行 Joi 验证?
- android - 堆检测失败,退出状态为 1 [Android]
- flutter - Flutter inheritFromWidgetOfExactType() 方法