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());
}
...
به فراخوان های تغییر وضعیت فرمان گوش دهید
یک برنامه افزودنی میتواند برای دریافت بهروزرسانیهای مربوط به تغییرات وضعیت فرمانهای طولانیمدت به دنبال این مراحل، یک تماس پاسخ ثبت کند:
- تغییرات وضعیت فرمان به
CommandListener
اطلاع داده می شود، این رابط را در برنامه خود پیاده سازی کرده و نحوه مدیریت به روز رسانی های وضعیت دریافتی را ارائه می دهد. -
NotificationReceiverService
را گسترش دهید و نمونهCommandListener
را ارائه دهید. نام کلاس توسعه یافته
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 ...; } }
سرویس را به
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 مورد نیاز است:
- نام بسته برنامه افزودنی.
- هش SHA-256 رمزگذاری شده هگز امضای مرتبط با بسته برنامه.
- به صورت اختیاری، در صورت آزمایش پاسخ به تماس - نام کاملاً واجد شرایط سرویس از سرویس تازه معرفی شده برای پشتیبانی از پاسخ به تماس. (نام کاملاً واجد شرایط
CommandService
در مثال).