我正在构建一个手表和 iPhone ios 配套应用程序,并且在可靠地触发两个应用程序之间的消息时遇到问题。在这两个应用程序中,我在加载的视图模型中触发 WC onInit,这些似乎注册正确:
if !WCSession.default.isReachable {
if (WCSession.isSupported()) {
WCSession.default.delegate = self
WCSession.default.activate()
}
}
然后在每个设备上的视图上,我都有以下代码,其中 CONTEXT 替换为 WATCH 或 IPHONE
.onReceive(timer) { time in
if WCSession.default.isReachable {
print("Checking WCSession CONTEXT SUCCESS")
}
else{
print("Checking WCSession CONTEXT FAILURE")
}
}
我发现只有当我看着手表时我才会收到成功消息,它会进入某种睡眠或非活动模式,除非 IWATCH 被旋转并且我正在看着它(或者例如我点击它)。我的目标是从电话启动 IWatch 活动会话,但消息失败,因为我没有看手表。有没有一种方法可以可靠地发送/接收消息,无论我是否在看手表?
根据您的描述和代码片段,当应用程序未在前台运行时,watchOS 应用程序中的 isReachable 属性似乎会切换为 false 。这就是为什么您没有收到成功消息的原因。
根据文档,这看起来是正确的行为:
WatchKit 扩展正在前台运行,或者在后台以高优先级运行(例如,在锻炼期间或当复杂功能加载其初始时间线数据时)
最可靠的解决方案之一是开始锻炼课程(如果适用于您的应用程序):HKWorkoutSession。
您也可以考虑使用 WKExtendedRuntimeSession,但您的应用程序的会话应至少属于以下类型之一(请参阅使用扩展运行时会话):
关于将数据从手机发送到手表
我的目标是从手机启动 IWatch 活动会话
您知道您需要什么沟通方式吗? https://developer.apple.com/documentation/watchconnectivity/wcsession#Communicating-with-the-Counterpart-App