使用WatchConnectivity框架的独立手表应用程序



在创建独立的watchOS应用程序时,是否可以使用WatchConnectivity框架?

文件https://developer.apple.com/documentation/watchkit/creating_independent_watchos_apps声明,"当iOS设备可用时,独立应用程序可以使用WatchConnectivity从其iOS配套应用程序传输信息…">

但是我们如何在iOS应用程序和watchOS应用程序之间发送数据呢?当检查isReachable属性时,WCSession对象总是返回false

感谢您的帮助:(

在使用WatchConnectivity之前,必须在iOS和watchOS上激活WCSession(苹果建议您首先检查设备是否支持WatchConnectibility(。

激活是异步完成的。完成后,在会话对象的委托中调用func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)(在启动激活时必须设置(
如果激活成功,则激活状态现在为.activated。只有这样,才能启动任何转移。

有几种转移方式。有些要求.isReachable为真,有些则不然。

CCD_ 8向对方设备发送字典。它将在设备处于活动状态时接收。如果在对方设备激活之前多次调用此函数,则只接收最后一个字典。此传输不需要.isReachable

transferUserInfo(_:)还会发送一个字典,但如果函数被多次调用,则会传递所有字典。此传输也不需要.isReachable

sendMessage(_:replyHandler:errorHandler:)还发送一个字典,如果函数被多次调用,则再次传递所有字典。此传输确实需要.isReachable
如果指定了replyHandler,则必须确保在系统尝试调用它时它实际上是可用的。(可能发生的情况是,应用程序调用此函数,在发送回复之前转到后台,然后被系统终止。如果随后调用回复,线程将崩溃。(

还有其他类型的数据、文件和复杂情况的传输,请参阅文档。

现在.isReachable在iOS和watchOS上的处理方式有所不同。

iOS:.isReachabletrue,如果配对的活动手表在范围内,则相应的WatchKit扩展正在运行,WatchKit的.isReachable属性是true

watchOS:.isReachabletrue,如果WatchKit扩展在前台运行或在后台以高优先级运行,并且iOS设备在范围内。请注意,iOS应用程序不需要才能激活。如果手表开始传输,而iOS应用程序未处于活动状态,则会在后台启动,并可以处理通信。

你提到.isReachable总是false
因此,如果这与watchOS应用程序有关,原因可能是WCSession的激活未成功完成,或者iOS设备不在范围内
如果这与iOS应用程序有关,原因可能再次是WCSession的激活没有成功完成,手表应用程序没有在前台运行,或者没有在后台以高优先级运行,或者手表不在范围内
希望这能有所帮助!

相关内容

最新更新