Aplikacje rozszerzeń i polecenia lokalne

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:

  1. Do CommandListener wysyłane są powiadomienia o zmianach stanu polecenia. Wdróż i zapewnić implementację obsługi interfejsu otrzymała aktualizacje stanu.
  2. Rozszerz NotificationReceiverService i podaj CommandListener instancji.
  3. 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 ...;
      }
    }
    
  4. 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:

  1. Nazwa pakietu aplikacji rozszerzenia.
  2. Zakodowany szesnastkowo identyfikator SHA-256 podpisu powiązanego z aplikacją. pakietu SDK.
  3. 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).