Как я могу синхронизировать элементы с облаком, когда мое приложение находится в фоновом режиме? - PullRequest
0 голосов
/ 07 ноября 2011

В моем приложении для iPad пользователь может вводить данные онлайн или офлайн, сохраняя данные в SQLite, и когда пользователь выходит в онлайн, он нажимает кнопку «Синхронизация», после чего данные синхронизируются в облаке.1001 *

Если пользователь вводит данные в автономном режиме, они сохраняются в локальной БД SQLite.Если данные еще не синхронизированы, я устанавливаю значок для количества записей, ожидающих синхронизации.

Когда пользователь запускает свой iPad, он должен получить предупреждение при запуске, говорящее «Есть 5 записей, ожидающих синхронизации«.Тогда все ожидающие записи будут синхронизированы, не открывая мое приложение.

Кто-нибудь сталкивался с подобным сценарием?Кто-нибудь знает, как я могу это сделать?

1 Ответ

4 голосов
/ 07 ноября 2011

До iOS 5.0 не было возможности синхронизировать данные с вашим приложением, когда приложение не было запущено. Однако были некоторые сценарии, когда приложение могло, например, завершить загрузку, когда приложение было прекращено, но эта фоновая обработка довольно ограничена.

Теперь, если вы хотите синхронизироваться с облаком и иметь те же данные, доступные на другом устройстве iOS или в приложении Mac, тогда я думаю, что iCloud может быть именно тем, что вы ищете.

Таким образом, возможный сценарий с iCloud может выглядеть следующим образом:

  1. Ваше приложение с поддержкой iCloud установлено на двух iPad
  2. На обоих iPad вы вошли в свою учетную запись iCloud (это должно совпадать, поскольку iCloud привязан к указанному Apple ID
  3. Когда ваше приложение сохраняет некоторые данные на iPad1, они автоматически синхронизируются с облаком
  4. В то же время эти данные загружаются в iPad2 (который должен иметь подключение к Интернету), пока ваше приложение еще не запущено. Это возможно только с iCloud
  5. Когда вы сейчас запустите свое приложение на iPad2 (даже если оно сейчас не в сети), у вас будут текущие данные, доступные в вашем приложении.

Однако, если вы работаете со своим собственным серверным бэкэндом и, возможно, нуждаетесь в большем контроле над данными на сервере, iCloud может (пока) не соответствовать вашим потребностям. Возможно, вы захотите проверить документацию или пример кода для iCloud: iCloud для разработчиков (требуется учетная запись Apple Developer)

Если вы решили не использовать iCloud, то в настоящее время нет способа синхронизировать данные, пока приложение не запущено.

Edit: Сценарий без iCloud может выглядеть следующим образом:

  1. Вы вводите данные в iPad1 в автономном режиме и устанавливаете значок на количество несинхронизированных элементов
  2. Позже у вас есть подключение к Интернету, поэтому вы запускаете приложение, и элементы могут быть синхронизированы с вашим сервером.
  3. Ваш сервер хранит вновь поступившие записи и теперь может отправить Push-уведомление в ваше приложение, установленное на iPad2, сообщающее пользователю, что на сервере n новые записи.
    • Из этого уведомления пользователь теперь может решить открыть приложение, а новые элементы могут быть загружены в iPad2.
    • Если пользователь отклоняет уведомление, то никакие данные не загружаются, пока он не запустит ваше приложение в следующий раз.
...