2016-12-03 105 views
0

如何使用iCloud與Realm對象服務器進行身份驗證?Realm對象服務器和iCloud

我知道我必須撥打login「iCloud令牌」,但無法找到如何獲取此令牌。

到目前爲止我所能找到的是:FileManager.default.ubiquityIdentityToken根據docs「包含一個不透明的對象來表示當前用戶的身份」。這似乎並不奏效。

另外,什麼是使用iCloud作爲身份驗證的正常工作流程,我在證書/ Facebook/Twitter登錄旁顯示一個按鈕嗎?由於iOS用戶通常無需登錄iCloud,因此感覺有點奇怪。或者,我是否默認使用iCloud登錄,如果用戶使用其他提供商登錄,我從iCloud註銷?那個工作流感覺也很奇怪。

感謝

回答

1

爲了使用領域對象服務器訪問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

3

這將獲取您需要傳遞給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