仅使用键值存储检测 iCloud 帐户可用性/更改?

Posted

技术标签:

【中文标题】仅使用键值存储检测 iCloud 帐户可用性/更改?【英文标题】:Detect iCloud account availibility / change using Key-Value store only? 【发布时间】:2015-05-25 02:13:48 【问题描述】:

我使用 iCloud Key-Value 存储,没有任何容器(因为我不需要文档)。

所以应用没有在Settings / iCloud / Storage / Manage Storage列表中列出,只在iCloud / iCloud Drive列表中,像这样:

我真的很想知道它是打开还是关闭,或者根本可用。

似乎ubiquityIdentityToken 总是nil,而NSUbiquityIdentityDidChangeNotification 永远不会被调用。


我有一个工作原型,在模拟器中修改了一个滑块,它在设备上得到了更新,一切看起来都很好。即使,如果我询问标识符(在NSUbiquitousKeyValueStoreDidChangeExternallyNotification 回调中),它们始终为空:

NSURL *containerURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
NSLog(@"containerURL: %@", containerURL);
NSLog(@"token: %@", token);

// containerURL: (null)
// token: (null)

当我为我的应用关闭 iCloud Drive 时,它​​会在后台终止。不会调用任何通知,也不会在重新启动时调用。

我应该设置一个我从不使用的文档容器吗?

【问题讨论】:

使用您的代码更新您的问题,以使用通知和获取令牌。如果需要,指出代码在哪里。 关于如何使用它们的文档非常详细,我已经全部通读过了。还有一个通过 KV 存储同步的漂亮工作原型。只有这个是我无法判断它是否启用或不使用上面的工具。我想当有人不使用 iCloud 容器,只使用 KV 存储时,它们不会被调用/填充。 许多 API 都有很好的文档记录,但是这个站点有大量关于这些文档 API 的问题。这并不意味着您的实施没有问题。发布您的代码以确保您没有做错任何事情。 【参考方案1】:

打开 iCloud 文档后,我就有了令牌(应用权利也获得了一些新值)。

但即使我在给定应用程序的设备设置中关闭 iCloud Drive (!),ubiquityIdentityToken 现在也会返回值。它不会从 Key-Value 存储中提取更新,仍然设置了令牌。

只有URLForUbiquityContainerIdentifier 关闭时返回 nil,打开时返回 URL。

【讨论】:

你的回答给了我我需要的信息,虽然我没有同样的问题。事实证明,我们可以使用ubiquityIdentityToken 进行比较,以了解在 iCloud 键值同步开始之前,应用程序委托中的 iCloud 键值是否更改了 iCloud 帐户。

以上是关于仅使用键值存储检测 iCloud 帐户可用性/更改?的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 用于保存相当频繁的游戏状态更改

如何删除 iCloud 键值数据

如何将数据存储到开发者 icloud 帐户

更改 iOS 模拟器 iCloud 帐户

NSUbiquitousKeyValueStore 与 NSUserDefaults

swift Swift - Cloudkit:检查有效的iCloud帐户是否可用