Wear OS でのデータの送信と同期

Wear OS by Google 搭載のスマートウォッチでは、複数の方法でデータの送信と同期ができます。ネットワークから直接データを送信、同期することをおすすめします。そうすることで、アプリをスタンドアロン アプリと見なすことができるためです。

ネットワークから直接データを送信、同期する

Wear OS アプリを作成して、ネットワークと直接通信します。モバイル開発の場合と同じ API を使用できますが、Wear OS 固有の相違点に留意してください。

Wearable Data Layer API を使用してデータを送信、同期する

Google Play 開発者サービスの構成要素である Wearable Data Layer API には、アプリ用のオプションの通信チャネルが用意されています。

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

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

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

  dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:18.1.0'
  }
  

ウェアラブル アプリでは、ネットワークや接続されているスマートフォンからデータを直接送信、同期することをおすすめします。ただし、デバイス間で RPC タイプの形式で直接通信する場合や、データのネットワークに直接接続できない場合は、次の方法で Wearable Data Layer API を使用できます。

リモート機能のアドバタイズとクエリを実行する
CapabilityClient は、Wear OS ネットワークのどのノードがどのカスタムアプリ機能をサポートしているかに関する情報を提供します。ノードは、ネットワークに接続されたモバイル デバイスとウェアラブル デバイスの両方を表します。機能とは、アプリがビルド時に定義するか、実行時に動的に構成する機能のことです。
たとえば、モバイルの Android アプリは、動画再生のリモート コントロールをサポートしていることをアドバタイズできます。アプリのウェアラブル バージョンがインストールされている場合は、CapabilityClient を使用して、アプリのモバイル バージョンがインストールされているかどうかを確認し、対象の機能をサポートしているかどうかをチェックできます。サポートしている場合、ウェアラブル アプリによって再生 / 一時停止ボタンが表示され、メッセージを使用して他のデバイスの動画を操作できます。
また、サポートされているウェアラブル アプリの掲載情報機能を使用することで逆方向に機能させることもできます。
メッセージを送信する
MessageClient はメッセージの送信が可能なため、リモート プロシージャ コール(RPC)に適しています。たとえば、ハンドヘルドのメディア プレーヤーをウェアラブルから操作したり、ウェアラブルのインテントをハンドヘルドから開始したりすることができます。メッセージは、一方向のリクエストや、リクエスト / レスポンス通信モデルにも適しています。
ハンドヘルドとウェアラブルが接続されている場合、システムは配信対象のメッセージをキューに登録し、成功結果コードを返します。デバイスが接続されていない場合は、エラーが返されます。成功結果コードは、メッセージが正常に配信されたことを示すものではありません。結果コードの受信後にデバイス間の接続が切断されることもあります。
データを転送する
ChannelClient は、ハンドヘルドからウェアラブル デバイスにデータを転送できます。ChannelClient を使用すると、次のことができます。
  • インターネットに接続できない状況でも 2 台以上の接続済みのデバイス間でデータファイルを転送できます。 DataItem オブジェクトにアタッチされた Asset オブジェクトを使用する場合、自動同期は行われません。接続済みデバイスと同期する前にローカル デバイスでアセットのコピーを作成する DataClient と比べて、ChannelClient ではディスク容量を節約できます。
  • サイズが過大であり MessageClient を使用して送信できないファイルを確実に送信できます。
  • マイクから入力された音声データなどのストリーム データを転送できます。
データを同期する
DataClient は、コンポーネントによる DataItem または Asset に対する読み取りまたは書き込みのための API を公開します。
DataItem は、Wear OS ネットワーク内のすべてのデバイスで同期されます。どのノードにも接続していない状態でデータアイテムを設定できます。これらのデータアイテムは、ノードがオンラインになると同期されます。
データアイテムは、このデータアイテムを作成したアプリにのみ公開され、他のノードでは対象のアプリからのみアクセスできます。通常、これらのデータアイテムは小さいサイズです。画像など、より大きく永続的なデータ オブジェクトを転送する場合は、Assets を使用します。
Wear OS では、1 台のハンドヘルド デバイスに複数のウェアラブルを接続できます。たとえば、ユーザーがハンドヘルドにメモを保存すると、ユーザーのすべての Wear OS デバイスにメモが自動的に表示されます。デバイス間のデータの同期をサポートするために、Google のサーバーはこれらのデバイスで構成されるネットワークにクラウドノードをホストします。システムは、直接接続されているデバイス、クラウドノード、Wi-Fi を使用してクラウドノードに接続されているウェアラブル デバイスにデータを同期します。

