Data Layer API の概要

クラウドベースのノードは Google 所有のサーバーによって制御されます
図 1. ハンドヘルド デバイスと Wear OS デバイスで構成されたノードのサンプル ネットワーク。

Google Play 開発者サービスの一部である Wearable Data Layer API は、ウェアラブル デバイス(スマートウォッチなど)と接続されたハンドヘルド デバイス(通常はスマートフォン)間の通信チャネルを提供します。デバイス間でデータを同期して転送する方法です。

注: この API は Wear OS スマートウォッチ、およびスマートウォッチとペア設定された Android デバイスでのみ使用できます。Wear OS スマートウォッチを iOS スマートフォンとペア設定しており、インターネットに接続できる場合、アプリは他のクラウドベースの API に対してクエリを実行できます。その他の API について詳しくは、Wear OS でのネットワーク アクセスと同期をご覧ください。

注意: データレイヤ API はハンドヘルドとウェアラブル間の通信用に設計されているため、これらのデバイス間の通信を設定するために使用できる API は、上記のものだけです。たとえば、通信チャネルを作成するために低レベルのソケットを開こうとしないでください。

一般的なユースケース

インタラクションがスマートウォッチとスマートフォンの間でのみ行われる場合は、Data Layer API を使用します。次に例を示します。

  • リモコン: スマートウォッチがスマートフォンのリモコンとして機能します(例: スマートフォンで実行中の音楽プレーヤーの操作、プレゼンテーションのスライド、カメラのシャッターとしての機能)。
  • ハンドヘルド アプリの起動: 「スマートフォンで開く」ボタンの機能。
  • 認証ブリッジング: 初期設定時にスマートフォンからスマートウォッチにセッション トークンを送信します。

多くの一般的なシナリオでは、代わりに既存のクラウド インフラストラクチャを使用する必要があります。次に例を示します。

  • データの保存: ワークアウト、メモ。
  • コンテンツの取得: 過去のワークアウトのリストの読み込み、音楽のダウンロード、天気の取得。
  • 同期状態: ユーザーがウェブでプロフィール写真を変更した場合、スマートウォッチはスマートフォンにクエリを実行するのではなく、クラウドを使用して更新します。

このようなシナリオでは、Data Layer API ではなく、既存のエンドポイントとインフラストラクチャを使用します。

コミュニケーションのオプション

データは次のいずれかの方法で転送されます。

  1. Wear OS デバイスと他のデバイスとの間に Bluetooth 接続が確立している場合は、直接交換します。
  2. Google のサーバー上のネットワーク ノードを仲介として使用し、LTE や Wi-Fi などの利用可能なネットワークを介して

すべてのデータレイヤ クライアントは、デバイスで利用可能な接続に応じて、Bluetooth またはクラウドを使用してデータを交換できます。データレイヤを使用して送信されたデータは、ある時点で Google 所有のサーバーを使用することを前提としています。

Bluetooth

デバイスが Bluetooth で接続されている場合、データレイヤではこの接続が使用されます。デバイス間で 1 つの暗号化されたチャネルがあり、標準の Bluetooth 暗号化を使用して Google Play 開発者サービスによって管理されます。

Cloud

Bluetooth が使用できない場合、データは自動的に Google Cloud を介してルーティングされます。Google Cloud を介して転送されるデータは、すべてエンドツーエンドで暗号化されます。

通信のセキュリティ

Google Play 開発者サービスは、Wear OS デバイスにインストールされたアプリと、近くにあるハンドヘルド デバイスにインストールされた同じアプリとの間の通信をより安全にするために、次の制限を適用しています。

  • パッケージ名はデバイス間で一致している必要があります。
  • パッケージの署名はデバイス間で一致している必要があります。

接続の種類に関係なく、他のアプリはデータにアクセスできません。

設定

Wearable Data Layer API には、次の依存関係があります。

Wear モジュールの build.gradle ファイルに次の依存関係を設定します。

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:19.0.0")
}

初回ペア設定プロセスを容易にする

Horologist は、プラットフォーム API の上にいくつかのヘルパー ライブラリを提供します。モバイル デバイスと Wear OS デバイス間の接続を確立するのに役立つデータレイヤ ライブラリが含まれています。また、次の操作を行うための便利な API も提供します。

  • 別のデバイスにアプリをインストールします。
  • 別のデバイスでアプリを起動します。
  • 別のデバイスで特定のアクティビティを起動します。
  • コンパニオン アプリを起動します。

データレイヤにアクセスする

Data Layer API を呼び出すには、Wearable クラスを使用して、各種のクライアント クラス(DataClientMessageClient など)のインスタンスを取得します。

詳しくは、DataLayer サンプルをご覧ください。

最低限のクライアントを使用する

クライアントを作成するには、次のコード例をご覧ください。

val dataClient = Wearable.getDataClient(this)

val available = try {
    GoogleApiAvailability.getInstance()
        .checkApiAvailability(client)
        .await()
    true
} catch (e: AvailabilityException) {
    // API is not available in this device.
    false
}

コンテキストには任意の有効な Android コンテキストを指定できます。Activity のスコープ内で API を使用する場合は、Wearable クラスの getDataClient() メソッドを使用します。これにより、ユーザーが Google Play 開発者サービスのバージョンを更新するよう求められた場合などに、特定の操作を通知ではなくダイアログとして表示できます。

デフォルトでは、リスナーへのコールバックはアプリのメイン UI スレッドで行われます。別のスレッドでコールバックが行われるようにするには、WearableOptions オブジェクトを使用してカスタム Looper を指定します。

詳細については、WearableOptions.Builder リファレンスをご覧ください。

必要に応じてクライアント インスタンスを再作成する

Wearable API クライアント(DataClientMessageClient など)は低コストで作成できます。クライアントを保持するのではなく、アプリに適したスタイルを使用して、必要に応じて再作成します。

クライアントの状態(登録済みのリスナーのセットなど)はすべてのクライアントで共有され、アプリの実行中に Google Play 開発者サービスが更新されても保持されます。