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)
}