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ızRestrictionsManager
'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
.
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:
- Uygulama başlatıldığında veya devam ettirildiğinde
onResume()
yöntem - Uygulamaya bir yapılandırma değişikliği bildirildiğinde (bkz.: Yönetilen Yapılandırmayı Dinle Değişiklikler
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.