Jer*_*sel 3 client-server sync token ios icloud
我试图想出一种方法来生成一个独特的iCloud ID,它将在各种设备上相同.我的应用程序将数据存储在一个在线数据库中,我希望将其绑定到iCloud ID.这提供了不必处理登录的良好用户体验(因为所有数据都与他们的iCloud帐户绑定),而不会被使用iCloud的糟糕同步.问题是,据我所知,没有API会给我这种ID.
我尝试/想过的事情:
1)NSUbiquitousKeyValueStore
不起作用,因为价值会"稍后"更新,即 - 只要苹果感觉像这样.
2)iCloud文档存储
与#1相同的问题,还有一个额外的好处,就是在设备中存储一个用户可以手动删除的随机文件
3)使用[[NSFileManager defaultManager] ubiquityIdentityToken]
因为Ubiquity Token的字节对于任何给定的登录会话都是相同的,我想象可能是跨设备的情况.不是这样的
4)使用地址簿联系人
似乎它不可靠(如果他们改变他们的主要电子邮件/电话号码/姓名会发生什么),加上第一次启动时会让用户烦恼/吓坏他人的副作用(他们怎么知道我没有窃取他们所有的联系人?)
5)滚动我自己的登录系统绑定到远程服务器
这似乎是唯一可用的选择,虽然我更喜欢更好的选择.
提前致谢
也许现在为时已晚,无法使用,但iOS 8已经提供了解决方案.从WWDC 2014"介绍到CloudKit"会议:
因此,我们所做的是逐个容器,我们提出了一个随机ID.这是一个稳定的标识符,因此无论在与该容器通信时运行的客户端将获得相同的标识符,它都是您的应用程序,但它不会通过任何个人信息识别用户....我们已经给予您足够的支持,如果您愿意,您可以使用CloudKit框架通过应用程序中的iCloud流实现登录.
[转录礼貌http://asciiwwdc.com/2014/sessions/208 ]
为了更好地充实,如果您的应用程序已配置为CloudKit存储,则其默认容器附带一个自动生成的用户记录,表示当前已登录的iCloud用户(如果有).recordName与此用户记录关联的UUID(实际上称为)对于跨安装和跨设备的应用程序是一致的.
例如:
[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
…
myiCloudUserID = recordID.recordName;
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |