Android Management API (AMAPI) SDK'sı, EMM tarafından belirtilen bir uzantı uygulamasının şunları yapmasına olanak tanır:
doğrudan Android Device Policy (ADP) ile iletişim kurma ve Commands
'i yürütme
cihaz üzerinde.
AMAPI SDK'sı ile entegrasyon, aşağıdakilerle ilgili daha fazla bilgi sağlar: uygulamanıza nasıl ekleyeceğinizi inceleyeceğiz.
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
, aşağıdakilerle ilgili ayrıntıları içerecek istek nesnesini içerir:
komutu ve belirli parametreler bulunur.
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
komutun başarıyla verilmesini bekler. Eğer
başarılı bir şekilde yayınlanırsa Command
nesnesi mevcut
komut durumunu ve daha sonra komutun durumunu sorgulamak için kullanılabilecek komut kimliğini
komutunu çalıştırın.
Komut Alma
Uzantı uygulamaları, daha önce yayınlanan komut isteklerinin durumunu sorgulayabilir. Alıcı:
bir komutun durumunu almak için komut kimliğine ihtiyacınız olacaktır (
komut isteği gönderebilirsiniz). Aşağıdaki snippet, bir
ADP'ye GetCommandRequest
.
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ı, durum değişiklikleriyle ilgili güncellemeleri almak için bir geri çağırma kaydedebilir şu adımları uygulayarak:
- Komut durumu değişiklikleri
CommandListener
e-posta adresine bildirilir, bunu uygula ve geri bildirimlerinizin nasıl ele alınacağını durum güncellemeleri aldı. NotificationReceiverService
süresini uzatın veCommandListener
ekleyin kullanır.Android'de genişletilmiş
NotificationReceiverService
sınıf adını belirtin Management API politikası (Politika Yapılandırması sayfasını inceleyin).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
extensionConfig
politikası sağlayın.
"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
hakkında bilgi edindiniz.
Entegrasyon testi
ADP ile test yapmak için aşağıdaki bilgiler gerekir:
- Uzantı uygulamasının paket adı.
- Uygulamayla ilişkili İmza'nın onaltılık kodlanmış SHA-256 karması paketinden yararlanın.
- İsteğe bağlı olarak, geri çağırma test ediliyorsa - hizmetin
yeni kullanıma sunulan hizmeti kullanıma sunduk. (Projenin tam adı
CommandService
) temsil eder.