WCErrorCodeDeliveryFailed: не удалось доставить полезную нагрузку

Я работаю над приложением, которое обменивается данными между iPhone и Apple Watch, используя WCSession метод sendMessage:replyHandler:errorHandler:

После реализации этого метода я получаю сообщение об ошибке:

WCSession _onqueue_notifyOfMessageError:withErrorHandler: errorHandler: YES с WCErrorCodeDeliveryFailed.

Ошибка = Полезная нагрузка не может быть доставлена.

import Foundation
import WatchKit
import WatchConnectivity

class ResultInterfaceController: WKInterfaceController, WCSessionDelegate {

override func awake(withContext context: Any?) {
    super.awake(withContext: context)

    let applicationData = ["name": "ViratKohli"]
    self.sendToPhone(data: applicationData)
}

func sendToPhone(data: [String: Any]) {

    if WCSession.isSupported() {

        let session = WCSession.default
        session().delegate = self
        session().activate()

        if WCSession.default().isReachable {

            session().sendMessage(data, replyHandler: {(_ replyMessage: [String: Any]) -> Void in

                print("ReplyHandler called = \(replyMessage)")
                WKInterfaceDevice.current().play(WKHapticType.notification)
            }, 
            errorHandler: {(_ error: Error) -> Void in

                print("Error = \(error.localizedDescription)")
            })
         }
    }
}
....

Любая помощь приветствуется.


person SahyadriChava    schedule 10.02.2017    source источник
comment
Может быть, это вам поможет?   -  person Reinhard Männer    schedule 17.02.2017
comment
@ReinhardMänner нет. Это не   -  person SahyadriChava    schedule 20.02.2017


Ответы (2)


  1. У вас есть session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) на стороне ios WCSessionDelegate?
  2. Вы вызываете replyHandler() внутри этого метода?

Обратите внимание, что session(_ session: WCSession, didReceiveMessage message: [String : Any]) будет вызываться только для сообщений, отправленных без ответаHandler.

person abjurato    schedule 22.03.2017
comment
Это правильный ответ. Если указан replyHandler, но другое приложение не реализует вариант с replyHandler, запрос завершится ошибкой. - person Leo Natan; 29.07.2017
comment
Спасибо, я боролся с телефонной связью часов, пока не прочитал этот пост/ответ и не попробовал маршрут session:message:replyHandler: + вызов replyHandler()! - person Chris Allinson; 13.10.2018

Я был в той же беде. Если вы отправляете сообщение с помощью answerHandler , вам придется использовать

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {

}

вместо

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {

}

для получения сообщений.

person Amrit Sidhu    schedule 26.04.2018