在创建独立的watchOS应用程序时,是否可以使用WatchConnectivity框架?
documentation https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps声明,“当iOS设备可用时,独立的应用程序可以使用iOS从它的iOS伴生应用程序传输信息……”
但是我们如何在iOS应用程序和watchOS应用程序之间发送数据呢?检查isReachable属性时,WCSession对象始终返回false。
感谢您的帮助:)
发布于 2020-02-25 19:18:25
在使用WatchConnectivity之前,必须在iOS和watchOS上激活WCSession (首先检查设备是否支持WatchConnectivity的Apple suggests)。
激活是异步完成的。完成后,在会话对象的委托中调用func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) (必须在启动激活时设置)。
如果激活成功,则activationState现在为.activated。只有这样才能启动任何传输。
这里有several kinds of transfer。有些要求.isReachable为真,有些则不是。
updateApplicationContext(_:)向对应设备发送字典。它将在设备处于活动状态时被接收。如果在对方设备激活之前多次调用此函数,则只接收最后一个字典。此传输不需要.isReachable。
transferUserInfo(_:)还会发送一个字典,但如果多次调用该函数,则会发送所有字典。此传输也不需要 .isReachable。
sendMessage(_:replyHandler:errorHandler:)还会发送一个字典,如果该函数被多次调用,则会再次发送所有字典。此transfer 不需要.isReachable。
如果指定了replyHandler,则必须确保在系统尝试调用它时它确实可用。(可能发生的情况是,应用程序调用此函数,在发送回复之前转到后台,然后由系统终止。如果随后调用应答,线程将崩溃。)。
对于数据、文件和复杂情况,还有其他类型的传输,请参阅文档。
现在是.isReachable is handled differently on iOS and watchOS。
iOS:.isReachable为true,如果范围内存在成对的活动监视,则相应的WatchKit扩展正在运行,并且WatchKit扩展的.isReachable属性为true。
watchOS:如果.isReachable扩展在前台运行或在后台以高优先级运行,且iOS设备在范围内,则WatchKit为true。请注意,iOS应用程序是,而不是激活所需的。如果手表开始转接,而iOS应用程序未处于活动状态,则会在后台启动该应用程序,并可以处理通信。
您提到.isReachable始终为false。
因此,如果这与watchOS应用程序有关,原因可能是WCSession的激活未成功完成,或者iOS设备不在范围内。
如果这与iOS应用程序有关,则原因可能再次是WCSession的激活未成功完成、手表应用程序未在前台运行或未在后台以高优先级运行,或者手表不在范围内。
希望这能对你有所帮助!
https://stackoverflow.com/questions/60323964
复制相似问题