Как справиться с первым запуском, когда требуется iCloud? - PullRequest
1 голос
/ 20 апреля 2020

Я использую CloudKit для хранения общедоступных данных, а новый NSPersistentCloudKitContainer как часть моего стека базовых данных для хранения / синхронизации c личных данных.

Когда пользователь открывает В моем приложении они находятся в одном из 4 состояний:

  1. Они - новый пользователь с доступом к iCloud
  2. Они - возвращающийся пользователь с доступом к iCloud
  3. Они являются новым пользователем, но по какой-то причине не имеют доступа к iCloud
  4. Они являются возвращающимися пользователями, но по какой-то причине не имеют доступа к iCloud

Состояния 1 и 2 представляют мои счастливые пути. Если они новый пользователь, я хотел бы заполнить личный магазин пользователя некоторыми данными, прежде чем показывать начальный вид. Если они - возвращающийся пользователь, я бы хотел получить данные из Core Data для передачи в исходное представление.

Определение нового / старого пользователя: Я планирую использовать NSUbiquitousKeyValueStore. Моя проблема связана с тем, что они: загружают приложение -> регистрируются как запустившие приложение до -> удаляют и переустанавливают / устанавливают приложение на новом устройстве Я предполагаю, что NSUbiquitousKeyValueStore займет некоторое время для получения обновлений, поэтому мне нужно подождать, пока синхронизация не закончится, прежде чем перейти к исходному виду. Тогда возникает вопрос, что произойдет, если у них нет доступа к iCloud? Как NSUbiquitousKeyValueStore может сказать мне, являются ли они возвращающимся пользователем, если он не может получать обновления?

Определение доступа к iCloud: На основании проведенного исследования я могу проверить если FileManager.default.ubiquityIdentityToken равно nil, чтобы увидеть, доступен ли iCloud, но это не скажет мне , почему . Я должен был бы использовать CKContainer.default().accountStatus, чтобы узнать, почему iCloud не доступен. Проблема в том, что это асинхронный вызов, и мое приложение продолжило бы работу, прежде чем узнало, каков статус их учетной записи. Каков наилучший способ изящно убедиться, что все эти состояния обработаны?

1 Ответ

1 голос
/ 28 апреля 2020

Здесь нет «правильного» ответа, но я не вижу NSUbiquitiousKeyValueStore как-либо выигрышным - как вы сказали, если они не вошли в iCloud или не имеют доступа к сети, они не будут работать для них тем не мение. У меня есть некоторые вещи, связанные с совместным использованием, сделанные с помощью NSUbiquitiousKeyValueStore в настоящее время, и я не буду делать это в следующий раз. Я действительно надеюсь, что NSPersistentCloudKitContainer поддерживает совместное использование в iOS 14, и я могу просто стереть большую часть своего кода CloudKit одним махом oop.

Если ваше приложение не работает без облачного доступа, тогда вы возможно, просто поднять экран, говорящий, что, хотя в целом это не очень удовлетворительный пользовательский опыт. То, как я это делаю, - это думаю о том, что iCloud syn c действительно асинхронный (что это такое). Поэтому я разрешаю пользователю начать использовать приложение. Затем вы можете позвонить в accountStatus и посмотреть, доступен ли он в фоновом режиме. Если это так, запустите syn c, если это не так, подождите, пока это произойдет, а затем запустите процесс.

Таким образом, пользователь может бесконечно автономно использовать приложение на устройстве и в такое время, как они подключаются к inte rnet все, что они сделали на любом другом устройстве, объединяется с тем, что они сделали на этом новом устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...