Uzantı uygulamaları ve yerel komutlar

Android Management API (AMAPI) SDK'sı, EMM tarafından belirtilen bir uzantı uygulamasının şunları yapmasına olanak tanır: doğrudan Android Device Policy (ADP) ile iletişim kurma ve Commands'i yürütme cihaz üzerinde.

AMAPI SDK'sı ile entegrasyon, aşağıdakilerle ilgili daha fazla bilgi sağlar: uygulamanıza nasıl ekleyeceğinizi inceleyeceğiz.

SDK entegre edildikten sonra, uzantı uygulamanız ADP ile iletişim kurarak şunları yapabilir:

Sorun Komutu

Uzantı uygulamaları, ADP kullanılarak komut verilmesini isteyebilir. IssueCommandRequest, aşağıdakilerle ilgili ayrıntıları içerecek istek nesnesini içerir: komutu ve belirli parametreler bulunur.

Aşağıdaki snippet'te, paketin verilerini temizlemek için nasıl istekte bulunulacağı gösterilmektedir:

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();
  }
...

Önceki örnekte, belirtilen komutun başarıyla verilmesini bekler. Eğer başarılı bir şekilde yayınlanırsa Command nesnesi mevcut komut durumunu ve daha sonra komutun durumunu sorgulamak için kullanılabilecek komut kimliğini komutunu çalıştırın.

Komut Alma

Uzantı uygulamaları, daha önce yayınlanan komut isteklerinin durumunu sorgulayabilir. Alıcı: bir komutun durumunu almak için komut kimliğine ihtiyacınız olacaktır ( komut isteği gönderebilirsiniz). Aşağıdaki snippet, bir ADP'ye 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());
  }
  ...

Komut durumu değişikliği geri çağırmalarını dinleme

Bir uzantı uygulaması, durum değişiklikleriyle ilgili güncellemeleri almak için bir geri çağırma kaydedebilir şu adımları uygulayarak:

  1. Komut durumu değişiklikleri CommandListener e-posta adresine bildirilir, bunu uygula ve geri bildirimlerinizin nasıl ele alınacağını durum güncellemeleri aldı.
  2. NotificationReceiverService süresini uzatın ve CommandListener ekleyin kullanır.
  3. Android'de genişletilmiş NotificationReceiverService sınıf adını belirtin Management API politikası (Politika Yapılandırması sayfasını inceleyin).

    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. Hizmeti AndroidManifest.xml cihazınıza ekleyin ve dışa aktarıldığından emin olun.

    <service
     android:name = ".notification.SampleCommandService"
     android:exported = "true" />
    

Politika Yapılandırması

Uzantı uygulamasının ADP ile doğrudan iletişim kurmasını sağlamak için EMM'nin extensionConfig politikası sağlayın.

 "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"
   }
 }]

Test

Birim testi

LocalCommandClient bir arayüzdür ve bu nedenle test edilebilir bir hakkında bilgi edindiniz.

Entegrasyon testi

ADP ile test yapmak için aşağıdaki bilgiler gerekir:

  1. Uzantı uygulamasının paket adı.
  2. Uygulamayla ilişkili İmza'nın onaltılık kodlanmış SHA-256 karması paketinden yararlanın.
  3. İsteğe bağlı olarak, geri çağırma test ediliyorsa - hizmetin yeni kullanıma sunulan hizmeti kullanıma sunduk. (Projenin tam adı CommandService) temsil eder.