Облачная синхронизация между приложением iPad / iPhone - PullRequest
7 голосов
/ 03 июня 2010

У меня есть приложение Core Data, которое в конечном итоге станет универсальным приложением для iPhone / iPad.

Я бы хотел реализовать облачную синхронизацию, чтобы iPhone и iPad, на которых запущено приложение, могли обмениваться данными. Я планирую использовать недавно выпущенный Dropbox API . У кого-нибудь есть мысли о том, как это сделать? API Dropbox позволяет приложениям хранить файлы в облаке. Я думал о том, чтобы вначале сохранить базу данных (sqlite) для приложения в облаке и затем загрузить эту базу данных, но затем я понял, что использование этого метода затруднит объединение изменений (вместо замены всей базы данных).

Любые мысли приветствуются. Спасибо.

Ответы [ 4 ]

5 голосов
/ 07 июня 2010

Если вам это сойдет с рук, самый простой способ сделать синхронизацию (безусловно) - это иметь три копии ваших данных локально: копия, которую вы в последний раз загрузили («старая»), копия производится локальными изменениями («моё») и копией , теперь загружается с сервера («их»).

Затем сортируйте все записи во всех трех файлах и просматривайте их одну за другой:

  • если старый == мой, используйте их
  • иначе, если старый == их, используйте мой
  • иначе у вас конфликт; сделать что-нибудь с этим (например, всегда используйте мой, иначе "последний писатель выигрывает")

Обратите внимание, что "мои", "их" или "старые" могут не существовать. Правила выше все еще применяются в этом случае; если выбранный вами результат - «не существует», то вы захотите удалить запись в выходном файле.

Наконец, загрузите полученный файл обратно на сервер, чтобы он стал «их» базой данных для следующего парня. Затем скопируйте новый файл в ваши локальные "старые" и "мои" базы данных.

(Есть более эффективные алгоритмы, чем описанные выше ..., но нет и более простых :) А дисковое пространство в настоящее время довольно дешево, особенно если вы сжимаете файлы.)

1 голос
/ 03 июня 2010

Возможно, вы захотите использовать другой метод для синхронизации. С какими типами данных вы будете иметь дело?

Я добился большого успеха, используя легкий рельс.

0 голосов
/ 03 июня 2010

Вы, вероятно, хотите экспортировать данные в какой-либо формат, отличный от собственного формата sqlite. Если бы я проектировал что-то подобное, я думаю, что JSON , вероятно, был бы моим предпочтительным форматом.

Я не смотрел API Dropbox, но они поддерживают загрузку и выгрузку различий между файлами, а не весь файл, верно? В зависимости от того, как работает API, может быть, ваше приложение понимает их формат diff и работать с ним может быть проще ...

0 голосов
/ 03 июня 2010

Вы можете заглянуть в GameKit , чтобы поделиться данными. В противном случае кажется, что вам просто нужно управлять синхронизацией с промежуточным файловым сервером.

...