iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知

Posted

技术标签:

【中文标题】iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知【英文标题】:iOS 10 - Swift still Notification CloudKit: App is not launched, read Notification after didFinishLaunchingWithOptions 【发布时间】:2020-09-23 17:37:22 【问题描述】:

当应用不再处于后台模式时,我无法阅读通知。所以它完全关闭了。 通知设置工作正常。 即使应用程序不再在后台,也会读取通知。在日志文件中,您可以看到到达。 出于测试目的,我打开了通知指针。算了。

什么有效: 当应用在后台时:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)  

正确执行,我可以通过 CKRecordID 访问数据。

但如果应用程序不再在后台,即完全关闭,则不再执行 fetchCompletionHandler。 我已经通过 NSLog 进行了检查。

现在我需要一种在应用启动时再次阅读通知的方法。所以我需要 CKRecordID。

这只是关于传输的数据。我不需要在屏幕上显示。

还可以更改设置,以便在重新启动应用程序时仅接收数据。我真的不需要它们在后台。

这是关于将数据从一台设备传输到另一台设备的游戏。

谁有我的代码 sn-p? 或者提示我可以在哪里搜索?

【问题讨论】:

【参考方案1】:

据我所知,当设备离线或应用未运行时,没有办法获得错过的通知。

您将需要创建一个CKQuery 来检查 CloudKit 以了解设备上次启动时错过的内容。您的CKQuery 必须与使用UserDefaults 在本地保存到设备的时间戳进行比较,才能知道从 CloudKit 获取什么。

请参阅我的answer here to a similar question,了解我的意思的详细说明。

【讨论】:

感谢您的回答。我也想过类似的事情。

以上是关于iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Cloud Message iOS Swift 不工作

Swift iOS 10 的推送通知

在通知标题中显示函数结果(Swift 3,iOS10)[关闭]

远程通知中的自定义声音 iOS 10,swift 3

swift 3,ios 10 - 未收到推送通知 firebase

Swift 徽章通知在 iOS 10 之后贬值