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
yürütmesini sağlar.
AMAPI SDK'sı ile entegrasyon, bu kitaplık ve uygulamanıza nasıl ekleneceği hakkında daha fazla bilgi sağlar.
SDK entegre edildikten sonra uzantı uygulamanız ADP ile iletişim kurarak şunları yapabilir:
Komut verme
Bir uzantı uygulaması, ADP kullanılarak komut verilmesini isteyebilir.
IssueCommandRequest
, gönderilecek komut ve belirli parametreler hakkında ayrıntılar içeren istek nesnesini içerir.
Aşağıdaki snippet'te, paketin verilerini temizleme isteği 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.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 verisi isteği gönderilmesi ve komutun başarıyla gönderilmesi için bekleme gösterilmektedir. Başarılı bir şekilde yayınlanırsa mevcut komut durumu ve komut kimliği içeren bir Command
nesnesi döndürülür. Bu nesne daha sonra uzun süre çalışan komutların durumunu sorgulamak için kullanılabilir.
Get Command
Uzantı uygulamaları, daha önce gönderilen komut isteklerinin durumunu sorgulayabilir. Bir komutun durumunu almak için komut kimliğine (sipariş komutu isteğinde bulunarak edinebilirsiniz) ihtiyacınız vardır. Aşağıdaki snippet'te, ADP'ye nasıl GetCommandRequest
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üncellemeler almak için isteğe bağlı olarak geri çağırma işlevi kaydedebilir:
- Komut durumu değişiklikleri
CommandListener
'a bildirilir. Bu arayüzü uygulamanıza uygulayın ve alınan durum güncellemelerinin nasıl ele alınacağına dair uygulama sağlayın. NotificationReceiverService
sınıfını genişletin vegetCommandListener
yöntemi aracılığıyla birCommandListener
örneği sağlayın.Android Management API politikasında genişletilmiş
NotificationReceiverService
sınıfının adını belirtin (Politika Yapılandırması'na bakın).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 ...; } }
Politika Yapılandırması
Uzatma uygulamasının ADP ile doğrudan iletişim kurabilmesi 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üz olduğundan test edilebilir bir uygulama sunmanıza olanak tanır.
Entegrasyon testi
ADP ile test yapmak için aşağıdaki bilgilere ihtiyacınız olacaktır:
- Uzantı uygulamasının paket adı.
- Uygulama paketiyle ilişkili imzanın onaltılık kodlanmış SHA-256 karması.
- İsteğe bağlı olarak, geri çağırma testi yapılıyorsa geri çağırmayı desteklemek için yeni kullanıma sunulan hizmetten hizmetin tam nitelikli adı. (Örnekte
CommandService
için tam nitelikli ad).