【发布时间】:2017-11-04 15:17:39
【问题描述】:
我正在开发一个需要与 iOS 应用程序通信的 WatchApp,并且我正在使用 Watch Connectivity fwk 来做到这一点。
每次用户显示我的 WatchApp 时,我都需要从 iOS 应用程序中获取一组必须在 Watch 上显示的新数据。
为了获取这些数据,我正在使用 sendMessage(_:replyHandler:errorHandler:) 但有时这种通信似乎无法正常工作,因为我的 WatchApp 没有更新。 从 Xcode 启动 WatchApp 时我没有问题,只有在我在现实生活中使用它时才会出现问题。
每次我的WatchApp回调时,我都会触发WatchApp和iOS App之间的同步:
- WKInterfaceController.willActivate()(我只有一个Controller)
-
WCSessionDelegate.session(WCSession, didReceiveApplicationContext:
[String : Any]) 当activationState == .activated 时 -
WCSessionDelegate.sessionReachabilityDidChange(WCSession) 当
会话可达
在 2015 年 WWDC 的“Introducing Watch Connectivity”视频中,演讲者告诉在向 iOS 应用发送交互式消息时,WatchKit 扩展程序必须在前台运行。
这是否意味着我需要在调用 sendMessage(_:replyHandler:errorHandler:) 之前检查 WKExtention.shared().applicationState == .active,在添加 WCSession.activationState == .activated ?
当我的 WatchApp 在 Dock 中并且用户显示 Dock 时,我的 WatchApp 有 WKExtension.shared().applicationState == .inactive 和 WKExtension.shared().isApplicationRunningInDock == true,我可以使用 sendMessage(_:replyHandler:errorHandler:) 在这种状态下更新我的应用程序吗?
我只是想知道在使用 sendMessage(_:replyHandler:errorHandler:) 之前需要检查哪些条件。
谢谢,
【问题讨论】:
标签: ios watchkit wcsession watchos-4 wkextension