1

I'm working on a watch app. I have to send data from the mobile to watch. This is working properly.

The main problem occurs when I'm sending message from watch to mobile app because I want that the communication to be initiated by watch app. I have implemented the method to send data from watch to mobile app but always getting this

"WCErrorDomain Code=7014 "Payload could not be delivered." error.

I'm using xcode 7.3 and watchOS version is 2.0.

One more thing: is it possible that the sendMessage method opens the mobile app in background using watch connectivity framework?? Or if anyone knows any other way to open the mobile app in background then please suggest me. Thanks in advance.

session.sendMessage(message, replyHandler: { reply in
       }, errorHandler: { error in
               print("error: \(error)")
        })

EDIT

In AppDelegate and ExtensionDelegate:

override init() {
    super.init()
    setupWatchConnectivity()
}

private func setupWatchConnectivity() {
    if WCSession.isSupported() {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}

In ExtensionDelegate:

func sendMessage(){
    let session = WCSession.defaultSession()
    let applicationData:[String:AnyObject] = ["text":"test", "badgeValue": 100 ]

    WatchSessionManager.sharedManager.sendMessage(applicationData, replyHandler: {replyMessage in
        print("reply received from iphone")
        }, errorHandler: {(error ) -> Void in
            // catch any errors here
            print("no reply message from phone")
    })
}

In AppDelegate:

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    let text = message["text"] as! String
    let badgeValue = message["badgeValue"] as! Int

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        print("iphone received message from watch App")
        self.sendNotification(text, badgeValue: badgeValue)
        let applicationDict = ["wake": "nowAwake"]
        replyHandler(applicationDict as [String : String])

    }

}

In watchSessionManager :

        func sendMessage(message: [String : AnyObject], replyHandler: (([String : AnyObject]) -> Void)?, errorHandler: ((NSError) -> Void)? = nil){

       session.sendMessage(message, replyHandler: { reply in
            }, errorHandler: { error in
                print("error: \(error)")
        })
          print("mesage %@",message)

    }
gurmeet kaur
  • 111
  • 1
  • 10

0 Answers0