あなたの質問に対する具体的な答え:
即時メッセージを含むすべての転送方法を使用できるため、時計が接続されていないという事実はすぐにはわかりません。転送は、ユーザーがその時計に戻るまで延期されます。
接続されていない時計でもペアリングされた iPhone への転送を開始できるため、何らかのハンドシェイクまたはタイムアウト検出を実装し、電話が時間内に応答しないかどうかを確認する必要があります。
私の調査結果:
接続されていない時計は、ユーザーが別の時計に切り替えたことを知るためのものではないようです。ご指摘のとおり、時計アプリのセッションはまだアクティブであり、時計 (シミュレーター) は電話が到達可能であると報告しています。
接続されていないウォッチ アプリは、インタラクティブ メッセージングを含むすべての転送方法を引き続き使用できます(ただし、送信データはシステムによってキューに入れられ、ユーザーがそのウォッチに戻るまで転送されません)。
2 つの異なるアプローチを使用して、データがキューに入れられていることを確認しました。
- ウォッチからディクショナリを使用し
transferUserInfo
、実行ループを実行させ、そのプロセスを数回繰り返してから、outstandingUserInfoTransfers
配列を調べます。
sendMessage
ユーザーがその時計に戻った後にのみ実行される応答ハンドラーを使用し、応答を受信します。
元に戻すと、キューに入れられたすべての転送がすぐに電話に送信され、インタラクティブな応答があれば時計が受信します。
接続されていない時計はペアリングされた iPhone にデータをキューに入れることができますが (そのセッションはまだアクティブであるため)、電話は接続されている時計としか通信できません。
新しいサンプル コード:
新しいQuickSwitch サンプル コードを試すことができます。updateApplicationContext
任意の時計から電話に指定子と色を渡すために使用します。
未使用のウォッチの指定子と色を変更し、[Xcode デバイス] ペインを使用してそのウォッチに切り替えると、iOS アプリがそのウォッチの新しい指定子と色 (ウォッチが使用されていない間にキューに入れられた) をすぐに表示することに注意してください。
reachable
ドキュメントの不一致の可能性:
WatchKit 拡張機能では、一致するセッションがユーザーの iPhone でアクティブであり、デバイスが範囲内にあるため通信が行われる可能性がある場合、このプロパティの値は YES になります。
私は 2 つ目の時計を持っていないので、携帯電話が範囲外に移動すると、未使用の時計の到達可能性が false に変わるかどうかをテストできませんでした。