Ios 跨设备的iCloud GUID

Ios 跨设备的iCloud GUID,ios,client-server,sync,token,icloud,Ios,Client Server,Sync,Token,Icloud,我正试图找出一种方法来生成一个唯一的iCloud ID,它在所有设备上都是相同的。我的应用程序将数据存储在一个在线数据库中,我希望将其与iCloud id绑定。这为用户提供了不必处理登录(因为所有数据都绑定到他们的iCloud帐户)的良好体验,而不必使用iCloud糟糕的同步。问题是,据我所知,没有API能给我这种ID 我尝试/思考过的事情: 1)NSUbiquitousKeyValueStore 不起作用,因为该值将在“以后某个时候”更新,也就是说——只要苹果愿意 2)iCloud文档存储 与

我正试图找出一种方法来生成一个唯一的iCloud ID,它在所有设备上都是相同的。我的应用程序将数据存储在一个在线数据库中,我希望将其与iCloud id绑定。这为用户提供了不必处理登录(因为所有数据都绑定到他们的iCloud帐户)的良好体验,而不必使用iCloud糟糕的同步。问题是,据我所知,没有API能给我这种ID

我尝试/思考过的事情:

1)NSUbiquitousKeyValueStore

不起作用,因为该值将在“以后某个时候”更新,也就是说——只要苹果愿意

2)iCloud文档存储

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

3)使用[[NSFileManager defaultManager]ubiquityIdentityToken]

因为Ubiquity令牌的字节对于任何给定的登录会话都是相同的,所以我认为跨设备的情况可能就是这样。情况并非如此

4)使用通讯簿联系人

这似乎是不可靠的(如果他们更改了他们的主要电子邮件/电话号码/姓名会发生什么情况),另外还有一个副作用,就是在第一次发布时让用户感到恼火/害怕(他们怎么知道我没有偷走他们所有的联系人?)

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

这似乎是唯一的选择,尽管我更喜欢一个更好的


提前感谢

iCloud没有持久的唯一标识符


选项5是您的最佳选择,除非您希望对使用文档存储的同步文件执行冲突解决。

也许这太晚了,没有什么用处,但iOS 8提供了一个解决方案。来自WWDC 2014“CloudKit简介”会议:

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

[抄本由提供]

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

例如:


你好。我只是想知道你是否能想出一个解决办法。谢谢@JCS007:对不起,伙计。看来下面的答案是正确的。答案5确实是唯一合理的解决方案(即使是iOS 7)
[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
    …
    myiCloudUserID = recordID.recordName;
}];