iOS 9.3 以降を実行する iPhone は、watchOS 2.2 以降を実行する複数の Apple Watch とペアリングできます。
WCSessionDelegate
iOS では、ウォッチのクイック切り替えに必要な非同期セッションのアクティブ化をサポートするために、3 つのメソッドすべてが必要です。
時計からの切り替え:
自動切り替えが有効になっている場合、ユーザーが 1 つの Apple Watch から別の Apple Watch に切り替えると、iOS アプリは切り替え中に非アクティブおよび非アクティブ状態に移行します。
非アクティブ状態に移行すると、セッションが受信済みのデータを配信するためのわずかな時間が与えられます。
// MARK: WCSessionDelegate - Asynchronous Activation
// The next 3 methods are required in order to support asynchronous session activation; required for quick watch switching.
func sessionDidBecomeInactive(session: WCSession) { // iOS only
/*
The session calls this method when it detects that the user has
switched to a different Apple Watch. While in the inactive state,
the session delivers any pending data to your delegate object and
prevents you from initiating any new data transfers. After the last
transfer finishes, the session moves to the deactivated state.
Use this method to update any private data structures that might be
affected by the impending change to the active Apple Watch. For example,
you might clean up data structures and close files related to
outgoing content.
*/
print("session did become inactive")
}
そのデータが配信されるとすぐに、セッションは非アクティブ状態に移行します。その時点で、iOS アプリは activateSession メソッドを再度呼び出して、新しくアクティブになったウォッチに接続する必要があります。
func sessionDidDeactivate(session: WCSession) { // iOS only
print("session did deactivate")
/*
The session calls this method when there is no more pending data
to deliver to your app and the previous session can be formally closed.
iOS apps that process content delivered from their Watch Extension
should finish processing that content, then call activateSession()
to initiate a session with the new Apple Watch.
*/
// Begin the activation process for the new Apple Watch
WCSession.defaultSession().activateSession()
}
時計への切り替え:
iOS アプリと watchOS アプリはどちらも、WCSession がアクティブ化されると呼び出される次のメソッドを実装します。
func session(session: WCSession, activationDidCompleteWithState activationState: WCSessionActivationState, error: NSError?) {
if let error = error {
print("session activation failed with error: \(error.localizedDescription)")
return
}
/*
Called when the activation of a session finishes. Your implementation
should check the value of the activationState parameter to see if
communication with the counterpart app is possible. When the state is
WCSessionActivationStateActivated, you may communicate normally with
the other app.
*/
print("session activated with state: \(activationState.rawValue)")
}
サンプルコード:
Apple は、複数の Apple Watch でのクイック ウォッチ切り替えをサポートするために、WatchConnectivity フレームワークの適切な使用方法を示すQuickSwitch サンプル コードを提供しています。updateApplicationContext
ペアリングされた時計から電話に指定子と色を渡すために使用します。
その他の注意事項:
接続されていないウォッチ アプリは、インタラクティブ メッセージングを含むすべての転送方法を引き続き使用できます (ただし、送信データはシステムによってキューに入れられ、ユーザーがそのウォッチに戻るまで転送されません)。
詳細については、「watchOS 2.2 アプリは、ペアリングされた iPhone が別の Apple Watch に切り替わったかどうかをどのように判断できますか?」を参照してください。
クレジット:
提供されるコードはQuickSwitchに基づいており、詳細はWCSessionDelegate Protocol ReferenceおよびWCSession Class Referenceの Supporting Communication with Multiple Apple Watches にあります。