Android Management API (AMAPI) SDK ทำให้แอปส่วนขยายที่ระบุ 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
กลับมาพร้อมไฟล์
สถานะคำสั่ง และ ID คำสั่ง ซึ่งสามารถใช้ในภายหลังเพื่อค้นหาสถานะของ
คำสั่งใดๆ ที่ทำงานเป็นเวลานาน
รับคำสั่ง
แอปส่วนขยายสามารถค้นหาสถานะของคำขอคำสั่งที่ออกก่อนหน้านี้ได้ ถึง
เรียกสถานะของคำสั่ง คุณจะต้องมีรหัสคำสั่ง (มีอยู่ใน
ออกคำขอคำสั่ง) ข้อมูลโค้ดต่อไปนี้แสดงวิธีส่ง
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 สำหรับการเปลี่ยนสถานะคำสั่ง
แอปส่วนขยายสามารถลงทะเบียน Callback เพื่อรับการอัปเดตการเปลี่ยนแปลงสถานะได้ ของคำสั่งที่ทำงานเป็นเวลานานโดยทำตามขั้นตอนเหล่านี้
- การแจ้งการเปลี่ยนแปลงสถานะคำสั่งไปที่
CommandListener
เพื่อเริ่มใช้งาน ไว้ในแอปและแสดงการใช้งานวิธีจัดการ ได้รับการอัปเดตสถานะแล้ว - ขยาย
NotificationReceiverService
และให้บริการCommandListener
อินสแตนซ์ ระบุชื่อคลาสของ
NotificationReceiverService
แบบขยายใน Android นโยบาย 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"
}
}]
การทดสอบ
การทดสอบ 1 หน่วย
LocalCommandClient
เป็นอินเทอร์เฟซ จึงช่วยให้สามารถทดสอบ
การใช้งานของคุณ
การทดสอบการผสานรวม
ต้องใช้ข้อมูลต่อไปนี้เพื่อทดสอบกับ ADP
- ชื่อแพ็กเกจของแอปส่วนขยาย
- แฮช SHA-256 ที่เข้ารหัสเลขฐาน 16 ของลายเซ็นที่เชื่อมโยงกับแอป ใหม่
- หรือหากต้องการทดสอบ Callback - ชื่อแบบเต็มของบริการจาก
บริการที่เพิ่งนำมาใช้ใหม่เพื่อสนับสนุนการติดต่อกลับ (ชื่อที่มีคุณสมบัติครบถ้วนของ
CommandService
ในตัวอย่าง)