2

複数の時計をサポートするために、時計と iOS アプリを watchOS 2.2 用に更新する方法がわかりません。

主に iOS アプリ側で実装する必要がある新しい関数があることはわかっていますが、開発者ライブラリによると、watch 拡張機能でも実装する必要があります。

session:activationDidCompleteWithState:error:

sessionDidBecomeInactive:

sessionDidDeactivate:

それを行う方法と、これらの関数がどのコードを実行する必要があるかはよくわかりません。

4

1 に答える 1

7

iOS 9.3 以降を実行する iPhone は、watchOS 2.2 以降を実行する複数の Apple Watch とペアリングできます。

WCSessionDelegateiOS では、ウォッチのクイック切り替えに必要な非同期セッションのアクティブ化をサポートするために、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 にあります。

于 2016-04-02T01:20:30.983 に答える