Android 12 で導入されたコンパニオン デバイス プロファイルは、コンパニオン デバイス(スマートウォッチなど)の種類に固有の権限セットをコンパニオン アプリからリクエストできるようにする機能です。コンパニオン デバイス プロファイルを使用すると登録プロセスがシンプルになる理由は、モバイル デバイスのユーザーに権限リクエストのプロンプトを個別に何度も表示する代わりに、定義された権限セットのリクエストを一つのプロンプトで表示できるためです。これにより、コンパニオン アプリのセットアップ フローがスムーズになり、オプトイン率も向上します。
コンパニオン デバイス プロファイルは、コンパニオン デバイスを製造するデバイス メーカーのみが使用できます。コンパニオン デバイスでこの機能を使用するには、要件を満たし承認を受ける必要があります。
Android 12 で使用できるコンパニオン デバイス プロファイルのタイプは COMPANION_DEVICE_WATCH
です。
コンパニオン デバイスの詳細については、コンパニオン デバイスのペア設定をご覧ください。
デバイスの動作
ここでは、コンパニオン デバイス プロファイルが使用されている場合のデバイスの動作を説明します。
ユーザーがコンパニオン デバイスとの関連付けを求めるアプリのリクエストを承認すると、CompanionDeviceManager
(CDM)サービスはコンパニオン デバイスが接続されるのを待ち、接続された時点でデバイス プロファイル ロール(スマートウォッチなど)をコンパニオン アプリに割り当て、そのプロファイル ロールに定義された権限をすべて付与します。図 1 は、COMPANION_DEVICE_WATCH
デバイス プロファイルの権限をリクエストするアプリの例を示しています。
図 1. スマートウォッチのデバイス プロファイルの権限をリクエストするダイアログ
アプリとコンパニオン デバイスの関連付けが削除されると(パッケージのデータが消去された場合やデバイスが置き忘れられた場合など)、CDM はアプリに割り当てられていたデバイス プロファイル ロールを取り消し、そのプロファイル ロールに定義された権限をすべてアプリから削除します。
ユーザーは、特定のデバイス プロファイルに関する権限付与リクエストを承認してアプリにそれを付与した後で、個別に権限を取り消すことができます。ユーザーが権限を一つ取り消しても、アプリはコンパニオン デバイスに関連付けられたままですが、なんらかの機能が使用できなくなる可能性があります。その権限がアプリの動作に必要な場合は、アプリから通常の権限リクエストでその権限をリクエストする必要があります。
要件
コンパニオン アプリがコンパニオン デバイス プロファイル API にアクセスするには、以下の要件を満たす必要があります。
- コンパニオン デバイス(スマートウォッチなど)がある。
- コンパニオン デバイス プロファイルに定義された権限を要求する正当な理由がある。
スマートウォッチのコンパニオン デバイス プロファイルの要件
次の表に、COMPANION_DEVICE_WATCH
デバイス プロファイル ロールに定義済みの権限とそれを使用するための要件を示します。
権限 | コンパニオン アプリとデバイスの要件 |
---|---|
通知BIND_NOTIFICATION_LISTENER_SERVICE |
|
電話phone |
|
SMS
sms |
|
連絡先
contacts |
|
カレンダー
calendar |
|
付近のデバイス
nearby_devices |
|
eSIM のプロビジョニング
USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER |
|
継続中の通話の管理
MANAGE_ONGOING_CALLS |
|
利用方法
ユーザー同意ダイアログを表示せずにアプリからコンパニオン デバイス プロファイルにアクセスするには、アプリが承認され、許可リストに追加される必要があります。Android チームは、許可リストへの追加リクエストを受け取ると、アプリを審査して、対応するコンパニオン デバイス プロファイルの要件を満たしていることを確認します。
実装
デバイス メーカーが独自のデバイスを使用するコンパニオン アプリを実装する場合、以下のように必要な Android システム設定を使用してコンパニオン アプリを認証し、アプリでユーザーへの CDM プロンプトの表示をスキップできるようにします。
次のコマンドで証明書を取得します。
keytool -printcert -jarfile PATH/TO/APK
構成ファイル内でパッケージ名と証明書を次のサンプル入力のように置き換えます。
<!-- A list of packages managing companion device(s) by the same manufacturers as the main device. It will not create the association without prompting if the association has been called multiple times in a short period. Note that config_companionDeviceManagerPackage and config_companionDeviceCerts are parallel arrays. --> <string-array name="config_companionDevicePackages" translatable="false"> <item>YOUR_COMPANION_APP_PACKAGE_NAME</item> </string-array> <!-- A list of SHA256 Certificates managing companion device(s) by the same manufacturers as the main device. It will fall back to showing a prompt if the association has been called multiple times in a short period. Note that config_companionDeviceCerts and config_companionDeviceManagerPackage are parallel arrays. Example: "1A:2B:3C:4D" --> <string-array name="config_companionDeviceCerts" translatable="false"> <item>YOUR_COMPANION_APP_CERTIFICATE</item> </string-array>
AssociationRequest
を使用して、1 つのコンパニオン デバイスに関連付けリクエストを発行します。
サードパーティ デベロッパーが DEVICE_PROFILE_WATCH
プロファイルをリクエストするコンパニオン アプリを実装する場合の手順は次のとおりです。
setDeviceProfile
メソッドを呼び出します。AssociationRequest
を作成するときにDEVICE_PROFILE_WATCH
プロファイルを渡します。
検証
コンパニオン デバイス プロファイル機能の動作をテストするには、cts/tests/tests/companion/
で CTS テストを実施します。