gpt4 book ai didi

ios - iCloud 和核心数据 : Possible to get NSPersistentStoreDidImportUbiquitousContentChangesNotification while app is in background?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:28 25 4
gpt4 key购买 nike

我的应用根据使用 Core Data 记录的事件时间使用本地通知。

每当我在设备上存储的核心数据发生重大变化时,我都会调用一个名为 updateLocalNotifications() 的函数清除现有的本地通知并根据核心数据中的更新数据设置新通知。

我的 NSPersistentStoreCoordinator核心数据设置为 NSPersistentStoreUbiquitousContentNameKey , 因此它会使用 iCloud 自动跨设备同步。

理想情况下,如果用户在两台或多台设备上运行我的应用程序,我希望能够运行 updateLocalNotifications()每当 iCloud 上的核心数据发生变化时,在所有设备上。

我在 AppDelegate 中有这个简单的代码来监听和响应 iCloud 上数据的变化:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// update local notifications whenever new iCloud data is received
notificationCenter.addObserver(self, selector: #selector(updateLocalNotifications), name: NSPersistentStoreDidImportUbiquitousContentChangesNotification, object: nil)

...

return true
}

如果应用程序在两台设备上都打开并位于前台,并且我在一台设备上记录了一个事件,我得到了 NSPersistentStoreDidImportUbiquitousContentChangesNotification在大约 20 秒内在另一台设备上。

问题是我似乎从来没有得到 NSPersistentStoreDidImportUbiquitousContentChangesNotification当应用程序在第二台设备的后台运行时。我已经做了很多挖掘工作,但似乎无法找到iCloud 同步实际上应该在后台发生,还是只会在我的应用程序在前台时发生。我仍在对此进行测试,看看当应用程序处于后台时它是否只是一个更长的更新间隔。


可能的解决方案 #1(根据目前的测试似乎不可行,但这是我想要做的)

此时,我正在寻找一种解决方案,让第二台设备在 iCloud 处于后台时检查它的变化,因此 NSPersistentStoreDidImportUbiquitousContentChangesNotification当有更改并触发此通知时触发,即使它的频率低于应用程序在前台时的频率。这种方法肯定有缺点,比如如果用户在启动应用程序后手动退出它,它就不会被调用。

可能的解决方案#2(似乎可行但复杂)

我正在考虑的另一种可能的解决方案是设置服务器并使用 content-available 的静默推送通知| .这样,当有人在一台设备上记录事件时,我会 ping 服务器并要求它发送 content-available推送到用户的其他设备,我可以调用 updateLocalNotifications()在响应该推送通知时。这有一些缺点。一个是 content-available如果应用程序在设备启动后未启动或已手动退出(类似于解决方案 #1),则推送将不起作用。第二个是,每次设备上的事件发生变化时,设置服务器和对服务器执行 ping 操作会产生更多的开销,即使该信息已经通过 iCloud 发送到服务器。

我发现了其他一些类似的问题(比如这个:How can I act on Core Data iCloud sync notification when the app is in the background?),但他们没有提出任何可能的解决方案,所以我认为值得发布我的情况和可能的解决方案,以防万一人们试图解决类似的问题。

最佳答案

对于这个问题,我更喜欢 UX 设计解决方案。

用户希望在她的所有设备上弹出您的提醒是值得怀疑的。您应该提供一个设置,用户可以在其中关闭它们,或者更确切地说,打开它们。向用户明确提醒将特定于设备,并且它们只会在应用处于事件状态时更新,但基于来自其他设备的输入。

对于大多数用户来说,这是可以接受的预期行为。

关于ios - iCloud 和核心数据 : Possible to get NSPersistentStoreDidImportUbiquitousContentChangesNotification while app is in background?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com