Почему мое приложение для ОС Apple Watch может получать сообщения от моего приложения для iOS, только когда оно активно?

Я пытаюсь создать приложение для бега трусцой, которое взаимодействует с приложением Apple Watch. Когда я нажимаю кнопку «Пуск», приложение iOS должно сигнализировать моему приложению Watch, чтобы начать отслеживать мою тренировку. (например, отображение прошедшего времени, измерение частоты пульса и т. д.). Для этого приложение iOS и WatchOS должно обмениваться данными. Проблема с моим приложением в том, что мое приложение WatchOS может получать сигнал только от моего приложения iOS, когда оно включено. (например, экран часов включен)

Это код из моего приложения для iOS:

@objc func startAction() {
                 
    if WCSession.isSupported() {
        print("WC session is supported...")
        let session = WCSession.default
        session.delegate = self
        session.activate()

        session.sendMessage(["testWorkout":true], replyHandler: nil) { error in
            print("ERROR: \(error.localizedDescription)")
        }
    }    
}

А это код с другого конца (со стороны часов):

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
            
    WKInterfaceDevice.current().play(.start)
    
    print("message test workout")

}

Я получаю звук воспроизведения и сообщение на распечатке: сообщение о тестовой тренировке, когда Apple Watch включены, но когда экран Apple Watch выключен, приложение WatchOS не получает сигнала. Какой код я могу написать из конца приложения iOS (или что-нибудь еще, что я могу сделать из конца приложения WatchOS), чтобы разбудить приложение WatchOS?


person therealManUtdFan    schedule 28.01.2021    source источник


Ответы (1)


Вы не должны звонить sendMessage сразу после activate - сеанс может быть (и, вероятно, не будет) активным.

Вам нужно подождать, пока вы получите ответный вызов делегата activationDidCompleteWith, а затем вы может попытаться установить связь.

Прежде чем пытаться отправить данные, вы должны убедиться, что состояние сеанса .active, и повторно активировать сеанс, если он больше не активен.

person Paulw11    schedule 28.01.2021