Android Management API (AMAPI) SDK'sı, EMM tarafından belirtilen bir uzantı uygulamasının doğrudan Android Device Policy (ADP) ile iletişim kurmasını ve cihazda Commands
çalıştırmasını sağlar.
AMAPI SDK ile entegrasyon, bu kitaplık ve onu uygulamanıza nasıl ekleyeceğiniz hakkında daha fazla bilgi sağlar.
SDK entegre edildikten sonra, uzantı uygulamanız ADP ile iletişim kurarak şunları yapabilir:
Sorun Komutu
Uzantı uygulamaları, ADP kullanılarak komut verilmesini isteyebilir.
IssueCommandRequest
, yayınlanacak komutla ilgili ayrıntıları ve belirli parametreleri içerecek istek nesnesini içerir.
Aşağıdaki snippet'te, paketin verilerini temizlemek için nasıl istekte bulunulacağı gösterilmektedir:
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();
}
...
Önceki örnekte, belirtilen paketler için net bir uygulama verileri isteği gönderilmesi ve komut başarıyla yayınlanana kadar beklenmesi gösterilmektedir. Başarıyla yayınlanırsa mevcut komut durumunu ve daha sonra uzun süre çalışan komutların durumunu sorgulamak için kullanılabilecek komut kimliğini içeren bir Command
nesnesi döndürülür.
Komut Alma
Uzantı uygulamaları, önceden yayınlanan komut isteklerinin durumunu sorgulayabilir. Bir komutun durumunu almak için komut kimliğine ihtiyacınız vardır (sorun komut isteğinden edinilebilir). Aşağıdaki snippet'te, ADP'ye GetCommandRequest
işleminin nasıl gönderileceği gösterilmektedir.
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());
}
...
Komut durumu değişikliği geri çağırmalarını dinleme
Bir uzantı uygulaması, aşağıdaki adımları uygulayarak uzun süre çalışan komutların durum değişiklikleriyle ilgili güncellemeleri almak için bir geri çağırma kaydedebilir:
- Komut durumu değişiklikleri
CommandListener
'e bildirilir, bu arayüzü uygulamanıza uygular ve alınan durum güncellemelerinin nasıl işleneceğine dair uygulama sağlar. NotificationReceiverService
öğesini genişletin veCommandListener
örneği sağlayın.Android Management API politikasında genişletilmiş
NotificationReceiverService
sınıf adını belirtin (Politika Yapılandırması bölümüne bakın).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 ...; } }
Hizmeti
AndroidManifest.xml
cihazınıza ekleyin ve dışa aktarıldığından emin olun.<service android:name = ".notification.SampleCommandService" android:exported = "true" />
Politika Yapılandırması
Uzantı uygulamasının ADP ile doğrudan iletişim kurmasını sağlamak için EMM'nin bir extensionConfig
politikası sağlaması gerekir.
"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"
}
}]
Test
Birim testi
LocalCommandClient
bir arayüzdür ve bu nedenle test edilebilir bir uygulama sağlanmasına olanak tanır.
Entegrasyon testi
ADP ile test yapmak için aşağıdaki bilgiler gerekir:
- Uzantı uygulamasının paket adı.
- Uygulama paketiyle ilişkili İmza'nın onaltılık kodlanmış SHA-256 karması.
- İsteğe bağlı olarak, geri çağırma test ediliyorsa, geri çağırmayı desteklemek için yeni kullanıma sunulan hizmetten alınan hizmetin tam adı. (Örnekte
CommandService
öğesinin tam adı).