Какое хорошее решение для синхронизации данных между приложениями iOS? [закрыто]

17

Я занимаюсь разработкой приложения, управление данными которого осуществляется с помощью Core Data, и я изучаю, как реализовать функцию синхронизации данных между двумя различными устройствами (даже между iDevices и Mac в конечном итоге).

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

Update

Я получил награду за этот вопрос. Синхронизация может быть трудной задачей на iOS, но, ладно, есть множество приложений, которые предлагают функции синхронизации между устройствами. Мой вопрос: как они это делают? Какой лучший подход? Какие есть разные решения?

Обновление 2

Этот вопрос, безусловно, уже устарел, поскольку iCloud был выпущен почти год назад. Я хотел бы сохранить его, поскольку он может дать интересную информацию о синхронизации мобильных данных между устройствами.

    
задан marzapower 27.05.2011 в 21:44
источник
  • вам нужно решение по эфиру или синхронизация, в то время как iDevice синхронизирует то, что вы ищете? –  bshirley 02.06.2011 в 02:29
  • Внеочередное решение, если это возможно! –  marzapower 02.06.2011 в 03:00
  • существует ли предположение только о двух устройствах или могут быть три или более пользователей / устройств? могут ли любые данные быть изменены любым устройством? когда возникают конфликты слияния, как вы их разрешите? –  bshirley 02.06.2011 в 03:40
  • Я знаю, что слияние является общей проблемой при сборе данных между распределением баз данных. Я хотел бы знать, как другие решают эту проблему. Если речь идет только о слиянии грубой силы, это не то, что я бы назвал «синхронизацией». –  marzapower 02.06.2011 в 12:40
  • проблема слияния не является общим решением, но должна быть выполнена с учетом вашего домена. Внутри основных данных они обрабатывают непересекающиеся изменения и разрешение конфликтов, как определено здесь. Руководство по программированию основных данных: Управление изменениями - общее решение «не удается», что является желательным и приемлемым, поскольку это означает одновременное дублирование изменений - / синхронизация более поздних изменений временные шкалы = частый сбой –  bshirley 02.06.2011 в 16:09
Показать остальные комментарии

4 ответа

11

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

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

  • Что мне нужно понять о синхронизации данных ?
  • Какую часть моей базовой модели данных я хочу синхронизировать? Нужно ли вносить изменения в мою текущую модель для облегчения синхронизации?
  • Какой механизм сериализации / десериализации я буду использовать?
  • Как я смогу однозначно идентифицировать объекты на нескольких устройствах?
  • Как я буду делать версии своих данных? Как я могу сказать, какие объекты должны быть синхронизированы?
  • Нужно ли мне иметь возможность отменить операцию синхронизации?
  • Как я буду отслеживать ход синхронизации и как я буду обрабатывать сбои и исключения? Как я буду уведомлять пользователя об этом?
  • Предпочитаю ли я синхронизировать "постепенно" (части моей модели) или "глобально" (всю модель сразу)?
  • Как часто пользователю нужно синхронизировать данные между устройствами?
  • Есть ли какие-либо соображения безопасности? Нужно ли шифрование?
  • и др.

Это едва царапает поверхность. По мере продвижения вперед вы обязательно найдете больше вещей для размышлений.

Затем определите, как вы хотите подключиться между устройствами. Похоже, вы предпочитаете беспроводное решение типа P2P. Для этого я бы начал с рассмотрения этих инструментов:

  • GameKit (эта инфраструктура имеет API для установления соединения между устройствами через Bluetooth)
  • Bonjour (протокол Apple для обнаружения устройств по сети - см. пример приложения BonjourWeb ) + сокеты BSD

Выберите инструмент (ы), который вам наиболее удобен и основан на ваших дизайнерских решениях, обсуждавшихся ранее. Я не могу помочь вам там, так как у меня нет опыта ни с одним из них. Как сказал Морфеус:

I can only show you the door. You're the one that has to walk through it.

Извините, немного юмора:)

Наконец, выберите решение для реализации вашего механизма синхронизации. Вы могли бы, например, выберите модель клиент-сервер (одно устройство будет прослушивать соединение, а другое инициирует его).

Более релевантная документация:

Надеюсь, это даст вам стартовый путь.

    
ответ дан octy 02.06.2011 в 15:52
  • Этот ответ не «решает» вопрос, но будет хорошей отправной точкой для хорошего планирования технологий синхронизации. –  marzapower 06.06.2011 в 12:06
