Pakiet SDK interfejsu Android Management API (AMAPI) umożliwia aplikacji rozszerzenia wskazanego przez dostawcę usług EMM
komunikować się bezpośrednio z Android Device Policy (ADP) i wykonywać Commands
;
na urządzeniu.
Integracja z pakietem SDK AMAPI zawiera więcej informacji o i jak dodać ją do aplikacji.
Po zintegrowaniu pakietu SDK aplikacja rozszerzenia może komunikować się z ADP, aby:
Wydaj polecenie
Aplikacja rozszerzenia może prosić o polecenia wydawane przez ADP.
IssueCommandRequest
zawiera obiekt żądania, który będzie zawierać szczegóły dotyczące
polecenie i konkretne parametry.
Z tego fragmentu dowiesz się, jak wysłać żądanie usunięcia danych pakietu:
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();
}
...
Wcześniejszy przykład pokazuje wysłanie wyraźnego żądania udostępnienia danych w aplikacji
i czekam na wykonanie polecenia. Jeśli
został wysłany, obiekt Command
zostanie zwrócony z bieżącą
stan polecenia oraz identyfikator polecenia, którego można później używać do wysyłania zapytań o stan polecenia
ani długotrwałych poleceń.
Pobierz polecenie
Aplikacja rozszerzenia może sprawdzać stan wcześniej wydanych żądań poleceń. Do
aby pobrać stan polecenia, potrzebny będzie identyfikator polecenia (dostępny
żądanie polecenia wydania). Ten fragment kodu pokazuje, jak wysłać
GetCommandRequest
do ADP.
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());
}
...
Wykrywaj wywołania zwrotne zmiany stanu polecenia
Aplikacja z rozszerzeniem może zarejestrować połączenie zwrotne w celu otrzymywania powiadomień o zmianie stanu długotrwałych poleceń w następujący sposób:
- Do
CommandListener
wysyłane są powiadomienia o zmianach stanu polecenia. Wdróż i zapewnić implementację obsługi interfejsu otrzymała aktualizacje stanu. - Rozszerz
NotificationReceiverService
i podajCommandListener
instancji. Określ nazwę klasy klasy rozszerzonej
NotificationReceiverService
w Androidzie zasady interfejsu API zarządzania (zobacz Konfiguracja zasad).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 ...; } }
Dodaj usługę do:
AndroidManifest.xml
i upewnij się, że została wyeksportowana.<service android:name = ".notification.SampleCommandService" android:exported = "true" />
Konfiguracja zasady
Aby umożliwić aplikacji rozszerzenia bezpośrednią komunikację z ADP, dostawca usług EMM musi:
podać zasady 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"
}
}]
Testowanie
Testowanie jednostkowe
LocalCommandClient
to interfejs, dzięki któremu można udostępniać
implementacji.
Testowanie integracji
Aby przeprowadzić test za pomocą ADP, potrzebne będą te informacje:
- Nazwa pakietu aplikacji rozszerzenia.
- Zakodowany szesnastkowo identyfikator SHA-256 podpisu powiązanego z aplikacją. pakietu SDK.
- Opcjonalnie w przypadku testowania wywołania zwrotnego – pełna i jednoznaczna nazwa usługi z
do obsługi wywołań zwrotnych. (Pełna i jednoznaczna nazwa
CommandService
).