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