Подтвердить что ты не робот

IPhone офлайн приложение с синхронизацией

Я изучаю создание приложения, которое работает так же хорошо, как и в Интернете. Поскольку приложение не может взаимодействовать с сервером во время автономной работы, существует определенный уровень синхронизации, который должен иметь место.

Каковы хорошие инструменты для чтения и начать думать о планировании автономных операций с синхронизацией для вашего iPhone?

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

4b9b3361

Ответ 1

в магазине приложений есть множество приложений, которые полагаются как на онлайн, так и на автономные данные.

то, что вы действительно должны делать, это запустить приложение, запустить фоновый поток (который работает тихо, чтобы ваш пользователь никогда не видел никакой задержки). этот поток загружает последние данные с вашего сервера и помещает их в вашу локальную базу данных (sqlite - лучший выбор)

убедитесь, что вы реализуете какое-то управление версиями данных, чтобы ваше приложение загружало только данные, которые фактически были изменены с момента последней загрузки, - иначе вы без необходимости загрузили весь набор данных, который может быть довольно огромным (в зависимости от требований к вашему приложению)

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

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

в iphone os 3.0 apple представила push-сервисы - где вы можете просто "PUSH" ваши данные вместо того, чтобы делать "PULL", однако это недоступно в текущей iPhone OS (2.x.x)

Ответ 2

Я работаю над приложением, которое обрабатывает это точное поведение в течение последних двух месяцев или около того. Он имеет небольшое подмножество функций, которые доступны только в Интернете, и большой набор функций, которые находятся в автономном режиме/онлайн.

Я использую sqlite для локального хранилища, как предлагается здесь, с модифицированной версией библиотеки sqlitepersistentobjects. Базовая версия sqlitepersistentobjects не является потокобезопасной, поэтому следите, если вы ее используете. (ознакомьтесь с objectiverecord в: objectivesync для альтернативы потокобезопасности, но будьте готовы копаться в коде). Если вы захотите разработать для 3.0 sdk, то основные данные - это еще одна возможность для библиотеки sqlite.

Общая архитектура достаточно проста. Я смоделировал локальное хранилище с использованием sqlite и удаленного взаимодействия, используя объективный ресурс против приложения rails и REST api. Он может использовать xml или json для сериализации данных.

Когда объект изменен локально, изменение сначала сохраняется в записи базы данных sqlite для этого объекта, а затем добавляется в очередь, которая сериализуется и хранится в локальной базе данных sqlite. (Затем очередь может быть обработана в любое время)

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

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

Хорошая вещь об использовании NSOperationQueue и NSOperation заключается в том, что они обрабатывают фоновый поток для вас, поэтому я настоятельно рекомендую взглянуть на документы Apple для этих классов, а также на apple руководство по потокам.

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

Это краткий обзор того, с чем мне пришлось иметь дело до сих пор... надеюсь, что это поможет немного.

Ответ 3

Push, вероятно, не является жизнеспособным вариантом здесь, так как количество данных, которое вы можете нажимать, является незначительным и в основном возвращается к "сообщать моему приложению о вызове сервера". Мы используем онлайн-модель в Satchel. Всякий раз, когда нам приходится общаться с сервером, мы связываем это сообщение (URL и, возможно, некоторые данные POST) и храним его в базе данных. Если мы в сети, мы вытаскиваем его обратно, отправляем его, и когда мы получаем правильный ответ, мы удаляем запись из базы данных. Если мы в автономном режиме, эти строки создаются, и в следующий раз, когда мы в сети, они будут отправлены. Это не работоспособная модель во всех ситуациях, но она может быть адаптирована к большинству.

В 3.0 у вас есть доступ к CoreData, который является отличным инструментом управления данными. Кроме того, семья NSURLXXX - ваш друг.

Ответ 4

http://blog.webscale.co.in/?p=159 В этой статье перечислены подходы к обработке автономной/онлайн-синхронизации данных. Он может помочь вам, если вы хотите создать свою собственную инфраструктуру.

Ответ 5

Я бы сохранил всю информацию, которую я собираю, находясь в автономном режиме в базе данных SQLite. Затем, по запросу пользователя, вы можете СИНХРОНИРОВАТЬ всю сохраненную информацию на сервере с использованием HTTP или настраиваемого протокола TCP/IP, который вы можете найти.

Я использую этот подход для приложений Palm OS уже почти 10 лет, и они работают очень эффективно.

Насколько мне известно, единственным "инструментом", который вам придется выполнить, является простой старый OBJECTIVE-C с Cocoa Touch. Хотя вы можете использовать некоторые библиотеки С++ TCP/IP, которые облегчат вам жизнь, если вы решите реализовать свой собственный протокол.

Ответ 6

Интересно, если вы решили использовать Sync Framework для управления синхронизацией. Если это вас интересует, вы можете взглянуть на проект с открытым исходным кодом, службу OpenMobster Sync. Вы можете выполнять следующие операции синхронизации.

  • двухсторонняя
  • односторонний клиент
  • одностороннее устройство
  • Bootup

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

Кроме того, изменения в облаке синхронизируются с помощью Push-уведомлений, поэтому данные всегда актуальны, даже если они хранятся локально.

Вот ссылка на проект с открытым исходным кодом: http://openmobster.googlecode.com

Вот ссылка на iPhone App Sync: http://code.google.com/p/openmobster/wiki/iPhoneSyncApp