Android Management API (AMAPI) SDK memungkinkan aplikasi ekstensi yang ditentukan EMM untuk
berkomunikasi langsung dengan Android Device Policy (ADP) dan menjalankan Commands
di perangkat.
Integrasikan dengan AMAPI SDK memberikan informasi lebih lanjut tentang library ini dan cara menambahkannya ke aplikasi Anda.
Setelah SDK mengintegrasikan, aplikasi ekstensi Anda dapat berkomunikasi dengan ADP untuk:
- kirim permintaan perintah
- membuat kueri status permintaan perintah
- menerima perubahan status perintah
Menerbitkan Perintah
Aplikasi ekstensi dapat meminta agar 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 penerbitan permintaan data aplikasi yang jelas untuk paket
yang ditentukan dan menunggu hingga perintah berhasil dikeluarkan. Jika berhasil dibuat, objek Command
akan ditampilkan dengan status perintah saat ini dan ID perintah yang nantinya dapat digunakan untuk membuat kueri status dari semua perintah yang berjalan lama.
Mendapatkan Perintah
Aplikasi ekstensi dapat melakukan kueri status permintaan perintah yang dikeluarkan sebelumnya. Untuk
mengambil status perintah, Anda memerlukan ID perintah (tersedia dari
permintaan perintah masalah). 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 mendaftarkan callback untuk menerima update perubahan status perintah yang berjalan lama dengan mengikuti langkah-langkah berikut:
- Perubahan status perintah akan dikirimkan ke
CommandListener
, implementasikan antarmuka ini di aplikasi Anda, dan berikan implementasi tentang cara menangani update status yang diterima. - Perluas
NotificationReceiverService
dan berikan instanceCommandListener
. Tentukan nama class
NotificationReceiverService
yang diperluas dalam kebijakan Android Management API (lihat Konfigurasi Kebijakan).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 ...; } }
Tambahkan layanan ke
AndroidManifest.xml
dan pastikan layanan diekspor.<service android:name = ".notification.SampleCommandService" android:exported = "true" />
Konfigurasi Kebijakan
Agar aplikasi ekstensi dapat berkomunikasi langsung dengan ADP, EMM harus
menyediakan kebijakan 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"
}
}]
Pengujian
Pengujian unit
LocalCommandClient
adalah antarmuka, sehingga memungkinkan penyediaan implementasi
yang dapat diuji.
Pengujian integrasi
Informasi berikut diperlukan untuk menguji dengan ADP:
- Nama paket aplikasi ekstensi.
- Hash SHA-256 berenkode heksadesimal 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
CommandService
yang sepenuhnya memenuhi syarat dalam contoh).