برنامه های افزودنی و دستورات محلی، برنامه های افزودنی و دستورات محلی

Android Management API (AMAPI) SDK یک برنامه افزودنی مشخص شده با EMM را قادر می‌سازد تا مستقیماً با سیاست دستگاه Android (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();
 
}
...

مثال قبلی نشان می دهد که یک درخواست داده برنامه واضح برای بسته های مشخص شده و منتظر ماندن تا فرمان با موفقیت صادر شود. اگر با موفقیت صادر شد، یک شی Command با وضعیت دستور فعلی و شناسه فرمان بازگردانده می شود که بعداً می تواند برای پرس و جو از وضعیت هر دستور طولانی مدت استفاده شود.

دریافت فرمان

یک برنامه افزودنی می‌تواند وضعیت درخواست‌های فرمان قبلاً صادر شده را جویا شود. برای بازیابی وضعیت یک فرمان، به شناسه فرمان (که در درخواست فرمان صدور موجود است) نیاز دارید. قطعه زیر نحوه ارسال GetCommandRequest به 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());
 
}
 
...

به فراخوان های تغییر وضعیت فرمان گوش دهید

یک برنامه افزودنی می‌تواند برای دریافت به‌روزرسانی‌های مربوط به تغییرات وضعیت فرمان‌های طولانی‌مدت به دنبال این مراحل، یک تماس پاسخ ثبت کند:

  1. تغییرات وضعیت فرمان به CommandListener اطلاع داده می شود، این رابط را در برنامه خود پیاده سازی کرده و نحوه مدیریت به روز رسانی های وضعیت دریافتی را ارائه می دهد.
  2. NotificationReceiverService را گسترش دهید و نمونه CommandListener را ارائه دهید.
  3. نام کلاس توسعه یافته NotificationReceiverService را در سیاست API مدیریت Android مشخص کنید ( به پیکربندی خط مشی مراجعه کنید ).

    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. سرویس را به 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 مورد نیاز است:

  1. نام بسته برنامه افزودنی.
  2. هش SHA-256 رمزگذاری شده هگز امضای مرتبط با بسته برنامه.
  3. به صورت اختیاری، در صورت آزمایش پاسخ به تماس - نام کاملاً واجد شرایط سرویس از سرویس تازه معرفی شده برای پشتیبانی از پاسخ به تماس. (نام کاملاً واجد شرایط CommandService در مثال).