ערכת ה-SDK של Android Management API (AMAPI) מאפשרת לאפליקציית הרחבה שצוינה על ידי EMM לתקשר ישירות עם Device Policy למכשירי 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 עם הסטטוס הנוכחי של הפקודה ומזהה הפקודה, שבהמשך אפשר להשתמש בו כדי לשלוח שאילתה לגבי הסטטוס של פקודות ארוכות טווח.
קבלת פקודה
אפליקציית תוסף יכולה לשלוח שאילתה לגבי הסטטוס של בקשות פקודה שהונפקו בעבר. כדי לאחזר את הסטטוס של פקודה, צריך את מזהה הפקודה (זמין מבקשת הפקודה 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());
}
...
האזנה לקריאות חוזרות (callback) לשינוי סטטוס הפקודה
אפליקציית תוסף יכולה לרשום פונקציית קריאה חוזרת כדי לקבל עדכונים על שינויים בסטטוס של פקודות שפועלות לאורך זמן. לשם כך:
- הודעות על שינויים בסטטוס הפקודה נשלחות אל
CommandListener. צריך להטמיע את הממשק הזה באפליקציה ולספק הטמעה שתסביר איך לטפל בעדכוני הסטטוס שהתקבלו. - מרחיבים את
NotificationReceiverServiceומספקים מופעCommandListenerבאמצעות השיטהgetCommandListener. מגדירים את מדיניות האפליקציה כדי להקצות את התפקיד
COMPANION_APPלאפליקציה (ראו הגדרת מדיניות).import com.google.android.managementapi.commands.CommandListener; import com.google.android.managementapi.notification.NotificationReceiverService; ... public class SampleCommandService extends NotificationReceiverService { @Override public CommandListener getCommandListener() { // return the concrete implementation from previous step return ...; } }
הגדרת מדיניות
כדי לאפשר לאפליקציית התוסף לתקשר ישירות עם ADP, מערכת ה-EMM צריכה להקצות לאפליקציה את התפקיד COMPANION_APP באמצעות השדה roles במדיניות האפליקציה.
"applications": [{
"packageName": "com.amapi.extensibility.demo",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "COMPANION_APP" }
]
}]
אפשרויות נוספות זמינות במאמר בנושא הקצאת מדיניות של תפקידי אפליקציות למכשיר.
בדיקה
בדיקות יחידה
LocalCommandClient הוא ממשק, ולכן מאפשר לספק הטמעה שניתנת לבדיקה.
בדיקות שילוב
כדי לבצע בדיקה באמצעות ADP, נצטרך את הפרטים הבאים:
- שם החבילה של אפליקציית התוסף.
- גיבוב SHA-256 בקידוד Base64 של החתימה שמשויכת לחבילת האפליקציה.
- אופציונלי, אם בודקים קריאה חוזרת (callback) – השם המוגדר במלואו של השירות מהשירות החדש שהושק לתמיכה בקריאה חוזרת. (השם המלא של
CommandServiceבדוגמה).