Android Management API(AMAPI)SDK を使用すると、EMM 指定の拡張機能アプリで次のことができます。
Android Device Policy(ADP)と直接通信し、Commands
を実行する
確認できます。
詳しくは、AMAPI SDK との統合についての説明をご覧ください。 アプリケーションに追加する方法を確認できます。
SDK を統合すると、拡張機能アプリは ADP と通信して次のことができます。
発行コマンド
拡張機能アプリは、ADP を使用してコマンドの発行をリクエストできます。
IssueCommandRequest
には、リクエストの詳細を含むリクエスト オブジェクトが含まれます。
発行するコマンドと特定のパラメータを指定します。
次のスニペットは、パッケージのデータを消去するリクエストを発行する方法を示しています。
import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory;
import com.google.android.managementapi.commands.model.Command;
import com.google.android.managementapi.commands.model.GetCommandRequest;
import com.google.android.managementapi.commands.model.IssueCommandRequest;
import com.google.android.managementapi.commands.model.IssueCommandRequest.ClearAppsData;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
...
void issueClearAppDataCommand(ImmutableList<String> packageNames) {
Futures.addCallback(
LocalCommandClientFactory.create(getContext())
.issueCommand(createClearAppRequest(packageNames)),
new FutureCallback<Command>() {
@Override
public void onSuccess(Command result) {
// Process the returned command result here
Log.i(TAG, "Successfully issued command");
}
@Override
public void onFailure(Throwable t) {
Log.e(TAG, "Failed to issue command", t);
}
},
MoreExecutors.directExecutor());
}
IssueCommandRequest createClearAppRequest(ImmutableList<String> packageNames) {
return IssueCommandRequest.builder()
.setClearAppsData(
ClearAppsData.builder()
.setPackageNames(packageNames)
.build()
)
.build();
}
...
上記の例では、指定された IP アドレスに対して
実行して、コマンドが正常に発行されるまで待機します。条件
正常に発行されると、Command
オブジェクトが現在の
コマンド ステータスとコマンド ID が含まれています。この ID は、後でコマンドのステータスをクエリするために
実行することもできます。
コマンドの取得
拡張機能アプリは、以前に発行されたコマンド リクエストのステータスをクエリできます。宛先
コマンドのステータスを取得するには、コマンド ID(
issue command request)でなければなりません。次のスニペットは、
ADP に GetCommandRequest
。
import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory;
...
import com.google.android.managementapi.commands.model.GetCommandRequest;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
...
void getCommand(String commandId) {
Futures.addCallback(
LocalCommandClientFactory.create(getApplication())
.getCommand(GetCommandRequest.builder().setCommandId(commandId).build()),
new FutureCallback<Command>() {
@Override
public void onSuccess(Command result) {
// Process the returned command result here
Log.i(Constants.TAG, "Successfully issued command");
}
@Override
public void onFailure(Throwable t) {
Log.e(Constants.TAG, "Failed to issue command", t);
}
},
MoreExecutors.directExecutor());
}
...
コマンド ステータス変更のコールバックをリッスンする
拡張機能アプリはコールバックを登録して、ステータスの変更に関する最新情報を受け取ることができます。 実行するためのコマンドは次のとおりです。
- コマンドのステータスの変更は
CommandListener
に通知されます。これを実装してください インターフェースを実装し、API 呼び出しの ステータス アップデートを受信しました。 NotificationReceiverService
を拡張してCommandListener
を指定する 構成されますAndroid で拡張された
NotificationReceiverService
のクラス名を指定する Management API ポリシー(ポリシー構成を参照)。import com.google.android.managementapi.commands.CommandListener; import com.google.android.managementapi.notification.NotificationReceiverService; ... public class SampleCommandService extends NotificationReceiverService { @Override protected void setupInjection() { // (Optional) If using DI and needs initialisation then use this method. } @Override public CommandListener getCommandListener() { // return the concrete implementation from previous step return ...; } }
サービスを
AndroidManifest.xml
に追加し、エクスポートされたことを確認します。<service android:name = ".notification.SampleCommandService" android:exported = "true" />
ポリシーの構成
拡張機能アプリが ADP と直接通信できるようにするには、EMM が
extensionConfig
ポリシーを指定する。
"applications": [{
"packageName": "com.amapi.extensibility.demo",
...
"extensionConfig": {
"signingKeyFingerprintsSha256": [
// Include signing key of extension app
],
// Optional if callback is implemented
"notificationReceiver": "com.amapi.extensibility.demo.notification.SampleCommandService"
}
}]
テスト
単体テスト
LocalCommandClient
はインターフェースであるため、テスト可能な
説明します。
統合テスト
ADP を使用してテストするには、次の情報が必要です。
- 拡張機能アプリのパッケージ名。
- アプリに関連付けられた署名の 16 進数でエンコードされた SHA-256 ハッシュ パッケージ化されています。
- コールバックをテストする場合(省略可) - サービスの完全修飾名。
コールバックをサポートするように新しく導入されたサービスを使用します。(
CommandService
など)。