ios - watchOS 2.2 应用程序如何确定其配对的 iPhone 是否已切换到另一台 Apple Watch?

标签 ios watchos-2 wcsession ios9.3

我正尝试在我的 iOS 9.3/watchOS 2.2 应用程序中支持与多个 watch 配对的新功能。它似乎运行良好,除了我无法弄清楚 watchOS 应用程序如何确定配对的 iPhone 是否已切换到另一个 Apple Watch。

docs假设 WCSession 在整个切换生命周期中从 WatchKit 扩展的角度来看都保持激活状态,并且从我在 Xcode 中的测试来看, watch session 似乎报告说即使手机有 iPhone 也可以访问已切换到另一只 watch 。

我目前没有多个 watch 来检查实际设备上的行为是否相同。

最佳答案

您问题的具体答案:

watch 不再连接的事实并不明显,因为可以使用所有传输方法,包括即时消息。传输只是被推迟,直到用户切换回该 watch 。

由于未连接的 watch 仍然可以向其配对的 iPhone 发起传输,您可能必须实现某种握手或超时检测,并查看手机是否无法及时响应。

我的发现:

看来未连接的 watch 并不意味着知道用户已切换到不同的 watch 。正如您所指出的, watch 应用程序的 session 仍然处于事件状态,并且 watch (模拟器)仍然报告电话可以接通。

未连接的 watch 应用程序可以继续使用所有传输方法包括交互式消息传递(尽管传出数据确实会被系统排队,并且在用户切换回该 watch 之前不会转移)。

我已使用两种不同的方法验证数据已排队:

  • 通过使用来自 watch 的 transferUserInfo 字典,让运行循环执行,重复该过程几次,然后检查 outstandingUserInfoTransfers 数组。
  • 使用 sendMessage 回复处理程序,该处理程序仅在用户切换回 watch 并收到回复后运行。

一旦切换回来,所有排队的传输都会立即发送到它的手机,然后 watch 会收到任何交互响应。

虽然未连接的 watch 能够将数据排队到其配对的 iPhone(因为它的 session 仍处于事件状态),但手机只能与其连接的 watch 通信,因为手机不再与任何未连接的 watch 进行事件 session 观看。

新示例代码:

您可以试用新的 QuickSwitch sample code .它使用 updateApplicationContext 将任何 watch 的标识符和颜色传递到手机。

您可以更改未使用 watch 的代号和颜色,使用 Xcode 设备 Pane 切换到该 watch ,然后注意 iOS 应用会立即显示该 watch 的新代号和颜色(同时 watch 未使用过)。

可能的 reachable 文档不一致:

In your WatchKit extension, the value of this property is YES when a matching session is active on the user’s iPhone and the device is within range so that communication may occur.

因为我没有第二 block watch ,所以我无法测试未使用的 watch 的可达性是否会在手机超出范围时变为 false。

关于ios - watchOS 2.2 应用程序如何确定其配对的 iPhone 是否已切换到另一台 Apple Watch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293124/

相关文章:

swift - (观看连接)WCSession 缺少其委托(delegate)(仅在 XCode11.0 中)

ios - WCSession:使用 transferUserInfo 或 sendMessage 的最佳方式?

iphone - 从付费到免费,带 IAP : Preventing double-charging

android - 我的 React Native 应用程序卡在加载循环中

ios - WCSession transferUserInfo 仅适用于前台

swift - 如何在非事件 watch 收到本地通知时触发触觉警报

watchkit - transferCurrentComplicationUserInfo 更适合复杂度更新吗?

objective-c - 如何使用 FMDB 将图像(字节)保存和检索到 SQLite(blob)?

iOS 在应用程序内存不足警告时淡入淡出音频

watchkit - 如何在 watchkit 中制作圆形 WKInterfaceButton?