Yönetilen yapılandırmaları kurulumu

Kurumsal pazar için uygulama geliştiriyorsanız bir kurumun politikaları tarafından belirlenen belirli gereksinimleri karşılamaktır. Daha önce uygulama kısıtlamaları olarak bilinen yönetilen yapılandırmalar, kuruluşun BT yöneticisinin, uzaktan erişim için ayarlarla ilgili ayarları belirtmesine Bu özellik, özellikle kuruluş onaylı kullanıcılar için bir iş profiline dağıtılıyor.

Örneğin bir kuruluş, onaylanan uygulamaların BT yöneticisinin sorumluluğu:

  • Web tarayıcısı için URL'lere izin verme veya URL'leri engelleme
  • Bir uygulamanın içeriği hücresel ağ üzerinden senkronize etmesine izin verilip verilmeyeceğini mi yoksa yalnızca kablosuz ağ ile
  • Uygulamanın e-posta ayarlarını yapılandırma

Bu kılavuz, en iyi şekilde yararlanabilirsiniz. Yönetilen yapılandırmaya sahip örnek uygulamaları görüntülemek için ManagedConfigurations bölümüne bakın. Kurumsal mobilite yönetimi (EMM) geliştiricisiyseniz Android Management API kılavuzuna bakın.

Not: Geçmişteki nedenlerden dolayı, bu yapılandırma ayarları kısıtlamalara tabidir ve bunu kullanan dosyalar ve sınıflara terim (örneğin RestrictionsManager) dahil edilir. Ancak bu kısıtlamalar, aslında çok çeşitli yapılandırma seçenekleri uygulayabilir. uygulamanın işlevselliğindeki kısıtlamalarla da kalmıyor.

Uzaktan yapılandırmaya genel bakış

Uygulamalar, uzaktan gerçekleştirilebilecek yönetilen yapılandırma seçeneklerini tanımlar bir BT yöneticisi tarafından belirlenir. Bunlar, isteğe bağlı olarak yönetilen bir yapılandırma sağlayıcı tarafından değiştirildi. Uygulamanız bir iş profilinde çalışıyorsa BT yöneticisi, uygulamanızın yönetilen yapılandırmasını değiştirebilir.

Yönetilen yapılandırma sağlayıcısı, aynı cihazda çalışan başka bir uygulamadır. Bu uygulama genellikle BT yöneticisi tarafından kontrol edilir. İlgili içeriği oluşturmak için kullanılan BT yöneticisi yapılandırma değişikliklerini yönetilen yapılandırma sağlayıcı uygulaması. Bu uygulama da uygulamanızdaki yapılandırmaları değiştirir.

Harici olarak yönetilen yapılandırmalar sağlamak için:

  • Uygulama manifestinizde yönetilen yapılandırmaları bildirin. Yapmak Böylece BT yöneticisinin, uygulamanın yapılandırmalarına yardımcı olur.
  • Uygulama devam ettirildiğinde geçerli ayarı kontrol etmek için RestrictionsManager nesnesini kullanın. ve uygulamanızın kullanıcı arayüzünü ve davranışını bu yapılandırmalarla uyumlu olacaktır.
  • Şunu dinle: ACTION_APPLICATION_RESTRICTIONS_CHANGED intent. Bunu aldığınızda anlaştıysanız RestrictionsManager'da neler olduğunu kontrol edin ve hesabınızda gerekli değişiklikleri yapın. uygulamanın davranışı.

Yönetilen yapılandırmaları tanımlama

Uygulamanız, tanımlamak istediğiniz tüm yönetilen yapılandırmaları destekleyebilir. Siz uygulamanızın yönetilen yapılandırmalarını yönetilen bir yapılandırma dosyasında belirtin manifest dosyasındaki yapılandırma dosyaları. Bir yapılandırma dosyası oluşturmak, uygulamanızın sağladığı yönetilen yapılandırmaları incelemek için diğer uygulamalara gidin. EMM iş ortakları Google Play API'lerini kullanarak uygulamanızın yapılandırmalarını okuyabilir.

Uygulamanızın uzaktan yapılandırma seçeneklerini tanımlamak için aşağıdaki öğeyi yerleştirin manifest dosyanıza <application> öğesi:

<meta-data android:name="android.content.APP_RESTRICTIONS"
    android:resource="@xml/app_restrictions" />

Uygulamanızın içinde app_restrictions.xml adlı bir dosya oluşturun res/xml dizini. Bu dosyanın yapısı aşağıdaki şekilde açıklanmıştır: RestrictionsManager için referans. Dosyada içeren tek bir üst düzey <restrictions> öğesi her yapılandırma için bir <restriction> alt öğesi uygulamaya karar vermemiz gerekir.

Not: yönetilen yapılandırma dosyasıdır. Uygulamanızın yalnızca tek bir yönetilen yapılandırma dosyası olduğundan yapılandırmalar tüm yerel ayarlarda tutarlı olması gerekir.

