使用[NSFileManager URLForUbiquityContainerIdentifier:]和[NSFileManager ubiquityIdentityToken]之间的主要区别是什么?

cir*_*ego 5 nsfilemanager ios icloud

我正在尝试为我的应用程序添加iCloud支持,并且一直在关注Apple自己的iCloud设计指南.该指南说我应该通过调用来检查用户凭据[NSFileManager ubiquityIdentityToken].它还说我应该检查[NSFileManager URLForUbiquityContainerIdentifier:]以使应用程序的普遍容器可用.

我遇到的问题ubiquityIdentityToken是返回nilURLForUbiquityContainerIdentifier:不是.因为后者返回了正确的URL,我假设我的配置文件和权利设置正确.我还仔细检查了我正在运行应用程序的设备是否已启用iCloud,它已登录并启用了文档和数据.

为什么一种方法暗示没有iCloud连接,而另一种方法呢?

更新: 我注意到,如果我把ubiquityIdentityToken它返回,如果我把它的值,以一个电话URLForUbiquityContainerIdentifier:.然而,ubiquityIdentityToken如果我的应用程序使用键值存储而不是普遍存储容器,将如何工作?

Sri*_*nth 5

ubiquityIdentityToken 是 Apple 引入的一个新事物,它允许应用程序检查用户是否登录到 icloud。这是一种非常快速的方法,可以确定同一用户是否在应用程序激活之间登录/用户是否实际上已登录等。

它可以在主线程上运行并且速度非常快。这将允许您对应用程序逻辑做出决定。

需要注意的关键是它可以在主线程上运行并且速度非常快。

您通常会获得此令牌,将其存储在您的应用程序中,然后当您的应用程序从后台返回时再次比较它。

这样,您可以确保它是同一用户等。

如果返回 nil,则表示用户未登录 iCloud。

以前为了检查用户是否登录,有一个单独的调用,但您必须在另一个线程上异步运行它。我猜,他们看到了用户登录 iCloud、暂停他们的应用程序、登录另一个帐户并返回到您的应用程序的情况。这将使您能够非常有效和轻松地检查这些事情。虽然令牌没有任何用户可识别信息。