SwiftUI WCSession 仅在查看手表时才可访问

问题描述 投票:0回答:1

我正在构建一个手表和 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 活动会话,但消息失败,因为我没有看手表。有没有一种方法可以可靠地发送/接收消息,无论我是否在看手表?

swiftui watchkit apple-watch
1个回答
0
投票

根据您的描述和代码片段,当应用程序未在前台运行时,watchOS 应用程序中的 isReachable 属性似乎会切换为 false 。这就是为什么您没有收到成功消息的原因。

根据文档,这看起来是正确的行为:

WatchKit 扩展正在前台运行,或者在后台以高优先级运行(例如,在锻炼期间或当复杂功能加载其初始时间线数据时)

最可靠的解决方案之一是开始锻炼课程(如果适用于您的应用程序):HKWorkoutSession

您也可以考虑使用 WKExtendedRuntimeSession,但您的应用程序的会话应至少属于以下类型之一(请参阅使用扩展运行时会话):

  • 自我护理
  • 正念
  • 物理治疗
  • 智能报警

关于将数据从手机发送到手表

我的目标是从手机启动 IWatch 活动会话

您知道您需要什么沟通方式吗? https://developer.apple.com/documentation/watchconnectivity/wcsession#Communicating-with-the-Counterpart-App

© www.soinside.com 2019 - 2024. All rights reserved.