Kurumsal ortamda EMM genellikle BT için uzak konsol oluşturmaya yönelik yapılandırma şeması yapılandırmanızı uzaktan yapılandırabilir. bir uygulamadır.

Yönetilen yapılandırma sağlayıcısı, ayrıntıları bulmak için uygulamayı sorgulayabilir açıklamaları da dahil olmak üzere uygulamanın mevcut yapılandırmalarında metin. Yapılandırma sağlayıcısı ve BT yöneticisi, uygulamanızın yönetilen yapılandırmaları uygulamanıza yardımcı olabilir.

Örneğin, uygulamanızın izin vermek veya yasaklamak üzere uzaktan yapılandırılabileceğini varsayalım mobil bağlantı üzerinden veri indirmesine olanak tanır. Uygulamanızda Şuna benzer <restriction> öğesi:

<?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>

Her yapılandırmanın android:key özelliğini kullanarak değerini yönetilen bir yapılandırma paketinden okuyabilir. İşte bu nedenle her yapılandırmanın benzersiz bir anahtar dizesi ve yerelleştirilemez. Değişmez dize değeri ile belirtilmelidir.

Not: Üretim uygulamasında android:title ve android:description, yerelleştirilmiş bir kaynaktan alınmalıdır dosyası, Kaynaklarla Yerelleştirme.

Bir uygulama, bundle_array içindeki paketleri kullanarak kısıtlamaları tanımlıyor. Örneğin, birden fazla VPN bağlantı seçeneğine sahip bir uygulama her VPN sunucusunu tanımlayabilir bundle içinde birden çok yapılandırma bir paket dizisinde gruplandırılmış paketler:

<?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>

android:restrictionType öğesi için desteklenen türler Tablo 1'de listelenmiştir ve RestrictionsManager ve RestrictionEntry.

Tablo 1. Kısıtlama girişi türleri ve kullanımı.

Tür android:restrictionType Tipik kullanım
TYPE_BOOLEAN "bool" Doğru veya yanlış boole değeri.
TYPE_STRING "string" Ad gibi bir dize değeri.
TYPE_INTEGER "integer" Şundan değeri olan bir tam sayı: MIN_VALUE - MAX_VALUE.
TYPE_CHOICE "choice" android:entryValues arasından bir dize değeri seçildi. genellikle tekli seçimli bir liste olarak sunulur.
TYPE_MULTI_SELECT "multi-select" android:entryValues içinden seçilen değerleri içeren bir dize dizisi. Birden fazla seçeneğin geçerli olduğu bir çoklu seçim listesi sunmak için bunu kullanın. giriş seçilebilir (örneğin, izin verilenler listesine eklenecek belirli başlıkları seçmek için).
TYPE_NULL "hidden" Gizli kısıtlama türü. Bu türü, ve kullanıcıya sunulmamalıdır; kullanıcı arayüzünde gösterilir. Tek bir dize değerini depolar.
TYPE_BUNDLE_ARRAY "bundle_array" Kısıtlama dizilerini depolamak için bunu kullanın bundles Android 6.0 (API düzeyi 23) sürümlerinde kullanılabilir.

Not: android:entryValues makine tarafından okunabilir ve yerelleştiriliyor. Yerelleştirilebilecek, okunabilir değerler sunmak için android:entries kullanın. Her girişin, android:entryValues içinde karşılık gelen bir dizini olmalıdır.

Yönetilen yapılandırmaları kontrol etme

Uygulamanız, diğer uygulamalar tarafından değiştirildiğinde otomatik olarak bilgilendirilmiyor yapılandırma ayarlarınızı kontrol edin. Bunun yerine, yönetilen ağlardaki yönetilen başladığı veya devam ettirildiği ve bir sonraki adımda bir çalışırken yapılandırmaların değişip değişmediğini öğrenmek için görebilirsiniz.

Uygulamanız, mevcut yapılandırma ayarlarını öğrenmek için RestrictionsManager nesne algılandı. Uygulamanız yönetilen mevcut yapılandırmaları şu zamanlarda kontrol edebilirsiniz:

Bir RestrictionsManager nesnesini almak için geçerli nesneyi al getActivity() etkinliği, ardından o etkinliğin Activity.getSystemService() yöntemini çağırın:

Kotlin

var myRestrictionsMgr =
        activity?.getSystemService(Context.RESTRICTIONS_SERVICE) as RestrictionsManager

Java

RestrictionsManager myRestrictionsMgr =
    (RestrictionsManager) getActivity()
        .getSystemService(Context.RESTRICTIONS_SERVICE);

RestrictionsManager edindikten sonra şunları alabilirsiniz: öğesini çağırarak mevcut yapılandırma getApplicationRestrictions() yöntemi:

Kotlin

var appRestrictions: Bundle = myRestrictionsMgr.applicationRestrictions

Java

Bundle appRestrictions = myRestrictionsMgr.getApplicationRestrictions();

Not: Size kolaylık sağlaması için, geçerli UserManager içeren yapılandırmalar için UserManager.getApplicationRestrictions(). Bu yöntem tam olarak RestrictionsManager.getApplicationRestrictions() ile aynı.

