تتيح حزمة تطوير البرامج (SDK) لواجهة برمجة التطبيقات لإدارة Android (AMAPI) لتطبيق إضافة خاص بخدمة إدارة الخدمات الجوّالة للمؤسسات (EMM)
التواصل مباشرةً مع تطبيق Android Device Policy (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
بحالة الأمر الحالية ومعرّف الأمر الذي يمكن استخدامه لاحقًا للاستعلام عن حالة أي أوامر تعمل لفترة طويلة.
الحصول على الطلب
يمكن لتطبيق الإضافة الاستعلام عن حالة طلبات الأوامر التي تم إصدارها سابقًا. ولاسترداد حالة أمر، ستحتاج إلى معرّف الأمر (المتاح من خلال طلب أمر "issue"). يوضّح المقتطف التالي كيفية إرسال 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
الموسّع في سياسة Management 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
في المثال).