Android Management API (AMAPI) SDK memungkinkan aplikasi ekstensi yang ditentukan EMM untuk
berkomunikasi langsung dengan Android Device Policy (ADP) dan menjalankan Commands
di perangkat.
Mengintegrasikan dengan AMAPI SDK memberikan informasi selengkapnya tentang library ini dan cara menambahkannya ke aplikasi Anda.
Setelah mengintegrasikan SDK, aplikasi ekstensi Anda dapat berkomunikasi dengan ADP untuk:
- mengirim permintaan perintah
- mengkueri status permintaan perintah
- menerima perubahan status perintah
Mengeluarkan Perintah
Aplikasi ekstensi dapat meminta perintah dikeluarkan menggunakan ADP.
IssueCommandRequest berisi objek permintaan yang akan berisi detail tentang perintah yang akan dikeluarkan dan parameter tertentu.
Cuplikan berikut menunjukkan cara mengeluarkan permintaan untuk menghapus data paket:
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();
}
...
Contoh sebelumnya menunjukkan cara mengeluarkan permintaan penghapusan data aplikasi untuk paket tertentu dan menunggu hingga perintah berhasil dikeluarkan. Jika berhasil dikeluarkan, objek Command akan ditampilkan dengan status perintah saat ini dan ID perintah yang nantinya dapat digunakan untuk mengkueri status perintah yang berjalan lama.
Mendapatkan Perintah
Aplikasi ekstensi dapat mengkueri status permintaan perintah yang dikeluarkan sebelumnya. Untuk mengambil status perintah, Anda memerlukan ID perintah (tersedia dari permintaan perintah keluaran). Cuplikan berikut menunjukkan cara mengirim
GetCommandRequest ke 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());
}
...
Memproses callback perubahan status Perintah
Aplikasi ekstensi dapat secara opsional mendaftarkan callback untuk menerima pembaruan perubahan status perintah yang berjalan lama dengan mengikuti langkah-langkah berikut:
- Perubahan status perintah akan diberi tahu ke
CommandListener. Terapkan antarmuka ini di aplikasi Anda dan berikan implementasi tentang cara menangani pembaruan status yang diterima. - Perluas
NotificationReceiverServicedan berikan instanceCommandListenermelalui metodegetCommandListener. Konfigurasi kebijakan aplikasi untuk menetapkan peran
COMPANION_APPke aplikasi Anda (lihat Konfigurasi Kebijakan).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 ...; } }
Konfigurasi Kebijakan
Agar aplikasi ekstensi dapat berkomunikasi langsung dengan ADP, EMM harus menetapkan peran COMPANION_APP ke aplikasi menggunakan kolom roles dalam kebijakan aplikasi.
"applications": [{
"packageName": "com.amapi.extensibility.demo",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "COMPANION_APP" }
]
}]
Untuk opsi tambahan yang tersedia, lihat Menyediakan perangkat dengan kebijakan peran aplikasi.
Pengujian
Pengujian unit
LocalCommandClient adalah antarmuka sehingga memungkinkan untuk menyediakan implementasi yang dapat diuji.
Pengujian integrasi
Informasi berikut akan diperlukan untuk melakukan pengujian dengan ADP:
- Nama paket aplikasi ekstensi.
- Hash SHA-256 berenkode base64 dari Tanda Tangan yang terkait dengan paket aplikasi.
- Secara opsional, jika menguji callback - nama layanan yang sepenuhnya memenuhi syarat dari layanan yang baru diperkenalkan untuk mendukung callback. (Nama
CommandServiceyang sepenuhnya memenuhi syarat dalam contoh).