Verwaltete Konfigurationen einrichten

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 der RestrictionsManager 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

Tabelle 1 Typen und Verwendung von Einschränkungseinträgen.

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:

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.