iOS 和 watchOS 早期版本上新 WCSessionDelegate 方法的行为
Behaviour of new WCSessionDelegate methods on earlier versions of iOS and watchOS
我正在实施新的 WCSessionDelegate 方法以支持多设备配对。
- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error;
- (void)sessionDidBecomeInactive:(WCSession *)session;
- (void)sessionDidDeactivate:(WCSession *)session;
我有点不确定这些方法如何与旧版本的 iOS 和 watchOS 一起使用(事实证明模拟器非常无用)。
我的假设是这些方法将取代通过下面的方法控制的行为,我可以排除它吗?
- (void)sessionWatchStateDidChange:(WCSession *)session;
有没有人有使用这些新方法支持旧 iOS 和 watchOS 设备组合的经验?
新的会话激活方法不会替换状态更改方法。您将继续收到活动手表的状态更改通知,因为某些 属性 更改可能与正在切换的手表无关。
例如,用户可以安装或删除配套手表应用程序,或者启用或禁用当前活动手表上的复杂功能。
支持旧版本 iOS:
委托方法本身不会在旧版本的 OS 上被调用。您只需要确保您不访问任何属性或调用任何仅在 OS.
的较新版本上可用的方法。
您应该 您的应用已 运行 开启(因为 activationState
仅在 9.3 之后可用)。
这是一个示例,演示如何支持 iOS 的多个版本:
private func isValidSession() -> Bool {
if #available(iOS 9.3, *) {
guard let session = session where session.activationState == .Activated && session.paired && session.watchAppInstalled else {
return false
}
} else {
// Fallback on earlier versions
guard let session = session where session.paired && session.watchAppInstalled else {
return false
}
}
return true
}
示例代码:
Apple 还提供了 QuickSwitch sample code,您可能会发现它有助于支持或试验手表切换。
我正在实施新的 WCSessionDelegate 方法以支持多设备配对。
- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error;
- (void)sessionDidBecomeInactive:(WCSession *)session;
- (void)sessionDidDeactivate:(WCSession *)session;
我有点不确定这些方法如何与旧版本的 iOS 和 watchOS 一起使用(事实证明模拟器非常无用)。
我的假设是这些方法将取代通过下面的方法控制的行为,我可以排除它吗?
- (void)sessionWatchStateDidChange:(WCSession *)session;
有没有人有使用这些新方法支持旧 iOS 和 watchOS 设备组合的经验?
新的会话激活方法不会替换状态更改方法。您将继续收到活动手表的状态更改通知,因为某些 属性 更改可能与正在切换的手表无关。
例如,用户可以安装或删除配套手表应用程序,或者启用或禁用当前活动手表上的复杂功能。
支持旧版本 iOS:
委托方法本身不会在旧版本的 OS 上被调用。您只需要确保您不访问任何属性或调用任何仅在 OS.
的较新版本上可用的方法。您应该 activationState
仅在 9.3 之后可用)。
这是一个示例,演示如何支持 iOS 的多个版本:
private func isValidSession() -> Bool {
if #available(iOS 9.3, *) {
guard let session = session where session.activationState == .Activated && session.paired && session.watchAppInstalled else {
return false
}
} else {
// Fallback on earlier versions
guard let session = session where session.paired && session.watchAppInstalled else {
return false
}
}
return true
}
示例代码:
Apple 还提供了 QuickSwitch sample code,您可能会发现它有助于支持或试验手表切换。