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的登录,它没有意义使用另一个凭据。

+0

我阅读了文档并已完成该配置。我只询问我在调用登录时必须通过的帐户令牌。 – Ixx

+0

您应该使用'CKContainer.fetchUserRecordIDWithCompletionHandler()'方法获得的有效用户记录标识,请查看此PR以获取iCloud认证的示例用法:https://github.com/realm/RealmTasks/pull/63 – Dmitry

+0

感谢您的回答,我不得不搁置此举。一旦我恢复这个,我会回来审查。 – Ixx

这将获取您需要传递给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