3

Синхронизация данных очень сложна. Упрощенные решения хуже, чем отсутствие решений.

Чтобы получить хорошее духовное руководство по этому вопросу, ознакомьтесь с тем, что авторы Things делают со своими будущими функциями облачной синхронизации. , Я надеюсь, что они выпустят API синхронизации, с помощью которого разработчики смогут реализовать службы синхронизации. Но даже если они держат это в себе, они довольно хорошо демонстрируют тот тип самоанализа, который необходим для того, чтобы действительно приступить к выполнению задачи.

    
ответ дан Dan Ray 27.05.2011 в 22:06
  • Ну, есть множество приложений, которые имеют функцию «синхронизация между устройствами». Я просто хочу знать, как они это делают. Авторы Things, вероятно, найдут лучшее решение, но как они знают? –  marzapower 29.05.2011 в 00:01
  • Я думаю, он просто предупреждал вас о том, что вы ожидаете более высокий уровень сложности, чем вы могли бы предположить из-за всего, что связано с «облаками». Это похоже на программирование даты и времени, выглядит просто на первый взгляд, но становится странно сложным в спешке, когда вы пытаетесь настроить как минимум. –  TechZen 01.06.2011 в 18:06
  • Я не ожидаю особого уровня сложности. Я полагаю, что синхронизация - сложная задача, даже философски говоря :) Я не ищу простого решения. Я ищу решение. –  marzapower 01.06.2011 в 19:17
  • Btw, я не хочу синхронизировать «в облаке» (пока). Я просто хочу синхронизировать между устройствами. Позже я подумаю о облаках, дождях и т. Д. –  marzapower 01.06.2011 в 19:17
  • приложения с «синхронизацией» между устройствами обычно - либо простая передача данных, либо грубая сила - есть много вопросов, которые необходимо задать и ответить, прежде чем приступать к решению. –  bshirley 02.06.2011 в 03:37
2

«Couchbase для iOS» может удовлетворить ваши потребности

Ссылка

Согласно readme:

Mobile Couchbase for iOS

Apache CouchDB on iOS provides a simple way to sync your application

data across devices and provide cloud backup of user data. Unlike other cloud solutions, the data is hosted on the device by Couchbase Mobile, so even when the network is down or slow (airplane, subway, backyard) the application is responsive to users.

What this means for you:

You can embed the rock solid distributed database, Mobile

Couchbase, on your iOS device. Your iOS apps can use Apache CouchDB's well-proven synchronization technology. If you <3 CouchApps, you can deploy them as iOS apps.

    
ответ дан Anthony Kong 29.05.2011 в 18:22
  • Трис явно перспективен ... Но мне придется перенести мою существующую базу данных Core Data на эту новую, и это немного страшно ... –  marzapower 29.05.2011 в 20:25
  • Проблема для Couchbase заключается в том, что она обеспечивает метод синхронизации данных «в облаке», а не p2p-подход для синхронизации данных между устройствами напрямую ... –  marzapower 01.06.2011 в 15:34
  • @marzapower - это распределенная база данных, думаю, git как db. Таким образом, не нужно облако устройств <->, так же простое устройство <-> устройство. Нет, у него нет автоматического обнаружения хоста, но его можно настроить в приложении –  theraven 11.07.2011 в 07:25
  • URL устарел (см. описание репо), новый URL: github.com/couchbaselabs/iOS-Couchbase-manifest –  mAu 30.07.2012 в 12:15
-1

Я бы начал с Apple API Sync Services и посмотрите, соответствует ли это вашим потребностям. В принципе, это позволит вам синхронизировать все устройства и сервисы Apple.     

ответ дан TechZen 01.06.2011 в 18:03
  • Предоставляет ли эта служба возможность синхронизации между различными устройствами напрямую? Я имею в виду, не используя компьютер или облачную службу посередине. –  marzapower 01.06.2011 в 19:02
  • stackoverflow.com/questions/3276888/sync-services-and-ios: службы синхронизации недоступны на устройствах iOS ... поэтому для меня это бесполезно. –  marzapower 01.06.2011 в 19:11
  • И ходят слухи, что iSync и сервисы, которые лежат в основе этого, уходят в Lion. –  Dan Ray 02.06.2011 в 14:08