実際sendMessage:replyHandler:errorHandler:
には、あなたが求めていることを正確に行っています。時計が携帯電話に接続されている限り、すぐにメッセージへの応答を取得します。これは、アプリがフォアグラウンド、バックグラウンド、またはまったく実行されていないときに機能します。
設定方法は次のとおりです。
WatchExtension で:
セッションをセットアップします。通常、ExtensionDelegate で:
func applicationDidFinishLaunching() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
そして、アプリから何かが必要なときにメッセージを送信します。
if WCSession.defaultSession().reachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
}
}
iPhone アプリの場合:
セッションのセットアップは同じですが、今回はデリゲートも設定します。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
次にデリゲート メソッドを実装して、応答をウォッチに送信します。
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
これは、Watch と iPhone の間に接続があるときはいつでも機能します。アプリが実行されていない場合、システムはバックグラウンドで起動します。したがって、基本的には次のように機能しますopenParentApplication(_:reply:)