watchOS2 应用程序和 iPhone 应用程序通信
watchOS2 app and iPhone app communication
在 watchOS1 中,我们有一个方法“openParentApplication”。此方法与 phone 应用程序通信,即使它不是 运行 在前台或后台,并立即获取回复。我需要 watchOS2 类似的东西。我希望我的手表应用程序立即与 phone 应用程序通信,即使我的 iPhone 应用程序不是 运行。 updateApplicationContext:error:
、sendMessage:replyHandler:errorHandler:
和 transferUserInfo:
等方法在这种情况下没有帮助。
有人可以建议我实现此目标的更好方法吗?
实际上 sendMessage:replyHandler:errorHandler:
正在做您所要求的。只要您的手表连接到 phone,它就会立即收到消息的回复。当应用程序在前台、后台或根本不在后台时,这都有效。
设置方法如下:
在 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:)
在 watchOS1 中,我们有一个方法“openParentApplication”。此方法与 phone 应用程序通信,即使它不是 运行 在前台或后台,并立即获取回复。我需要 watchOS2 类似的东西。我希望我的手表应用程序立即与 phone 应用程序通信,即使我的 iPhone 应用程序不是 运行。 updateApplicationContext:error:
、sendMessage:replyHandler:errorHandler:
和 transferUserInfo:
等方法在这种情况下没有帮助。
有人可以建议我实现此目标的更好方法吗?
实际上 sendMessage:replyHandler:errorHandler:
正在做您所要求的。只要您的手表连接到 phone,它就会立即收到消息的回复。当应用程序在前台、后台或根本不在后台时,这都有效。
设置方法如下:
在 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:)