从应用程序发送消息到Swift中的watchOS

时间:2015-06-28 17:49:58

标签: ios swift watchkit

是否可以从我的应用程序向我的watchOS扩展程序发送消息,所以我从前。可以更新我的手表用户界面吗?

我使用WKInterfaceController.openParentApplication从观看扩展程序向应用程序发送信息。但是我该如何做相反的方式 - 从App到Watch扩展?

2 个答案:

答案 0 :(得分:1)

如果您正在为watchOS2开发,可以使用WatchConnectivity。这为您提供了几种在手表和iPhone之间来回传输数据的选项。

如果要将手表中的消息发送到iPhone(两者都处于活动状态时),请使用交互式消息传递。阅读有关WatchConnectivity的更多信息,了解发送数据的不同方式。我会给你一个简短的代码示例。

您需要在watch和iOS上扩展WCSessionDelegate。

if (WCSession.isSupported()) {
     let session = WCSession.defaultSession()
     session.delegate = self 
     session.activateSession()
     
}

if (WCSession.defaultSession().reachable) {
    //This means the companion app is reachable
}

在您的手表上,这将发送数据。

let data = //This is the data you will send
WCSession.defaultSession().sendMessage(data,
       replyHandler: { ([String : AnyObject]) → Void in

       })
        errorHandler: { (NSError) → Void in

});

在你的iPhone上接收数据实现委托方法:

func session(_ session: WCSession,
    didReceiveMessage message: [String : AnyObject])

答案 1 :(得分:0)

观看OS 4 +

更新@Philip设置会话后需要做的回答

你需要使用replyHandler方法从iPhone获取数据到WatchOS App Extention,就像这样

WCSession.default.sendMessageData(Data(), replyHandler: { (data) in
            let deviceId = String(data: data, encoding: .utf8)
            print("DEVICE ID : \(deviceId)")
            DataModel.shared.deviceId = deviceId
        }, errorHandler: nil)

这将根据您的要求从Watch App Extension调用。

在Main App Delegate中,您需要实现WatchKit Session Delegate

   // WATCH OS MESSAGE RECIEVE WITH REPLY HANDLER
    func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Void) {
        print("SESSION MESSSAGE DATA: \(messageData)")
        if let deviceId = UIDevice.current.identifierForVendor?.uuidString,
            let data = deviceId.data(using: .utf8) {
            print("REPLY HANDLER MESSSAGE DATA: \(data)")
            replyHandler(data)
        }
    }

replyHandler中,您可以Data格式传递信息。