Wenn Sie Apps für den Unternehmensmarkt entwickeln, um bestimmte Anforderungen zu erfüllen, die in den Richtlinien einer Organisation festgelegt sind. Verwaltete Konfigurationen, die bisher als Anwendungseinschränkungen bezeichnet wurden, kann der IT-Administrator der Organisation per Remote-Zugriff Einstellungen für Apps. Diese Funktion ist besonders nützlich für von Organisationen genehmigte Apps, die in einem Arbeitsprofil bereitgestellt sind.
Beispielsweise kann eine Organisation verlangen, dass genehmigte Apps das IT-Administrator:
- URLs für einen Webbrowser zulassen oder blockieren
- Legen Sie fest, ob eine App Inhalte über das Mobilfunknetz oder nur über per WLAN
- E-Mail-Einstellungen der App konfigurieren
In diesem Leitfaden erfahren Sie, wie Sie verwaltete Konfigurationseinstellungen für Ihre App. Beispiel-Apps mit einer verwalteten Konfiguration finden Sie unter ManagedConfigurations. Wenn Sie ein EMM-Entwickler (Enterprise Mobility Management) sind, finden Sie weitere Informationen im Leitfaden zur Android Management API.
Hinweis:Aus historischen Gründen werden diese Konfigurationseinstellungen als
restrictions und werden mit Dateien und Klassen implementiert,die diese Methode verwenden.
(z. B. RestrictionsManager
). Diese
können mit Einschränkungen eine
Vielzahl von Konfigurationsoptionen implementiert werden.
nicht nur die Funktionalität der App einschränken.
Remote-Konfiguration – Übersicht
Apps definieren die verwalteten Konfigurationsoptionen, die remote ausgeführt werden können von einem IT-Administrator festgelegt. Das sind willkürliche Einstellungen, von einem Anbieter verwalteter Konfigurationen geändert wurden. Wenn Ihre App in einem Arbeitsprofil ausgeführt wird, kann der IT-Administrator die verwaltete Konfiguration Ihrer App ändern.
Der Anbieter verwalteter Konfigurationen ist eine weitere App, die auf demselben Gerät ausgeführt wird. Diese App wird normalerweise vom IT-Administrator verwaltet. Die Der IT-Administrator informiert das verwaltete Team über Konfigurationsänderungen Konfigurationsanbieter-App. Diese App wiederum ändert die Konfigurationen in Ihrer App.
So stellen Sie extern verwaltete Konfigurationen bereit:
- Deklariere die verwalteten Konfigurationen in deinem App-Manifest. Tun IT-Administratoren können so die Daten über Google Play APIs konfigurieren.
- Beim Fortsetzen der App kannst du mit dem Objekt
RestrictionsManager
die aktuelle verwaltete Konfigurationen vornehmen und die Benutzeroberfläche und das Verhalten Ihrer App diesen Konfigurationen entsprechen. - Achten Sie auf das Ereignis
ACTION_APPLICATION_RESTRICTIONS_CHANGED
Intent. Bei Erhalt dieser E-Mail Nachricht an alle, sieh auf derRestrictionsManager
nach, die aktuell verwalteten Konfigurationen haben, und nehmen Sie bei Bedarf App-Verhalten haben.
Verwaltete Konfigurationen definieren
Ihre App kann jede verwaltete Konfiguration unterstützen, die Sie definieren möchten. Sie deklarieren die verwalteten Konfigurationen der App in einer Datei für verwaltete Konfigurationen erstellen und deklarieren Konfigurationsdatei im Manifest. Das Erstellen einer Konfigurationsdatei andere Apps, um die verwalteten Konfigurationen Ihrer App zu untersuchen. EMM-Partner können die Konfigurationen Ihrer App mithilfe von Google Play APIs lesen.
Fügen Sie das folgende Element ein, um die Optionen für die Remote-Konfiguration Ihrer App zu definieren
im Manifest deines Manifests
<ph type="x-smartling-placeholder"></ph>
<application>
-Element:
<meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions" />
Erstellen Sie eine Datei mit dem Namen app_restrictions.xml
in der
res/xml
-Verzeichnis. Die Struktur dieser Datei wird im
Die Referenz für RestrictionsManager
. Die Datei hat eine
einzelnes übergeordnetes <restrictions>
-Element, das folgende Elemente enthält:
ein untergeordnetes <restriction>
-Element für jede Konfiguration
die die App bietet.
Hinweis:Keine lokalisierten Versionen des verwaltete Konfigurationsdatei. Deine App darf nur Folgendes haben: eine einzelne verwaltete Konfigurationsdatei, damit die Konfigurationen in allen Sprachen einheitlich.
In Unternehmen nutzt ein EMM in der Regel das verwaltete Konfigurationsschema zum Generieren einer Remote-Konsole für die IT-Abteilung Administratoren, damit diese Ihre App per Fernzugriff konfigurieren können. .
Der Anbieter der verwalteten Konfiguration kann die App abfragen, um Details zu finden zu den verfügbaren Konfigurationen, einschließlich der Beschreibung, Text. Der Konfigurationsanbieter und der IT-Administrator können die Einstellung verwalteten Konfigurationen jederzeit möglich ist, auch wenn die App nicht ausgeführt wird.
Beispiel: Ihre App kann remote so konfiguriert werden, dass sie zugelassen oder blockiert wird.
um Daten über eine Mobilfunkverbindung herunterzuladen. Deine App könnte Folgendes enthalten:
<restriction>
-Element wie hier gezeigt:
<?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http://schemas.android.com/apk/res/android"> <restriction android:key="downloadOnCellular" android:title="@string/download_on_cell_title" android:restrictionType="bool" android:description="@string/download_on_cell_description" android:defaultValue="true" /> </restrictions>
Mit dem Attribut android:key
jeder Konfiguration können Sie
den Wert aus einem verwalteten Konfigurations-Bundle zu lesen. Aus diesem Grund
muss jede Konfiguration einen eindeutigen Schlüsselstring haben. Der String
nicht lokalisiert werden. Er muss mit einem Stringliteral angegeben werden.
Hinweis:In einer Produktions-App werden android:title
und
android:description
sollte aus einer lokalisierten Ressource stammen
enthalten, wie in den
Lokalisierung mit Ressourcen.
Eine App definiert Einschränkungen mithilfe von Bundles in einer bundle_array
.
Beispielsweise kann in einer App mit mehreren VPN-Verbindungsoptionen jeder VPN-Server definiert werden.
Konfiguration in einer bundle
mit mehreren
Sets, die in einem Bundle-Array gruppiert sind:
<?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http://schemas.android.com/apk/res/android" > <restriction android:key="vpn_configuration_list" android:restrictionType="bundle_array"> <restriction android:key="vpn_configuration" android:restrictionType="bundle"> <restriction android:key="vpn_server" android:restrictionType="string"/> <restriction android:key="vpn_username" android:restrictionType="string"/> <restriction android:key="vpn_password" android:restrictionType="string"/> </restriction> </restriction> </restrictions>
Unterstützte Typen für das Element android:restrictionType
die in Tabelle 1 aufgeführt sind,
die Referenz für RestrictionsManager
und
RestrictionEntry
Typ | android:restrictionType | Normale Nutzung |
---|---|---|
TYPE_BOOLEAN
|
"bool" |
Ein boolescher Wert, wahr oder falsch. |
TYPE_STRING
|
"string" |
Ein Stringwert, z. B. ein Name. |
TYPE_INTEGER
|
"integer" |
Eine Ganzzahl mit einem Wert aus
MIN_VALUE bis
MAX_VALUE .
|
TYPE_CHOICE
|
"choice" |
Als Stringwert aus android:entryValues
werden in der Regel als
Einzelauswahlliste dargestellt.
|
TYPE_MULTI_SELECT
|
"multi-select" |
Ein String-Array mit Werten, die aus android:entryValues ausgewählt wurden.
Verwenden Sie diese Option, wenn Sie eine Liste mit Mehrfachauswahl präsentieren möchten, in der mehrere
kann ausgewählt werden, z. B. für die Auswahl bestimmter Titel, die auf die Zulassungsliste gesetzt werden sollen.
|
TYPE_NULL
|
"hidden" |
Ausgeblendeter Einschränkungstyp. Verwenden Sie diesen Typ für Informationen, muss übertragen werden, sollte aber auf der Benutzeroberfläche. Speichert einen einzelnen Stringwert. |
TYPE_BUNDLE_ARRAY
|
"bundle_array" |
Verwenden Sie dieses Argument zum Speichern von Einschränkungsarrays.
bundles Verfügbar für Android 6.0 (API-Level 23).
|
Hinweis: android:entryValues
sind maschinenlesbar und können nicht
lokalisiert. Verwenden Sie android:entries
, um für Menschen lesbare Werte darzustellen, die lokalisiert werden können.
Jeder Eintrag muss einen entsprechenden Index in android:entryValues
haben.
Verwaltete Konfigurationen prüfen
Deine App wird nicht automatisch benachrichtigt, wenn andere Apps ihre Konfigurationseinstellungen. Stattdessen müssen Sie prüfen, wann die App gestartet oder fortgesetzt wird, und achten auf eine um herauszufinden, ob sich die Konfigurationen ändern, App ausgeführt wird.
Um die aktuellen Konfigurationseinstellungen zu ermitteln, verwendet Ihre App einen
RestrictionsManager
-Objekt. Ihre App sollte
überprüfen Sie zu folgenden Zeiten nach den aktuellen verwalteten Konfigurationen:
- Wenn die App gestartet oder fortgesetzt wird,
onResume()
-Methode - Wenn die App über eine Konfigurationsänderung informiert wird, wie unter Auf verwaltete Konfiguration warten Änderungen
Um ein RestrictionsManager
-Objekt zu erhalten, rufen Sie den aktuellen
Aktivität mit getActivity()
, danach
rufen Sie die Activity.getSystemService()
-Methode dieser Aktivität auf:
Kotlin
var myRestrictionsMgr = activity?.getSystemService(Context.RESTRICTIONS_SERVICE) as RestrictionsManager
Java
RestrictionsManager myRestrictionsMgr = (RestrictionsManager) getActivity() .getSystemService(Context.RESTRICTIONS_SERVICE);
Wenn du eine RestrictionsManager
hast, erhältst du die
Konfigurationseinstellungen durch Aufrufen der
getApplicationRestrictions()
-Methode:
Kotlin
var appRestrictions: Bundle = myRestrictionsMgr.applicationRestrictions
Java
Bundle appRestrictions = myRestrictionsMgr.getApplicationRestrictions();
Hinweis:Der Einfachheit halber können Sie auch die aktuellen
Konfigurationen mit einer UserManager
vornehmen, indem Sie
UserManager.getApplicationRestrictions()
. Diese Methode verhält sich genau wie
wie bei RestrictionsManager.getApplicationRestrictions()
.
Bei der Methode getApplicationRestrictions()
muss aus dem Datenspeicher gelesen werden.
sollte sparsam durchgeführt werden. Rufen Sie diese Methode nicht jedes Mal auf,
die aktuelle Konfiguration kennen. Rufen Sie sie stattdessen einmal auf, wenn Ihre App
startet oder wird fortgesetzt und das abgerufene Bundle mit verwalteten Konfigurationen wird im Cache gespeichert. Dann anhören
für den Intent ACTION_APPLICATION_RESTRICTIONS_CHANGED
, um herauszufinden, ob die Konfiguration
während Ihre App aktiv ist, wie unter
Auf Änderungen der verwalteten Konfiguration warten.
Verwaltete Konfigurationen lesen und anwenden
Die Methode getApplicationRestrictions()
gibt ein Bundle
zurück.
mit einem Schlüssel/Wert-Paar für jede festgelegte Konfiguration. Die
Werte sind alle vom Typ Boolean
, int
,
String
und String[]
. Sobald Sie die
verwalteten Konfigurationen Bundle
, Sie können die aktuelle
Konfigurationseinstellungen mit den Standardmethoden Bundle
für
diese Datentypen, z. B. getBoolean()
oder
getString()
.
Hinweis: Die verwalteten Konfigurationen Bundle
enthält ein Element für jede Konfiguration, die explizit von einem
Anbieter verwalteter Konfigurationen. Sie können jedoch nicht davon ausgehen, dass ein
Konfiguration ist im Bundle vorhanden, nur weil Sie eine Standardkonfiguration
in der XML-Datei für verwaltete Konfigurationen.
Es liegt an Ihrer App, auf Grundlage der aktuellen Situation
Einstellungen für die verwaltete Konfiguration. Wenn Ihre App beispielsweise eine
gibt an, ob Daten über eine
Mobilfunkverbindung steht und Sie feststellen, dass die Konfiguration auf
false
, Sie müssten den Datendownload deaktivieren, es sei denn,
Das Gerät verfügt über eine WLAN-Verbindung, wie im folgenden Beispielcode gezeigt:
Kotlin
val appCanUseCellular: Boolean = if (appRestrictions.containsKey("downloadOnCellular")) { appRestrictions.getBoolean("downloadOnCellular") } else { // cellularDefault is a boolean using the restriction's default value cellularDefault } if (!appCanUseCellular) { // ...turn off app's cellular-download functionality // ...show appropriate notices to user }
Java
boolean appCanUseCellular; if (appRestrictions.containsKey("downloadOnCellular")) { appCanUseCellular = appRestrictions.getBoolean("downloadOnCellular"); } else { // cellularDefault is a boolean using the restriction's default value appCanUseCellular = cellularDefault; } if (!appCanUseCellular) { // ...turn off app's cellular-download functionality // ...show appropriate notices to user }
Informationen zum Anwenden mehrerer verschachtelter Einschränkungen finden Sie unter
bundle_array
Einschränkungseintrag als Sammlung von Parcelable
-Objekten
und streamen Sie als Bundle
. In diesem Beispiel hat die Konfiguration jedes VPN
Die Daten werden geparst und zum Erstellen einer Liste mit Optionen für die Serververbindung verwendet:
Kotlin
// VpnConfig is a sample class used store config data, not defined val vpnConfigs = mutableListOf<VpnConfig>() val parcelables: Array<out Parcelable>? = appRestrictions.getParcelableArray("vpn_configuration_list") if (parcelables?.isNotEmpty() == true) { // iterate parcelables and cast as bundle parcelables.map { it as Bundle }.forEach { vpnConfigBundle -> // parse bundle data and store in VpnConfig array vpnConfigs.add(VpnConfig() .setServer(vpnConfigBundle.getString("vpn_server")) .setUsername(vpnConfigBundle.getString("vpn_username")) .setPassword(vpnConfigBundle.getString("vpn_password"))) } } if (vpnConfigs.isNotEmpty()) { // ...choose a VPN configuration or prompt user to select from list }
Java
// VpnConfig is a sample class used store config data, not defined List<VpnConfig> vpnConfigs = new ArrayList<>(); Parcelable[] parcelables = appRestrictions.getParcelableArray("vpn_configuration_list"); if (parcelables != null && parcelables.length > 0) { // iterate parcelables and cast as bundle for (int i = 0; i < parcelables.length; i++) { Bundle vpnConfigBundle = (Bundle) parcelables[i]; // parse bundle data and store in VpnConfig array vpnConfigs.add(new VpnConfig() .setServer(vpnConfigBundle.getString("vpn_server")) .setUsername(vpnConfigBundle.getString("vpn_username")) .setPassword(vpnConfigBundle.getString("vpn_password"))); } } if (!vpnConfigs.isEmpty()) { // ...choose a VPN configuration or prompt user to select from list }
Auf Änderungen der verwalteten Konfiguration warten
Immer wenn die verwalteten Konfigurationen einer App geändert werden, löst das System die
ACTION_APPLICATION_RESTRICTIONS_CHANGED
Intent. Ihre App muss auf
Intent erstellen, sodass Sie das Verhalten der App ändern können, wenn die Konfigurationseinstellungen
ändern können.
Hinweis:Der Intent ACTION_APPLICATION_RESTRICTIONS_CHANGED
wird nur an Listener gesendet.
dynamisch registriert und nicht für deklarierte Listener
im App-Manifest ein.
Der folgende Code zeigt, wie ein Übertragungsempfänger dynamisch für diesen Intent:
Kotlin
val restrictionsFilter = IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED) val restrictionsReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { // Get the current configuration bundle val appRestrictions = myRestrictionsMgr.applicationRestrictions // Check current configuration settings, change your app's UI and // functionality as necessary. } } registerReceiver(restrictionsReceiver, restrictionsFilter)
Java
IntentFilter restrictionsFilter = new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED); BroadcastReceiver restrictionsReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Get the current configuration bundle Bundle appRestrictions = myRestrictionsMgr.getApplicationRestrictions(); // Check current configuration settings, change your app's UI and // functionality as necessary. } }; registerReceiver(restrictionsReceiver, restrictionsFilter);
Hinweis:Normalerweise muss Ihre App nicht benachrichtigt werden. zu Konfigurationsänderungen, wenn es pausiert ist. Stattdessen sollten Sie die Registrierung an Ihren Übertragungsempfänger, wenn die App pausiert ist. Wenn die App wieder aktiviert wird, eine Prüfung auf die aktuellen verwalteten Konfigurationen (wie in den Verwaltete Konfigurationen prüfen und registrieren Ihren Übertragungsempfänger, um sicherzustellen, dass Sie über Konfigurationsänderungen informiert werden während die App aktiv ist.
Feedback zur verwalteten Konfiguration an EMMs senden
Nachdem Sie die Änderungen an der verwalteten Konfiguration auf Ihre App angewendet haben, sollten Sie EMMs über den Status der Änderung. Android unterstützt eine Funktion namens keyed app state, wird verwendet, um jedes Mal Feedback zu senden, wenn Ihre App versucht, verwaltete Konfigurationsänderungen anzuwenden. Dieses Feedback kann als Bestätigung dienen, dass deine App die verwalteten Konfigurationen erfolgreich festgelegt hat. Eine Fehlermeldung wird angezeigt, wenn die angegebenen Änderungen in Ihrer Anwendung nicht angewendet werden konnten.
EMM-Anbieter sind in der Lage, dieses Feedback abzurufen und in ihren Konsolen für die IT-Abteilung anzuzeigen. für Administratoren. Weitere Informationen finden Sie unter App-Feedback an EMMs senden. Informationen zum Thema, einschließlich einer detaillierten Anleitung, wie du deiner App Feedback geben kannst.
Zusätzliche Codebeispiele
Das Feld ManagedConfigurations wird die Verwendung der auf dieser Seite behandelten APIs weiter veranschaulicht.