【问题标题】:watch to phone communication - didReceiveApplicationContext not firing观看电话通信 - didReceiveApplicationContext 未触发
【发布时间】:2018-10-12 05:37:55
【问题描述】:

我在 AppleWatch 和 iPhone 之间通信时遇到问题。

  • iPhone 与 Watch 的通信工作正常。

  • 观看 iPhone:AppDelegate 中的didReceiveApplicationContext 不会触发!!!

-

我在 (iPhone) AppDelegate 中有这个:

import WatchConnectivity

-

if WCSession.isSupported() {
    WCSession.default.delegate = self
    WCSession.default.activate()
}

...

extension AppDelegate: WCSessionDelegate {

    // MARK: WCSessionDelegate

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        //
    }

    func sessionDidBecomeInactive(_ session: WCSession) {
        //
    }

    func sessionDidDeactivate(_ session: WCSession) {
        //
    }

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
        DispatchQueue.main.async {
            print("Phone didReceiveApplicationContext")
        }
    }
} 

在我的手表 InterfaceController 中:

import WatchConnectivity

-

if WCSession.isSupported() {
    WCSession.default.delegate = self
    WCSession.default.activate()
}

-

extension InterfaceController: WCSessionDelegate {

    // MARK: WCSessionDelegate

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        //
    }

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
        DispatchQueue.main.async {
            print("Watch didReceiveApplicationContext")
        }
    }
}

-

我正在尝试通过“更新应用上下文”来进行交流,如下所示:

@IBAction func buttonPressed() {
    guard WCSession.isSupported() else {
        return
    }

    let message = ["buttonPressed" : true]
    do {
        try WCSession.default.updateApplicationContext(message)
    } catch {
        print("Something went wrong")
    }
}

-

为什么 AppDelegate 中的 didReceiveApplicationContext 方法没有触发?

-

我发现调试 Watch 应用程序非常复杂,包括必须将调试器附加到 iPhone 应用程序等。也许我的调试方式根本上存在一些问题?

【问题讨论】:

    标签: swift apple-watch watchos watchconnectivity watchos-simulator


    【解决方案1】:

    由于我终于找到了解决方案(经过大量的反复试验和搜索),因此可以将其作为副本关闭。

    我不确定 WCSession.default.updateApplicationContext 的问题是什么,但下面的 SO 帖子解释说您可以使用 sendMessage,尽管您必须小心 replyHandler

    如果您使用 sendMessage:replyHandler:errorHandler: 从手表发送消息,则只有相应的委托方法 (session:message:replyHandler:) 会在手机上的 AppDelegate 中触发。而且,您必须致电replyHandler!!!

    WCErrorCodeDeliveryFailed: Payload could not be delivered

    所以,我将 updateApplicationContext 用于电话 > 手表,sendMessage:replyHandler:errorHandler: 用于手表 > 电话

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 2016-01-14
      • 2019-02-28
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多