getApplicationRestrictions() yöntemi, veri depolama alanından okuma gerektirir. Bu nedenle, tutumlu bir şekilde yapılmalıdır. Her ihtiyacınız olduğunda bu yöntemi çağırmayın nasıl kullanacağımızı konuştuk. Bunun yerine, uygulamanız başlatır veya devam ettirir ve getirilen yönetilen yapılandırmalar paketini önbelleğe alır. Sonra dinleyin ACTION_APPLICATION_RESTRICTIONS_CHANGED amacının yapılandırmanın uygulamanız etkin durumdayken de Yönetilen Yapılandırma Değişikliklerini Dinleyin.

Yönetilen yapılandırmaları okuma ve uygulama

getApplicationRestrictions() yöntemi, Bundle değeri döndürür. içeren bir anahtar/değer çifti içerir. İlgili içeriği oluşturmak için kullanılan değerlerin tümü Boolean, int, String ve String[]. Bu Bundle kullanıyorsanız, için standart Bundle yöntemlerinin kullanıldığı yapılandırma ayarlarını getBoolean() gibi bu veri türlerini veya getString().

Not: Bundle yönetilen yapılandırmalar tarafından açıkça ayarlanan her yapılandırma için bir öğe içerir. yönetilen yapılandırma sağlayıcısıdır. Ancak, her birinin Varsayılan bir yapılandırma dosyası tanımladığınız için pakette değerini kontrol edin.

Uygulamanızın, Google'ın ve Google Haritalar'daki mevcut yönetilen yapılandırma ayarlarını kullanabilirsiniz. Örneğin, uygulamanızda bir tarayıcı üzerinden veri indirip indiremeyeceğini belirten bir yapılandırma yapılandırdıysanız ve yapılandırmanın false, aşağıdaki durumlar dışında veri indirme işlemini devre dışı bırakmanız gerekir: cihaz, aşağıdaki örnek kodda gösterildiği gibi bir kablosuz bağlantıya sahip olmalıdır:

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
}

Birden fazla iç içe yerleştirilmiş kısıtlama uygulamak için şunları okuyun: bundle_array Parcelable nesne koleksiyonu olarak kısıtlama girişi ve Bundle olarak yayınlayın. Bu örnekte, her bir VPN'in yapılandırması veriler ayrıştırılır ve sunucu bağlantı seçeneklerinin bir listesini oluşturmak için kullanılır:

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
}

Yönetilen yapılandırma değişikliklerini dinleme

Bir uygulamanın yönetilen yapılandırmaları değiştirildiğinde, sistem ACTION_APPLICATION_RESTRICTIONS_CHANGED intent. Uygulamanızın şunları dinlemesi gerekiyor: Böylece, yapılandırma ayarları değiştirildiğinde uygulamanın davranışını unutmayın.

Not: ACTION_APPLICATION_RESTRICTIONS_CHANGED intent yalnızca dinleyicilere gönderilir. bildirilen işleyiciler için değil, dinamik olarak kaydedilmiştir. inceleyebilirsiniz.

Aşağıdaki kod, bir yayın alıcısının nasıl dinamik olarak kaydedileceğini şu amaç güdü:

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);

Not: Genellikle, uygulamanızın bildirim alması gerekmez. hakkında daha fazla bilgi edinin. Bunun yerine kaydınızı iptal etmeniz gerekir. uygulama duraklatıldığında yayın alıcınıza gönderilir. Uygulama devam ettirildiğinde önce mevcut yönetilen yapılandırmaları kontrol edin ( Check Managed Configurations (Yönetilen Yapılandırmaları Kontrol Et) seçeneğini belirleyin ve ardından yapılandırma değişiklikleri hakkında bilgi aldığınızdan emin olmak için yayın alıcınıza Uygulama etkin durumdayken de gerçekleşir.

EMM'lere yönetilen yapılandırma geri bildirimi gönder

Yönetilen yapılandırma değişikliklerini uygulamanıza uyguladıktan sonra, EMM'leri aşağıdaki durumlar için bilgilendirmeniz önerilir: ve değişikliğin durumunu gösterir. Android, kullanabileceğiniz anahtarlı uygulama durumları adlı bir özelliği destekler. uygulamanız, yönetilen yapılandırma değişikliklerini her uygulamaya çalıştığında geri bildirim göndermek için kullanın. Bu geri bildirimler, uygulamanızın yönetilen yapılandırmaları başarıyla ayarladığını veya Uygulamanız belirtilen değişiklikleri uygulayamazsa bir hata mesajı ekleyin.

EMM sağlayıcıları bu geri bildirimi alıp BT konsollarında gösterebilir. yönetici tarafından görüntülenebilir. Daha fazla bilgi için EMM'lere uygulama geri bildirimi gönderme bölümüne bakın konu hakkında bilgi edinin.

Ek kod örnekleri

ManagedConfigurations örnek, bu sayfada ele alınan API'lerin kullanımını daha ayrıntılı bir şekilde gösterir.