ה-SDK של Android Management API (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
יוחזר עם הערך הנוכחי
את סטטוס הפקודה ואת מזהה הפקודה, שבו ניתן להשתמש מאוחר יותר כדי לשלוח שאילתה על הסטטוס של
פקודות שפועלות לאורך זמן.
קבלת פקודה
אפליקציית תוספים יכולה לשלוח שאילתות לגבי הסטטוס של בקשות לפקודות שהונפקו בעבר. שפת תרגום
לאחזר סטטוס של פקודה, יש צורך במזהה הפקודה (זמין
בקשה לפתרון הבעיה). בקטע הקוד הבא מוסבר איך לשלוח
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());
}
...
האזנה לקריאה חוזרת (callback) של שינוי סטטוס הפקודה
אפליקציית תוסף יכולה לרשום קריאה חוזרת כדי לקבל עדכונים לגבי שינויים בסטטוס של פקודות שפועלות לאורך זמן, לפי השלבים הבאים:
- שינויים בסטטוס הפקודות מקבלים התראה על כך ל-
CommandListener
, צריך להטמיע את זה בממשק באפליקציה ולהסביר איך לטפל התקבלו עדכוני סטטוס. - להאריך את
NotificationReceiverService
ולספקCommandListener
מכונה. ציון שם הכיתה של
NotificationReceiverService
המורחב ב-Android מדיניות ה-Management API (מידע נוסף על הגדרת המדיניות).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"
}
}]
בדיקה
בדיקות יחידה (unit testing)
LocalCommandClient
הוא ממשק ולכן הוא מאפשר לספק דוגמה
יישום בפועל.
בדיקת אינטגרציה
כדי לבצע בדיקה באמצעות ADP תצטרכו את הפרטים הבאים:
- שם החבילה של אפליקציית התוסף.
- גיבוב SHA-256 עם קידוד הקסדצימלי של החתימה המשויכת לאפליקציה חבילה.
- אופציונלי, אם בודקים את הקריאה החוזרת - שם השירות שמוגדר במלואו מ-
השירות החדש שמיועד לתמיכה בקריאה חוזרת (callback). (שם מלא של
CommandService
בדוגמה).