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 ではなく、独自の既存のエンドポイントとインフラストラクチャを使用します。
通信のオプション
データは次のいずれかの方法で転送されます。
- Wear OS デバイスと別のデバイスとの間に Bluetooth 接続が確立している場合は**直接**。
- 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 には、次の依存関係があります。
- Google Play 開発者サービスの最新版
- Wear OS デバイスまたは Wear OS エミュレータ
Wear モジュールの build.gradle ファイルに次の依存関係を設定します。
dependencies {
...
implementation("com.google.android.gms:play-services-wearable:20.0.1")
}
初期ペア設定プロセスを容易にする
Horologist は、プラットフォーム API の上にいくつかのヘルパー ライブラリを提供します。 モバイル デバイスと Wear OS デバイス間の接続を確立するのに役立つデータレイヤ ライブラリが含まれています。また、次の操作を行うための便利な API も用意されています。
- 他のデバイスにアプリをインストールする。
- 他のデバイスでアプリを起動する。
- 他のデバイスで特定のアクティビティを起動する。
- コンパニオン アプリを起動する。
データレイヤにアクセスする
Data Layer API を呼び出すには、Wearable クラスを使用して、
各種のクライアント クラス(DataClient や MessageClient など)のインスタンスを取得します。
詳細については、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 クライアント(DataClient や MessageClient
など)は
低コストで作成できます。クライアントを保持するのではなく、アプリに適したスタイルを使用して、必要なときに再作成します。
クライアントの状態(登録済みのリスナーのセットなど)はすべてのクライアントで共有され、アプリの実行中に Google Play 開発者サービスが更新されても保持されます。