기업용 앱을 개발하는 경우 조직의 정책에 따라 설정된 특정 요구사항을 충족할 수 있습니다. 관리 구성(이전 명칭: 애플리케이션 제한사항)은 조직의 IT 관리자가 원격으로 설정을 지정하도록 허용 있습니다. 이 기능은 조직에서 승인한 서비스, 직장 프로필에 배포된 앱
예를 들어 조직은 승인된 앱이 IT 관리자가 수행할 작업:
- 웹브라우저의 URL 허용 또는 차단하기
- 앱이 모바일 데이터를 통해 콘텐츠를 동기화할 수 있는지 구성 Wi-Fi 이용
- 앱의 이메일 설정 구성
이 가이드에서는 다음에서 관리 구성 설정을 구현하는 방법을 보여줍니다. 있습니다. 관리 구성이 있는 샘플 앱을 보려면 ManagedConfigurations를 참고하세요. 엔터프라이즈 모바일 관리 (EMM) 개발자인 경우 Android Management API 가이드를 참고하세요.
참고: 기록상의 이유로 이러한 구성 설정은
제한하며 이를 사용하는 파일과 클래스로 구현됩니다.
검색어 (예: RestrictionsManager
) 그러나 이러한
실제로 다양한 구성 옵션을 구현할 수 있습니다.
제한 사항이 아닙니다.
원격 구성 개요
앱은 원격으로 설정 가능한 관리 구성 옵션을 정의함 IT 관리자가 설정합니다. 이는 2개 이상일 수 있는 임의 설정이며 변경할 수 없습니다. 앱이 직장 프로필에서 실행되는 경우 IT 관리자가 앱의 관리 구성을 변경할 수 있습니다.
관리 구성 제공자는 동일한 기기에서 실행되는 다른 앱입니다. 이 앱은 일반적으로 IT 관리자가 제어합니다. 이 IT 관리자가 구성 변경사항을 구성 제공업체 앱을 선택합니다. 그러면 앱이 앱의 구성을 변경합니다.
외부 관리 구성을 제공하려면 다음 단계를 따르세요.
- 앱 매니페스트에서 관리 구성을 선언합니다. 행동 IT 관리자가 앱의 Google Play API를 통해 구성을 변경할 수 있습니다.
- 앱이 다시 시작될 때마다
RestrictionsManager
객체를 사용하여 현재 앱의 UI와 동작을 변경하여 이러한 구성을 준수해야 합니다 - 듣기:
ACTION_APPLICATION_RESTRICTIONS_CHANGED
인텐트를 처리하세요. 이 알림을 받으면RestrictionsManager
를 확인하여 현재 관리 구성을 확인하고 필요한 경우 앱의 동작을 볼 수 있습니다.
관리 구성 정의
앱은 정의하고자 하는 모든 관리 구성을 지원할 수 있습니다. 사용자는 관리 구성 파일에 앱의 관리 구성을 저장하고 매니페스트의 구성 파일에 있습니다. 구성 파일을 만들면 를 사용하여 앱이 제공하는 관리 구성을 검토하세요. EMM 파트너 Google Play API를 사용하여 앱의 구성을 읽을 수 있습니다.
앱의 원격 구성 옵션을 정의하려면 다음 요소를 추가합니다.
매니페스트의
<ph type="x-smartling-placeholder"></ph>
<application>
요소:
<meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions" />
앱의 app_restrictions.xml
파일에
res/xml
디렉터리 해당 파일의 구조는
RestrictionsManager
의 참조입니다. 파일에는
단일 최상위 <restrictions>
요소. 이 요소는
모든 구성당 하나의 <restriction>
하위 요소
옵션을 선택합니다.
참고: 관리 구성 파일에 액세스할 수 있습니다 이 앱에는 단일 관리 구성 파일이므로, 구성은 모든 언어로 앱에 일관된 환경을 제공합니다.
엔터프라이즈 환경에서 EMM은 일반적으로 관리 IT팀을 위한 원격 콘솔을 생성하는 구성 스키마 액세스할 수 있어야 합니다. 애플리케이션입니다.
관리 구성 공급자가 앱을 쿼리하여 세부정보를 찾을 수 있음 앱의 사용 가능한 구성(설명 포함) 있습니다. 구성 제공업체 및 IT 관리자가 앱의 관리 구성을 언제든지 중지할 수 있습니다.
예를 들어, 앱이 특정 정책에서 사용자를 허용하거나 금지하도록
모바일 데이터 연결을 통해 데이터를 다운로드할 수 있습니다. 여러분의 앱에는
<restriction>
요소가 다음과 같이 표시됩니다.
<?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>
각 구성의 android:key
속성을 사용하여 다음을 수행합니다.
해당 값을 읽을 수 있습니다 따라서
각 구성에는 고유한 키 문자열이 있어야 하며
없습니다. 문자열 리터럴로 지정해야 합니다.
참고: 프로덕션 앱에서는 android:title
및
android:description
는 현지화된 리소스에서 가져와야 합니다.
를 참조하세요.
리소스를 사용한 현지화.
앱은 bundle_array
내의 번들을 사용하여 제한을 정의합니다.
예를 들어 VPN 연결 옵션이 여러 개인 앱은 각 VPN 서버를 정의할 수 있습니다.
여러 개의 컨테이너가 있는 bundle
의
번들 배열로 그룹화된 번들:
<?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
요소에 지원되는 유형
표 1에 나와 있으며
RestrictionsManager
에 대한 참조 및
RestrictionEntry
입니다.
유형 | android:restrictionType | 일반적인 용도 |
---|---|---|
TYPE_BOOLEAN
|
"bool" |
불리언 값(true 또는 false)입니다. |
TYPE_STRING
|
"string" |
문자열 값(예: 이름) |
TYPE_INTEGER
|
"integer" |
다음 값 중 하나를 갖는 정수입니다.
MIN_VALUE 부터
MAX_VALUE 입니다.
|
TYPE_CHOICE
|
"choice" |
android:entryValues 에서 선택된 문자열 값
일반적으로 단일 선택 목록으로 표시됩니다.
|
TYPE_MULTI_SELECT
|
"multi-select" |
android:entryValues 에서 선택된 값이 있는 문자열 배열.
두 개 이상의 선택 항목이 표시되는 다중 선택 목록을 표시할 때 사용합니다.
항목을 선택할 수 있습니다(예: 허용 목록에 추가할 특정 타이틀을 선택하는 경우).
|
TYPE_NULL
|
"hidden" |
숨겨진 제한 유형입니다. 이 유형을 사용하여 전달되어야 하지만 설정할 수 있습니다. 단일 문자열 값을 저장합니다. |
TYPE_BUNDLE_ARRAY
|
"bundle_array" |
제한 배열을 저장하는 데 사용
bundles Android 6.0 (API 수준 23)에서 사용할 수 있습니다.
|
참고: android:entryValues
는 컴퓨터에서 읽을 수 있으며 읽을 수 없습니다.
현지화되었습니다. android:entries
를 사용하여 현지화할 수 있는 사람이 읽을 수 있는 값을 표시합니다.
각 항목에는 android:entryValues
에 상응하는 색인이 있어야 합니다.
관리 구성 확인
다른 앱에서 구성 설정을 구성합니다. 대신 포드의 관리형 서비스가 구성은 앱이 시작되거나 재개될 때이며 시스템 인텐트를 사용하여 애플리케이션이 실행되는 동안 구성이 변경되는지 확인할 수 있습니다
현재 구성 설정을 확인하기 위해 앱에서는
RestrictionsManager
객체. 앱은 다음과 같아야 합니다.
다음과 같은 시점에 현재 관리 구성을 확인합니다.
- 앱이 시작되거나 다시 시작될 때
메서드
onResume()
개 - 다음에 설명된 대로 앱이 구성 변경 알림을 받을 때 관리 구성 수신 대기 변경사항
RestrictionsManager
객체를 가져오려면 현재
getActivity()
활동 후
해당 활동의 Activity.getSystemService()
메서드를 호출합니다.
Kotlin
var myRestrictionsMgr = activity?.getSystemService(Context.RESTRICTIONS_SERVICE) as RestrictionsManager
자바
RestrictionsManager myRestrictionsMgr = (RestrictionsManager) getActivity() .getSystemService(Context.RESTRICTIONS_SERVICE);
RestrictionsManager
가 있으면 다음을 얻을 수 있습니다.
현재 구성 설정을
getApplicationRestrictions()
메서드:
Kotlin
var appRestrictions: Bundle = myRestrictionsMgr.applicationRestrictions
자바
Bundle appRestrictions = myRestrictionsMgr.getApplicationRestrictions();
참고: 편의를 위해 현재 클러스터의 상태를
다음을 호출하여 UserManager
로 구성을 생성할 수 있습니다.
UserManager.getApplicationRestrictions()
입니다. 이 메서드는
RestrictionsManager.getApplicationRestrictions()
와 동일합니다.
getApplicationRestrictions()
메서드는 데이터 저장소에서 읽기가 필요하므로
가급적 사용하지 마세요. 필요할 때마다 이 메서드를 호출하지 마세요.
현재 구성을 알아야 합니다 대신 앱이 포드를 실행하려고 할 때
시작 또는 재개하고, 가져온 관리 구성 번들을 캐시합니다. 그런 다음 들어요
ACTION_APPLICATION_RESTRICTIONS_CHANGED
인텐트에 따라
앱 상태를 변경할 수 있습니다(자세한 내용은 아래 페이지 참조).
관리 구성 변경사항 수신 대기
관리 구성 읽기 및 적용
getApplicationRestrictions()
메서드는 Bundle
를 반환합니다.
키-값 쌍이 포함되어 있습니다. 이
값은 모두 Boolean
, int
,
String
, String[]
kubectl 명령어를
관리 구성 Bundle
을(를) 보려면 현재
표준 Bundle
메서드로 구성 설정
해당 데이터 유형(예: getBoolean()
)
또는
getString()
입니다.
참고: 관리 구성 Bundle
는
에는 게시자가 명시적으로 설정한 모든 구성에
관리 구성 제공업체를 선택할 수 있습니다 그러나 단일 VM이 운영되고 있다고 가정할 수는 없습니다.
기본 포드를 정의했기 때문에 구성이 번들에 표시됩니다
값을 찾을 수 있습니다.
현재 상황에 따라 적절한 조치를 취하는 것은 개발자의 몫입니다.
관리 구성 설정에 액세스할 수 있습니다 예를 들어 앱에
특정 서버를 통해 데이터를 다운로드할 수 있는지 여부를
셀룰러 연결이 있고 구성이 다음으로 설정되어 있음을
false
, 다음과 같은 경우 이외의 경우에는 데이터 다운로드를 중지해야 합니다.
다음 코드 예와 같이 기기가 Wi-Fi에 연결되어 있어야 합니다.
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 }
자바
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 }
중첩된 제한사항을 여러 개 적용하려면 다음을 참고하세요.
bundle_array
Parcelable
객체의 컬렉션으로서의 제한 항목
Bundle
로 전송합니다. 이 예에서 각 VPN의 구성은
데이터가 파싱되어 서버 연결 선택의 목록을 작성하는 데 사용됩니다.
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 }
자바
// 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 }
관리형 구성 변경사항 수신 대기
앱의 관리 구성이 변경될 때마다 시스템은
ACTION_APPLICATION_RESTRICTIONS_CHANGED
인텐트를 처리하세요. 여러분의 앱은
이 인텐트를 사용하여 구성 설정이 변경될 때 앱의 동작을 변경할 수 있습니다.
있습니다.
참고: ACTION_APPLICATION_RESTRICTIONS_CHANGED
인텐트는 리스너로만 전송됩니다.
(선언된 리스너에는 대지 않고 동적으로 등록됨)
선언됩니다.
다음 코드는 broadcast receiver를 동적으로 등록하는 방법을 보여줍니다. 이 인텐트의 예입니다.
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)
자바
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);
참고: 일반적으로 앱에 알림을 보내지 않아도 됩니다. 구성 변경에 대한 정보를 알려줍니다 대신 broadcast receiver를 호출할 수 있습니다. 앱이 다시 시작되면 먼저 현재 관리 구성을 확인합니다 (자세한 내용은 관리 구성을 확인한 후 등록합니다. broadcast receiver를 변경하여 구성 변경에 대한 알림을 받도록 합니다. 발생하는 상황입니다.
EMM에 관리 구성 의견 보내기
앱에 관리 구성 변경사항을 적용한 후에는 EMM에 변경할 수 있습니다 Android는 키로 연결된 앱 상태라는 기능을 지원합니다. 이 기능은 앱이 관리 구성 변경사항을 적용하려고 할 때마다 의견을 보내는 데 사용합니다. 이 피드백이 앱이 관리 구성을 성공적으로 설정했는지 확인하는 역할을 하거나 앱이 지정된 변경사항을 적용하지 못하면 오류 메시지가 포함됩니다.
EMM 제공업체는 이 의견을 검색하여 IT 부서의 콘솔에 표시할 수 있습니다. 관리자에게 표시됩니다. 자세한 내용은 EMM에 앱에 관한 의견 보내기를 참고하세요. 이 주제에 관한 정보(앱에 의견 지원을 추가하는 방법에 관한 자세한 가이드 포함)
추가 코드 샘플
ManagedConfigurations 샘플은 이 페이지에 설명된 API를 사용하는 방법을 자세히 보여줍니다.