繁体   English   中英

为什么我的 Apple Watch OS 应用程序只能在我的 iOS 应用程序处于活动状态时接收消息?

[英]Why can my Apple Watch OS app receive message from my iOS app only when it is active?

我正在尝试构建一个与 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 应用程序?

您不应在activate后立即调用sendMessage - session 可能不会(也可能不会)处于活动状态。

您需要等到获得activationDidCompleteWith委托回调,然后才能尝试通信。

在尝试发送数据之前,您应该检查.active state 是否处于活动状态,如果不再活动,则重新激活 session。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM