Android Management API (AMAPI) SDK cho phép ứ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 SDK AMAPI cung cấp thêm thông tin về thư viện này và cách thêm thư viện 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 được phát hành và các thông số cụ thể.
Đoạn mã sau đây cho biết cách đưa ra một 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 một yêu cầu dữ liệu ứng dụng rõ ràng cho
các gói dữ liệu và chờ cho đến khi lệnh được phát hành thành công. Nếu
đã cấp thành công, một đối tượng Command
sẽ được trả về cùng với giá trị hiện tại
trạng thái lệnh và mã nhận dạng lệnh mà sau này có thể được dùng để truy vấn trạng thái của
bất kỳ lệnh chạy nào trong thời gian dài.
Nhận lệnh
Ứ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 đã đưa ra trước đó. Người nhận
truy xuất trạng thái của lệnh, bạn sẽ cần ID lệnh (có sẵn từ
yêu cầu lệnh phát hành). Đoạn mã sau đây cho biết cách gửi một
GetCommandRequest
cho 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());
}
...
Nghe lệnh gọi lại thay đổi trạng thái Command
Ứng dụng tiện ích có thể đăng ký lệnh gọi lại để nhận thông tin cập nhật về các thay đổi về trạng thái của các lệnh chạy trong thời gian dài bằng cách làm theo những 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 lệnh này giao diện trong ứng dụng của bạn và cung cấp cách triển khai về cách xử lý đã nhận được thông tin cập nhật trạng thái. - Mở rộng
NotificationReceiverService
và cung cấpCommandListener
thực thể. Chỉ định tên lớp của
NotificationReceiverService
mở rộng trong Android Chính sách API Quản lý (xem 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 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 ...; } }
Thêm dịch vụ vào
AndroidManifest.xml
của bạn và đảm bảo rằng dịch vụ đó đã được xuất.<service android:name = ".notification.SampleCommandService" android:exported = "true" />
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
cung cấp chính sách 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"
}
}]
Thử nghiệm
Kiểm thử đơn vị
LocalCommandClient
là một giao diện có thể kiểm thử được
trong quá trình triển khai.
Kiểm thử tích hợp
Bạn cần có 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 hệ thập lục phân của Chữ ký được liên kết với ứng dụng .
- Không bắt buộc, nếu thử nghiệm 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
CommandService
trong ví dụ).