Я пытаюсь проснуться с родительским приложением iOS, отправив сообщение из расширения watchkit.как просыпаться родительское приложение iOS с sendMessage из complicationController
Это, хотя работает, только если ниже функция sendMessage вызывается из watchApp/ViewController. Когда он вызывается из ComplicationController, сообщение отправляется, но родительское приложение iOS теперь пробуждается.
Любые советы, оцененные. (Пожалуйста, любой код ссылки в Swift)
Вот упрощенный код:
В AppDelegate и ExtensionDelegate:
override init() {
super.init()
setupWatchConnectivity()
}
private func setupWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
В ExtensionDelegate: (не проблема здесь, сообщение не отправлено)
func sendMessage(){
let session = WCSession.defaultSession()
let applicationData:[String:AnyObject] = ["text":"test", "badgeValue": 100 ]
session.sendMessage(applicationData, replyHandler: {replyMessage in
print("reply received from iphone")
}, errorHandler: {(error) -> Void in
// catch any errors here
print("no reply message from phone")
})
}
print("watch sent message")
}
В AppDelegate: (не получено, когда приложение iOS не работает/не находится на переднем плане)
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])
}
}
это как функция вызывается из Усложнение контроллера (который не послать сообщение, но не будить родительское приложение):
func requestedUpdateDidBegin(){
dispatch_async(dispatch_get_main_queue()) {() -> Void in
let extensionDelegate = ExtensionDelegate()
extensionDelegate.loadData()
}
}
Я только что проверил ваш код на симуляторах и на iPhone/Watch. Это пробуждает приложение, даже если я его никогда не открывал. Он работает, когда приложение запущено, когда приложение находится в фоновом режиме и когда приложение полностью убито. – joern
Что заставляет вас думать, что приложение не проснулось? – joern
благодарю вас за ваше усилие. Действительно оценен. Просто протестируйте то же самое с исключительно над кодом, и вы правы. Действительно странно. Кажется, проблема не в коде выше, а в том, как я это называю. В моем приложении я вызываю sendMessage (который находится в ExtensionDelegate) из ComplicationController, и в этом случае сообщение отправляется, но родительское приложение не пробуждается. Если я вместо этого запускаю sendMessage из приложения/из ViewController, сообщение отправляется, и родительское приложение действительно пробуждается. (как я знаю, по полученному ответу или нет) – TPeter