Единственная проблема - какой BAAS использовать - например, может быть PlayFab, если он ориентирован на игру, может быть PubNub, если он действительно управляем сообщениями, может быть ably.io, может быть kinvey, если вы корпоративный - что угодно.

отал над способом синхронизации основных данных, хранящихся в приложении iPhone, между несколькими устройствами, такими как iPad или Mac. Существует не так много (если таковые имеются) синхронизирующих сред для использования с Core Data на iOS. Тем не менее, я думал о следующей концепции:

Внесено изменение в локальное базовое хранилище данных, и оно сохранено. (a) Если устройство подключено к сети, оно пытается отправить набор изменений на сервер, включая идентификатор устройства, отправившего набор изменений. (b) Если набор изменений не достигает сервера, или если устройство не подключено к сети, приложение добавит набор изменений в очередь для отправки, когда оно появится в сети.Сервер, находящийся в облаке, объединяет определенные наборы изменений, которые он получает, со своей основной базой данных.После объединения набора изменений (или очереди наборов изменений) на облачном сервере сервер передает все эти наборы изменений на другие устройства, зарегистрированные на сервере, с использованием некоторой системы опроса. (Я думал использовать сервисы Apple Push, но, судя по комментариям, это не работоспособная система.)

Есть ли что-нибудь необычное, о чем мне нужно подумать? Я посмотрел на каркасы REST, такие какObjectiveResource, Основной ресурс, а такжеRestfulCoreData, Конечно, все они работают с Ruby on Rails, с которым я не связан, но это место для начала. Основные требования, которые я предъявляю к своему решению:

Любые изменения следует отправлять в фоновом режиме, не останавливая основной поток.Следует использовать как можно меньшую пропускную способность.

Я подумал о ряде проблем:

Убедитесь, что идентификаторы объектов для разных хранилищ данных на разных устройствах прикреплены к серверу. То есть у меня будет таблица идентификаторов объектов и идентификаторов устройств, которые связаны через ссылку на объект, хранящийся в базе данных. У меня будет запись (DatabaseId [уникален для этой таблицы], ObjectId [уникален для элемента всей базы данных], Datafield1, Datafield2), поле ObjectId будет ссылаться на другую таблицу, AllObjects: (ObjectId, DeviceId, DeviceObjectId). Затем, когда устройство выдвигает набор изменений, оно передает идентификатор устройства и идентификатор объекта из основного объекта данных в локальном хранилище данных. Затем мой облачный сервер проверит соответствие objectId и идентификатора устройства в таблице AllObjects и найдет запись для изменения в исходной таблице.Все изменения должны иметь временные метки, чтобы их можно было объединить.Устройству придется опрашивать сервер, не расходуя слишком много батареи.Локальные устройства также должны будут обновлять все, что хранится в памяти, если / когда изменения получены от сервера.

Есть ли что-то еще, что мне здесь не хватает? На какие рамки мне следует обратить внимание, чтобы сделать это возможным?

Ответы на вопрос(9)

Ваш ответ на вопрос