【问题标题】:iCloud GUID Across Devices跨设备的 iCloud GUID
【发布时间】:2013-05-29 05:21:22
【问题描述】:

我正在尝试找出一种方法来生成一个唯一的 iCloud ID,该 ID 在不同设备上都是相同的。我的应用程序将数据存储在我想绑定到 iCloud id 的在线数据库中。这提供了无需处理登录的良好用户体验(因为所有数据都与他们的 iCloud 帐户相关联),而不会被 iCloud 糟糕的同步卡住。问题是,据我所知,没有任何 API 可以为我提供这种 ID。

我尝试过/想过的事情:

1) NSUbiquitousKeyValueStore

不起作用,因为该值将在“稍后”更新,即 - 只要 Apple 喜欢它。

2) iCloud 文档存储

与 #1 相同的问题,额外的好处是在设备中存储了一个用户可以手动删除的随机文件

3) 使用 [[NSFileManager defaultManager] ubiquityIdentityToken]

因为对于任何给定的登录会话,Ubiquity 令牌的字节都是相同的,我想这可能是跨设备的情况。不是这样的

4) 使用通讯录联系人

这似乎是不可靠的(如果他们更改主要电子邮件/电话号码/姓名会发生什么),而且在首次启动时会产生烦人/吓坏用户的副作用(他们怎么知道我没有偷他们所有的联系人?)

5) 滚动绑定到远程服务器的我自己的登录系统

这似乎是唯一可用的选项,尽管我更喜欢更好的选项。

提前致谢

【问题讨论】:

  • 您好。我只是想知道你是否想出了一个解决方案。谢谢!
  • @JCS007:对不起,伙计。看起来下面的答案是要走的路。答案 5 确实是唯一合理的解决方案(即使从 iOS 7 开始)

标签: ios client-server sync token icloud


【解决方案1】:

也许这已经太迟了,但 iOS 8 在这里提供了一个解决方案。来自 WWDC 2014 “Intro to CloudKit”会议:

因此,我们所做的是在一个容器一个容器的基础上提出一个随机 ID。这是一个稳定的标识符,因此无论您的应用程序在与此容器通信时运行的客户端是什么,都将获得相同的标识符,但它不会通过任何个人信息来识别用户。 … 我们已经为您提供了足够的支持,如果您愿意,您可以使用 CloudKit 框架在您的应用程序中通过 iCloud 流实现登录。

[转录由http://asciiwwdc.com/2014/sessions/208提供]

为了进一步充实这一点,如果您的应用程序被配置为 CloudKit 存储,那么它的默认容器会附带一个自动生成的用户记录,代表当前登录的 iCloud 用户(如果有)。与此用户记录关联的 UUID(实际上称为 recordName)对于您的应用在安装和跨设备上是一致的。

例如:

[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
    …
    myiCloudUserID = recordID.recordName;
}];

【讨论】:

    【解决方案2】:

    iCloud 没有持久的唯一标识符。

    选项 5 是您最好的选择,除非您想对使用文档存储的同步文件进行冲突解决。

    【讨论】:

      猜你喜欢
      • 2019-10-26
      • 2012-03-09
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2013-08-23
      • 2014-11-16
      相关资源
      最近更新 更多