Как приложение watchOS 2.2 может определить, переключился ли сопряженный с ним iPhone на другие Apple Watch?

Я пытаюсь поддерживать новую функцию сопряжения с несколькими часами в своем приложении для iOS 9.3/watchOS 2.2. Кажется, это работает хорошо, за исключением того, что я не могу понять, как приложение watchOS может определить, был ли сопряженный iPhone переключен на другие Apple Watch.

документы говорят, что WCSession остается активированным с точки зрения расширения WatchKit на протяжении всего жизненного цикла переключения, и из моего тестирования в Xcode кажется, что сеанс просмотра сообщает, что iPhone также доступен, даже если телефон перешел на другие часы.

В настоящее время у меня нет нескольких часов, чтобы проверить, одинаково ли они ведут себя на реальном устройстве.


person Jon Colverson    schedule 29.03.2016    source источник


Ответы (1)


Конкретный ответ на ваш вопрос:

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

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

Мои выводы:

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

Неподключенное приложение для часов может продолжать использовать все способы передачи, включая интерактивный обмен сообщениями (хотя исходящие данные ставятся в очередь системой и не передаются пока пользователь не переключится обратно на эти часы).

Я проверил, что данные помещаются в очередь, используя два разных подхода:

  • используя словарь transferUserInfo из часов, запуская цикл выполнения, повторяя этот процесс несколько раз, а затем просматривая массив outstandingUserInfoTransfers.
  • используя обработчик ответа sendMessage, который запускается только после того, как пользователь переключится обратно на эти часы и получит ответ.

После обратного переключения все переводы в очереди немедленно отправляются на его телефон, а любые интерактивные ответы затем принимаются часами.

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

Новый пример кода:

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

Вы можете изменить обозначение и цвет неиспользуемых часов, использовать панель «Устройства Xcode», чтобы переключиться на эти часы, а затем заметить, что приложение iOS немедленно показывает новое обозначение и цвет этих часов (которые были поставлены в очередь, пока часы не использовались).

Возможное reachable несоответствие документации:

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

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

person Community    schedule 29.03.2016