从 ios 向 watchos 发送消息的问题
Posted
技术标签:
【中文标题】从 ios 向 watchos 发送消息的问题【英文标题】:Issue in sending message from ios to watchos 【发布时间】:2021-09-16 20:52:53 【问题描述】:我正在尝试从我的 ios 应用向其配套的 Watch 应用发送消息。如果手表屏幕打开,那么一切正常,我可以看到消息。如果屏幕变黑,则表示手表“无法访问”并且我的消息不会被打印出来。
iOS 代码
// Invoking this function from viewDidLoad() of the view controller
func checkWatchConnectivityIsSupported()
if (WCSession.isSupported())
print ("WC Session is supported")
let session = WCSession.default
session.delegate = self
session.activate()
// sending messages on click of a button
func sendMessageToWatch(type: String, message: String)
print ("Sending message to watch \(type) \(message)")
// send a message to the watch if it's reachable
if (WCSession.default.isReachable)
print ("isReachable")
// this is a meaningless message, but it's enough for our purposes
let message = [type: message]
// WCSession.default.sendMessage(message, replyHandler: nil)
WCSession.default.sendMessage(message, replyHandler: nil, errorHandler: (err) in
print ("There was an error in sending message \(err)")
debugPrint(err)
)
else
// This happens when the watch screen display goes off.
print ("watch is not reachable")
WatchOS 代码 - InterfaceController.swift
// invoking this function from willActivate()
func checkIfWatchIsConnected()
if WCSession.isSupported()
let session = WCSession.default
session.delegate = self
session.activate()
// implementation of delegate methods
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)
func session(_ session: WCSession, didReceiveMessage message: [String : Any])
print ("Message received in watch \(message)")
WKInterfaceDevice().play(.click)
let isStatusType = message["Status"] != nil
if (isStatusType)
let text = message["Status"] as! String
statusLabel.setText(text)
return
【问题讨论】:
【参考方案1】:这是expected behaviour。
WatchKit 扩展。 iOS 设备在范围内,因此可以进行通信,并且 WatchKit 扩展正在前台运行,或者在后台以高优先级运行(例如,在锻炼会话或并发症正在加载其初始时间线数据时)。
当需要实时消息传递时,您使用 isReachable
和 sendMessage
。例如,为活动的配套 iOS 应用程序提供“远程控制”的手表应用程序或与手表上的活动锻炼应用程序通信的 iOS 应用程序。
为了让实时消息起作用,手表确实需要保持清醒。
您可以在手表未激活时使用updateApplicationContext
和transferUserInfo
方法将数据传输到您的配套应用。为了延长电池寿命,这些传输会排队等待并随机传输。
【讨论】:
非常感谢!!你是救生员:)以上是关于从 ios 向 watchos 发送消息的问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 WatchKit 扩展向 iOS 发送消息并得到回复如此缓慢?
使用应用程序上下文将数据从 iPhone 发送到 WatchOS 时遇到问题