Сервер объектов Realm и iCloud

Как использовать iCloud для аутентификации на сервере объектов Realm?

Я знаю, что должен позвонить login с «токеном iCloud», но не могу найти, как получить этот токен.

Пока что я смог найти следующее: FileManager.default.ubiquityIdentityToken, который, согласно документации, «содержит непрозрачный объект, представляющий личность текущего пользователя». Похоже, это не работает.

Кроме того, каков обычный рабочий процесс для использования iCloud в качестве аутентификации, показывать ли мне кнопку для этого рядом с учетными данными / входом в Facebook / Twitter? Это немного странно, поскольку пользователям iOS обычно не нужно входить в iCloud. Или я могу войти в систему с помощью iCloud по умолчанию, и если пользователь входит в систему с помощью другого поставщика, я выхожу из iCloud? Этот рабочий процесс тоже кажется странным.

Спасибо


person User    schedule 03.12.2016    source источник


Ответы (2)


Это позволит получить токен доступа, который необходимо передать 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.

person ewerx    schedule 31.12.2016

Чтобы получить доступ к CloudKit с помощью Realm Object Server, вам нужно будет создать открытый ключ, затем подключиться к веб-панели Apple CloudKit и создать ключ доступа CloudKit для вашего приложения. Эти ключи затем будут использоваться для настройки модуля аутентификации CloudKit сервера Realm Object Server для конкретной области.

Узнайте больше на https://realm.io/docs/realm-object-server/#icloud

Я не думаю, что существует «нормальный» рабочий процесс, все зависит от вашего приложения, но если ваш пользователь уже вошел в систему с помощью iCloud, нет смысла использовать другие учетные данные.

person Dmitry    schedule 05.12.2016
comment
Я прочитал документацию и уже выполнил эту настройку. Я спрашиваю только о токене учетной записи, который я должен передать при вызове входа в систему. - person User; 05.12.2016
comment
Вы должны использовать действительный идентификатор записи пользователя, который вы можете получить с помощью метода CKContainer.fetchUserRecordIDWithCompletionHandler(), ознакомьтесь с этим PR для примера использования аутентификации iCloud: github.com/realm/RealmTasks/pull/63 - person Dmitry; 05.12.2016
comment
Спасибо за ответ, мне пришлось отложить это. Как только я возобновлю это, я вернусь к обзору. - person User; 09.12.2016