Realm对象服务器和iCloud
问题描述:
如何使用iCloud与Realm对象服务器进行身份验证?Realm对象服务器和iCloud
我知道我必须拨打login
“iCloud令牌”,但无法找到如何获取此令牌。
到目前为止我所能找到的是:FileManager.default.ubiquityIdentityToken
根据docs“包含一个不透明的对象来表示当前用户的身份”。这似乎并不奏效。
另外,什么是使用iCloud作为身份验证的正常工作流程,我在证书/ Facebook/Twitter登录旁显示一个按钮吗?由于iOS用户通常无需登录iCloud,因此感觉有点奇怪。或者,我是否默认使用iCloud登录,如果用户使用其他提供商登录,我从iCloud注销?那个工作流感觉也很奇怪。
感谢
答
为了使用领域对象服务器访问CloudKit,你需要创建一个公共密钥,然后连接到苹果的CloudKit网络信息中心,并为应用程序创建一个CloudKit访问密钥。这些密钥将用于配置Realm对象服务器的CloudKit身份验证模块以用于特定的Realm。
了解更多https://realm.io/docs/realm-object-server/#icloud
我不认为有一个“正常”的工作流程,一切都取决于你的应用程序,但如果你的用户已经使用iCloud的登录,它没有意义使用另一个凭据。
答
这将获取您需要传递给SyncUser.login
的访问令牌。没有用户交互是必要的,你会得到一个错误,如果用户没有登录到iCloud中:
func fetchCloudKitAccessToken(completion: @escaping (_ accessToken: String?, _ error: Error?) -> Void) {
let container = CKContainer.default()
container.fetchUserRecordID { (recordID, error) in
let userAccessToken = recordID?.recordName
completion(userAccessToken, error)
}
}
这只需要对初始认证做,事后你可以只使用SyncUser.current
。
我阅读了文档并已完成该配置。我只询问我在调用登录时必须通过的帐户令牌。 – Ixx
您应该使用'CKContainer.fetchUserRecordIDWithCompletionHandler()'方法获得的有效用户记录标识,请查看此PR以获取iCloud认证的示例用法:https://github.com/realm/RealmTasks/pull/63 – Dmitry
感谢您的回答,我不得不搁置此举。一旦我恢复这个,我会回来审查。 – Ixx