SDK Android Management API (AMAPI) cho phép một ứng dụng tiện ích do EMM chỉ định giao tiếp trực tiếp với Android Device Policy (ADP) và thực thi Commands trên thiết bị.
Tích hợp với AMAPI SDK cung cấp thêm thông tin về thư viện này và cách thêm thư viện này vào ứng dụng của bạn.
Sau khi tích hợp SDK, ứng dụng tiện ích của bạn có thể giao tiếp với ADP để:
Lệnh thực thi
Ứng dụng tiện ích có thể yêu cầu phát hành các lệnh bằng ADP.
IssueCommandRequest chứa đối tượng yêu cầu sẽ chứa thông tin chi tiết về lệnh sẽ được phát hành và các tham số cụ thể.
Đoạn mã sau đây cho thấy cách đưa ra yêu cầu xoá dữ liệu của gói:
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();
}
...
Ví dụ trước cho thấy việc đưa ra yêu cầu xoá dữ liệu ứng dụng rõ ràng cho các gói được chỉ định và chờ cho đến khi lệnh được đưa ra thành công. Nếu được phát hành thành công, một đối tượng Command sẽ được trả về cùng với trạng thái lệnh hiện tại và mã lệnh mà sau này có thể dùng để truy vấn trạng thái của mọi lệnh chạy trong thời gian dài.
Lệnh Get
Ứng dụng tiện ích có thể truy vấn trạng thái của các yêu cầu lệnh đã được phát hành trước đó. Để truy xuất trạng thái của một lệnh, bạn sẽ cần mã lệnh (có trong yêu cầu lệnh phát hành). Đoạn mã sau đây cho biết cách gửi GetCommandRequest đến 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());
}
...
Lắng nghe các lệnh gọi lại thay đổi trạng thái Lệnh
Ứng dụng tiện ích có thể tuỳ ý đăng ký một lệnh gọi lại để nhận thông tin cập nhật về các thay đổi trạng thái của các lệnh chạy trong thời gian dài theo các bước sau:
- Các thay đổi về trạng thái lệnh sẽ được thông báo cho
CommandListener, hãy triển khai giao diện này trong ứng dụng của bạn và cung cấp thông tin triển khai về cách xử lý các thông tin cập nhật trạng thái đã nhận. - Mở rộng
NotificationReceiverServicevà cung cấp một thực thểCommandListenerthông qua phương thứcgetCommandListener. Định cấu hình chính sách ứng dụng để chỉ định vai trò
COMPANION_APPcho ứng dụng của bạn (xem phần Cấu hình chính sách).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 ...; } }
Cấu hình chính sách
Để cho phép ứng dụng tiện ích giao tiếp trực tiếp với ADP, EMM phải chỉ định vai trò COMPANION_APP cho ứng dụng bằng cách sử dụng trường roles trong chính sách ứng dụng.
"applications": [{
"packageName": "com.amapi.extensibility.demo",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "COMPANION_APP" }
]
}]
Để biết các lựa chọn khác, hãy xem phần Cung cấp thiết bị theo chính sách về vai trò của ứng dụng.
Thử nghiệm
Kiểm thử đơn vị
LocalCommandClient là một giao diện, do đó cho phép cung cấp một phương thức triển khai có thể kiểm thử.
Kiểm thử tích hợp
Bạn sẽ cần cung cấp những thông tin sau để kiểm thử bằng ADP:
- Tên gói của ứng dụng tiện ích.
- Hàm băm SHA-256 được mã hoá theo chuẩn base64 của Chữ ký liên kết với gói ứng dụng.
- Không bắt buộc, nếu kiểm thử lệnh gọi lại – tên đủ điều kiện của dịch vụ từ dịch vụ mới được giới thiệu để hỗ trợ lệnh gọi lại. (Tên đủ điều kiện của
CommandServicetrong ví dụ).