警告: アプリがインストールされていないデバイスを含め、利用可能なすべての Wear OS デバイスにアイテムが転送されます。大量のデータを同期する場合は、ハンドヘルド デバイスと Wear OS デバイスの両方でリソースが浪費されないように、「レシーバー」アプリがインストールされてオンラインになっているか確認してみてください。

重要なデータレイヤ イベントをリッスンする(サービス向け)
WearableListenerService を拡張すると、サービスで重要なデータレイヤ イベントをリッスンできます。システムが WearableListenerService のライフサイクルを管理します。データアイテムやメッセージを送信する必要がある場合はサービスにバインドし、処理が不要な場合はサービスをバインド解除します。
重要なデータレイヤ イベントをリッスンする(フォアグラウンドでのアクティビティ向け)
アクティビティに OnDataChangedListener を実装すると、アクティビティがフォアグラウンドで実行されている場合に重要なデータレイヤ イベントをリッスンできます。これを WearableListenerService の代わりに使用すると、ユーザーが積極的にアプリを使用している場合に限定して変更をリッスンできます。

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

クライアントの比較

次の表に、クライアントごとに異なる要件とユースケースを示します。

データ クライアント メッセージ クライアント チャネル クライアント
100 KB を超えるデータサイズ ×
現在接続されていないノードにメッセージを送信できる × ×
通信パターン 共有ネットワーク ベースのリソース 1 対 1 のメッセージの受け渡し(レスポンスを含む) 1 対 1 のストリーミング

接続性

データレイヤには、通信用に次の 2 つのオプションがあります。

  1. スマートウォッチと他のデバイスとの間に Bluetooth 接続が確立している場合は、データを直接交換します。
  2. LTE や Wi-Fi などの利用可能なネットワークを介してデータを交換します。
図 1. ハンドヘルド デバイスとウェアラブル デバイスで構成されたノードのサンプル ネットワーク。

すべてのデータレイヤ クライアントは、デバイスで利用可能な接続に応じて、Bluetooth または Google Cloud Sync を使用してデータを交換できます。Google Cloud Sync サービスは、Bluetooth が利用できない場合に、ウェアラブルとスマートフォンとの間でデータを通信および交換するための Google のメカニズムです。

セキュリティ

通信オプション(Bluetooth とクラウド同期サービス)はどちらもエンドツーエンドで暗号化されています。

Google Play 開発者サービスは、スマートフォンとスマートウォッチ間の通信が安全で、アプリ間通信であることを保証するために、次の制限を適用しています。

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

Bluetooth

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

Cloud

データレイヤを使用して送信されたデータは、ある時点で Google 所有のサーバーを使用することを前提としています。たとえば、Bluetooth が使用できない場合、DataClientMessageClientChannelClient は自動的に Google Cloud を介してルーティングします。Google Cloud を介して転送されるデータは、すべてエンドツーエンドで暗号化されます。

鍵の生成と保管

クラウドベースの通信用のエンドツーエンド鍵はスマートフォンによって生成され、2 つのデバイスが Bluetooth で接続されると、スマートウォッチと直接交換されます。これは、デバイスのセットアップ中に行われます。Google 所有のサーバーは、いかなる時点においてもこれらの鍵を受信しません。

エンドツーエンド鍵の生成が完了するまで、Google 所有のサーバーを介した通信はできません。鍵は、ペア設定したすべてのデバイスで、Google Play 開発者サービスのプライベート ファイル ストレージに保存されます。

デバイスのバックアップ

鍵はバックアップされず、デバイス外に送信されることはありません。新しいスマートフォンなど、新しい鍵が必要な場合は、システムによって新しい鍵が生成され、ユーザーが現在使用しているデバイスと共有されます。