为啥我的 Apple Watch OS 应用只有在 iOS 应用处于活动状态时才能收到来自我的 iOS 应用的消息?
Posted
技术标签:
【中文标题】为啥我的 Apple Watch OS 应用只有在 iOS 应用处于活动状态时才能收到来自我的 iOS 应用的消息?【英文标题】:Why can my Apple Watch OS app receive message from my iOS app only when it is active?为什么我的 Apple Watch OS 应用只有在 iOS 应用处于活动状态时才能收到来自我的 iOS 应用的消息? 【发布时间】:2021-01-28 21:40:23 【问题描述】:我正在尝试构建一个与 Apple Watch 应用程序通信的慢跑应用程序。当我按下“开始”按钮时,ios 应用程序应该向我的 Watch 应用程序发出信号以开始跟踪我的锻炼。 (例如,显示经过的时间、测量心率等)为了实现这一点,iOS 和 WatchOS 应用程序应该进行通信。我的应用程序的问题是我的 WatchOS 应用程序只能在我的 iOS 应用程序打开时接收信号。 (例如,手表屏幕已打开)
这是来自我的 iOS 应用的代码:
@objc func startAction()
if WCSession.isSupported()
print("WC session is supported...")
let session = WCSession.default
session.delegate = self
session.activate()
session.sendMessage(["testWorkout":true], replyHandler: nil) error in
print("ERROR: \(error.localizedDescription)")
这是另一端的代码(来自手表端):
func session(_ session: WCSession, didReceiveMessage message: [String : Any])
WKInterfaceDevice.current().play(.start)
print("message test workout")
我在 Apple Watch 开启时听到播放声音和打印输出消息:“消息测试锻炼”,但是 当 Apple Watch 的屏幕关闭时,WatchOS 应用程序不会收到任何信号。我可以从 iOS 应用程序端编写什么代码(或者我可以从 WatchOS 应用程序端执行任何其他操作)来唤醒 WatchOS 应用程序?
【问题讨论】:
【参考方案1】:您不应该在activate
之后直接调用sendMessage
- 会话可能不会(也可能不会)处于活动状态。
您需要等到收到activationDidCompleteWith
委托回调,然后才能尝试通信。
在尝试发送数据之前,您应该检查会话状态是否为.active
,如果会话不再处于活动状态,则重新激活它。
【讨论】:
以上是关于为啥我的 Apple Watch OS 应用只有在 iOS 应用处于活动状态时才能收到来自我的 iOS 应用的消息?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 iPhone 无法从 Apple Watch 获取心率数据,但手表扩展程序却可以?
为啥我的 iPhone 无法从 Apple Watch 获取心率数据,但手表扩展程序却可以?
为啥通过 Apple Watch 向 iPhone 发送消息时 print() 不起作用?