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

How can watchOS 2.2 app determine if its paired iPhone has switched to another Apple Watch?

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

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

我目前没有多个手表能够检查实际设备上的行为是否相同。

具体回答你的问题:

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

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

我的发现:

看来未连接的手表并不意味着知道用户已切换到不同的手表。正如您所指出的,手表应用程序的会话仍然处于活动状态,并且手表(模拟器)仍然报告说 phone 可以访问。

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

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

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

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

虽然未连接的手表能够将数据排队到其配对的 iPhone(因为其会话仍处于活动状态),但 phone 只能与其连接的手表通信,因为 phone 不再与任何未连接的手表有活动会话。

新示例代码:

您可以试用新的 QuickSwitch sample code。它使用 updateApplicationContext 将任何手表的指示符和颜色传递给 phone。

您可以更改未使用手表的代号和颜色,使用 Xcode 设备窗格切换到该手表,然后注意 iOS 应用程序会立即显示该手表的新代号和颜色(排队 手表未使用)。

可能 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.

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