13 апреля 2018 г.

Это частый запрос пользователей… «У меня есть iPad и iPhone, как я могу сохранить избранное на одном устройстве, чтобы оно появлялось на другом устройстве?»

Если пользователям необходимо создать учетную запись для использования вашего приложения, эта функция может быть встроена в ваш сервер. Однако иногда мы не хотим заставлять пользователей создавать учетные записи для использования наших приложений. В этом случае есть простое решение, которое синхронизирует пользовательские данные между устройствами с помощью всего нескольких строк кода. Это iCloud Key-Value Storage. Работая точно так же, как локальный словарь, он уникален для каждого пользователя iCloud и автоматически синхронизируется на каждом устройстве, принадлежащем этому пользователю.

Если вы используете userDefaults для хранения пользовательских данных, вы уже на полпути. iCloud Key-Value Storage работает очень похожим образом, с дополнительным преимуществом, что данные сохраняются после удаления приложения.

Практический пример

Допустим, пользователь с двух устройств загружает ваше приложение, вводит дату своего рождения в одно и сохраняет ее. Вы хотите сохранить эти данные в хранилище ключей-значений iCloud, чтобы, когда они откроют ваше приложение на другом устройстве, дата рождения уже была там автоматически. Вот что делать…

Активируйте возможности iCloud

Выберите цель вашего проекта в Xcode и откройте раздел «Возможности». Активируйте iCloud и убедитесь, что установлен флажок «Хранилище значений ключа».

4 строки кода

Сначала создайте keyValueStore. Вы можете создать столько из них, сколько хотите, каждый фактически является отдельным словарем. Обычно я создаю глобальный экземпляр, который затем можно вызывать из любого класса.

var keyStore = NSUbiquitousKeyValueStore()

Добавьте данные в хранилище ключей

keyStore.set("03/04/1989", forKey: "userBirthdate")

Получить данные о новом экземпляре вашего приложения

if let storedUserBirthdate = keyStore.string(forKey: "userBirthdate")  {
   //Use retrieved birthdate
} else {
   //Ask user for birthdate
}

Пока что keyStore действует точно так же, как UserDefaults, то есть данные будут храниться только локально. Чтобы разрешить всем устройствам пользователя iCloud доступ к данным, вам необходимо выполнить синхронизацию, вызвав:

keyStore.synchronize()

Это действительно так просто.

Следует иметь в виду, что синхронизация не обязательно происходит немедленно. Как говорится в документах Apple: синхронизация происходит «в подходящее время позже». iCloud Key-Value Storage предназначен для синхронизации данных, не требующих постоянного и сверхбыстрого обновления. Такие вещи, как пользовательские настройки и предпочтения.

Первоначально опубликовано на сайте janakshah.co.uk 13 апреля 2018 г.