Синхронизация основных данных с несколькими часами

Я пишу приложение для iPhone и часов. Я планирую поддерживать возможность сопряжения нескольких часов с телефоном.

Приложение для iPhone и Watch будет выполнять чтение и запись в хранилище данных Core Data, и я буду использовать WatchConnectivity для их синхронизации (используя transferUserInfo:). Пользователь будет писать/диктовать что-то на одном устройстве, а это появится на другом.

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

  • User is using Phone/WatchA
    • Over the course of the day, user adds 10 items
  • В конце дня они переключаются на WatchB

Как WatchB будет синхронизироваться с телефоном/WatchA?

  • Будет ли WKSession автоматически воспроизводить transferUserInfo вызовов, которые были сделаны при сопряжении WatchA?
  • Нужно ли мне как-то отслеживать все, что нужно WatchB, и самому все переигрывать?
  • Мне просто отправить всю базу данных sqlite с помощью transferFile API (это кажется слишком)?

person djibouti33    schedule 25.07.2016    source источник
comment
Я понятия не имел, что люди владеют несколькими часами...   -  person Andrew    schedule 25.07.2016


Ответы (1)


Будет ли WKSession автоматически воспроизводить вызовы transferUserInfo, которые были сделаны при сопряжении WatchA?

Нет, не будет. Данные передаются только на сопряженные часы.

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

Нужно ли мне как-то отслеживать все, что нужно WatchB, и самому все переигрывать?

Короче говоря, да, если вы придерживаетесь такого подхода.

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

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

Мне просто отправить всю базу данных sqlite с помощью API fileTransfer (это кажется слишком)?

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

Какие новые функции помогут мне поддерживать часы в актуальном состоянии?

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

Этот ответ может быть полезен, даже если вы не используете усложнения.

Какие другие варианты?

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

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

Подход «Handoff» работает лучше всего, когда телефон и часы знают, какие были самые последние элементы, и пользователь может переключаться между телефоном и часами в течение дня.

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

person Community    schedule 25.07.2016
comment
Замечательный подробный ответ, спасибо. Я думаю, что мне нужно переосмыслить свою стратегию часов, поскольку, как мне кажется, для моих нужд это слишком громоздко для создания системы, которая может надежно синхронизироваться между x числом сопряженных устройств. - person djibouti33; 26.07.2016
comment
Если вы готовы хранить объекты данных в облаке, CloudKit предназначен для синхронизации между устройствами. Я бы не стал никого поощрять пытаться развернуть свою собственную систему. Это очень сложно, и в итоге у вас будет много технических долгов. Пусть Apple или кто-то другой разберется с этими тонкостями! :) - person ; 26.07.2016
comment
это действительно хороший момент, и я не учел. на самом деле я планирую интеграцию облачного набора для моей версии 2 (хочу сосредоточиться на выпуске версии 1 в качестве основного приоритета), так что это может быть подходящее время, чтобы добавить поддержку собственного облачного набора (и, следовательно, синхронизацию) на телефон и часы. тем временем, основываясь на вашем ответе, я уменьшил сложность и функциональность приложения для часов, что позволит мне быстрее выйти за дверь. на данный момент несколько часов в любом случае являются крайним случаем, поэтому я бы не хотел, чтобы это меня задерживало. - person djibouti33; 26.07.2016