ウォッチキット拡張機能からメッセージを送信して、iOS 親アプリを起動しようとしています。
これは、以下の 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])
}
}
これは、Complication Controller から関数が呼び出される方法です (メッセージは送信されますが、親アプリは起動されません)。
func requestedUpdateDidBegin(){
dispatch_async(dispatch_get_main_queue()) { () -> Void in
let extensionDelegate = ExtensionDelegate()
extensionDelegate.loadData()
}
}