ตั้งค่าการกำหนดค่าที่มีการจัดการ

หากกำลังพัฒนาแอปสำหรับตลาดองค์กร คุณอาจต้องปฏิบัติตามข้อกำหนดเฉพาะที่กำหนดโดยนโยบายขององค์กร การกำหนดค่าที่มีการจัดการซึ่งก่อนหน้านี้เรียกว่าข้อจำกัดของแอปพลิเคชัน จะช่วยให้ผู้ดูแลระบบไอทีขององค์กรระบุการตั้งค่าสำหรับแอปจากระยะไกลได้ ความสามารถนี้มีประโยชน์อย่างยิ่งสำหรับแอปที่องค์กรอนุมัติซึ่งติดตั้งใช้งานในโปรไฟล์งาน

ตัวอย่างเช่น องค์กรอาจกำหนดให้แอปที่ได้รับอนุมัติต้องอนุญาตให้ผู้ดูแลระบบไอทีดำเนินการต่อไปนี้ได้

  • อนุญาตหรือบล็อก URL สําหรับเว็บเบราว์เซอร์
  • กำหนดค่าว่าจะอนุญาตให้แอปซิงค์เนื้อหาผ่านเครือข่ายมือถือหรือแค่ผ่าน Wi-Fi เท่านั้น
  • กำหนดการตั้งค่าอีเมลของแอป

คู่มือนี้จะแสดงวิธีใช้การตั้งค่าการกำหนดค่าที่มีการจัดการในแอป หากต้องการดูตัวอย่างแอปที่มีการกำหนดค่าที่มีการจัดการ โปรดดูที่ ManagedConfigurations หากคุณเป็นนักพัฒนาแอป Enterprise Mobility Management (EMM) โปรดดูคู่มือ Android Management API

หมายเหตุ: การตั้งค่าการกําหนดค่าเหล่านี้เรียกว่าข้อจํากัดเนื่องจากเหตุผลทางประวัติศาสตร์ และนําไปใช้กับไฟล์และคลาสที่ใช้คํานี้ (เช่น RestrictionsManager) อย่างไรก็ตาม ข้อจํากัดเหล่านี้สามารถนําไปใช้กับตัวเลือกการกําหนดค่าที่หลากหลายได้ ไม่ใช่แค่ข้อจํากัดฟังก์ชันการทํางานของแอป

ภาพรวมการกำหนดค่าระยะไกล

แอปจะกำหนดตัวเลือกการกำหนดค่าที่มีการจัดการที่ผู้ดูแลระบบไอทีสามารถตั้งค่าจากระยะไกลได้ การตั้งค่าเหล่านี้เป็นการตั้งค่าที่กำหนดเองซึ่งผู้ให้บริการการกำหนดค่าที่มีการจัดการจะเปลี่ยนแปลงได้ หากแอปทำงานในโปรไฟล์งาน ผู้ดูแลระบบไอทีจะเปลี่ยนการกำหนดค่าที่มีการจัดการของแอปได้

ผู้ให้บริการการกำหนดค่าที่มีการจัดการคือแอปอื่นที่ทำงานในอุปกรณ์เดียวกัน โดยปกติแล้วผู้ดูแลระบบไอทีจะเป็นผู้ควบคุมแอปนี้ ผู้ดูแลระบบไอทีจะสื่อสารการเปลี่ยนแปลงการกำหนดค่าไปยังแอปผู้ให้บริการการกำหนดค่าที่มีการจัดการ จากนั้นแอปดังกล่าวจะเปลี่ยนการกำหนดค่าในแอปของคุณ

วิธีระบุการกำหนดค่าที่มีการจัดการจากภายนอก

  • ประกาศการกำหนดค่าที่มีการจัดการในไฟล์ Manifest ของแอป ซึ่งจะช่วยให้ผู้ดูแลระบบไอทีอ่านการกำหนดค่าของแอปผ่าน Google Play API ได้
  • เมื่อใดก็ตามที่แอปกลับมาทำงานอีกครั้ง ให้ใช้ออบเจ็กต์ RestrictionsManager เพื่อตรวจสอบการกำหนดค่าที่มีการจัดการในปัจจุบัน และเปลี่ยน UI และลักษณะการทํางานของแอปให้เป็นไปตามการกําหนดค่าเหล่านั้น
  • ฟัง Intent ของ ACTION_APPLICATION_RESTRICTIONS_CHANGED เมื่อได้รับข้อความนี้ ให้ตรวจสอบ RestrictionsManager เพื่อดูการกำหนดค่าที่มีการจัดการปัจจุบัน และทําการเปลี่ยนแปลงที่จําเป็นต่อลักษณะการทํางานของแอป

กำหนดการกำหนดค่าที่มีการจัดการ

แอปของคุณรองรับการกำหนดค่าที่มีการจัดการที่คุณต้องการกำหนด คุณต้องประกาศการกำหนดค่าที่มีการจัดการของแอปในไฟล์การกำหนดค่าที่มีการจัดการ และประกาศไฟล์การกำหนดค่าในไฟล์ Manifest การสร้างไฟล์การกําหนดค่าช่วยให้แอปอื่นๆ ตรวจสอบการกําหนดค่าที่มีการจัดการที่แอปของคุณระบุได้ พาร์ทเนอร์ EMM จะอ่านการกำหนดค่าของแอปได้โดยใช้ Google Play API

หากต้องการกำหนดตัวเลือกการกำหนดค่าระยะไกลของแอป ให้ใส่องค์ประกอบต่อไปนี้ในองค์ประกอบ <application> ของไฟล์ Manifest

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

สร้างไฟล์ชื่อ app_restrictions.xml ในไดเรกทอรี res/xml ของแอป โครงสร้างของไฟล์ดังกล่าวอธิบายไว้ในข้อมูลอ้างอิงสำหรับ RestrictionsManager ไฟล์มีองค์ประกอบ <restrictions> ระดับบนสุดรายการเดียว ซึ่งมีองค์ประกอบย่อย <restriction> รายการเดียวสําหรับตัวเลือกการกําหนดค่าทั้งหมดที่แอปมี

หมายเหตุ: อย่าสร้างไฟล์การกําหนดค่าที่มีการจัดการเวอร์ชันแปล แอปของคุณมีได้เพียงไฟล์การกำหนดค่าที่มีการจัดการไฟล์เดียวเท่านั้น เพื่อให้การกำหนดค่าสอดคล้องกันสำหรับแอปของคุณในทุกภาษา

ในสภาพแวดล้อมขององค์กร EMM มักจะใช้สคีมาการกําหนดค่าที่มีการจัดการเพื่อสร้างคอนโซลระยะไกลสําหรับผู้ดูแลระบบไอที เพื่อให้ผู้ดูแลระบบกําหนดค่าแอปพลิเคชันจากระยะไกลได้

ผู้ให้บริการการกำหนดค่าที่มีการจัดการสามารถค้นหาแอปเพื่อดูรายละเอียดเกี่ยวกับการกำหนดค่าที่ใช้ได้ของแอป รวมถึงข้อความคำอธิบาย ผู้ให้บริการการกำหนดค่าและผู้ดูแลระบบไอทีสามารถเปลี่ยนการกำหนดค่าที่มีการจัดการของแอปได้ทุกเมื่อ แม้ว่าแอปจะไม่ทํางานอยู่ก็ตาม

ตัวอย่างเช่น สมมติว่าแอปของคุณกำหนดค่าจากระยะไกลให้อนุญาตหรือห้ามไม่ให้ดาวน์โหลดข้อมูลผ่านการเชื่อมต่อมือถือได้ แอปของคุณอาจมีองค์ประกอบ <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

ตารางที่ 1 ประเภทและการใช้งานรายการข้อจำกัด

ประเภท android:restrictionType การใช้งานทั่วไป
TYPE_BOOLEAN "bool" ค่าบูลีน ได้แก่ จริงหรือเท็จ
TYPE_STRING "string" ค่าสตริง เช่น ชื่อ
TYPE_INTEGER "integer" จํานวนเต็มที่มีค่าตั้งแต่ MIN_VALUE ถึง MAX_VALUE
TYPE_CHOICE "choice" ค่าสตริงที่เลือกจาก android:entryValues ซึ่งมักจะแสดงเป็นรายการแบบเลือกรายการเดียว
TYPE_MULTI_SELECT "multi-select" อาร์เรย์สตริงที่มีค่าที่เลือกจาก android:entryValues ใช้เพื่อแสดงรายการแบบเลือกได้หลายรายการที่เลือกรายการได้มากกว่า 1 รายการ เช่น สำหรับเลือกภาพยนตร์/รายการทีวีที่เฉพาะเจาะจงเพื่อเพิ่มลงในรายการที่อนุญาต
TYPE_NULL "hidden" ประเภทข้อจำกัดที่ซ่อนอยู่ ใช้ประเภทนี้กับข้อมูลที่จำเป็นต้องโอน แต่ไม่ควรแสดงต่อผู้ใช้ใน UI จัดเก็บค่าสตริงเดียว
TYPE_BUNDLE_ARRAY "bundle_array" ใช้สำหรับจัดเก็บอาร์เรย์ของข้อจำกัด bundles พร้อมใช้งานใน Android 6.0 (API ระดับ 23)

หมายเหตุ: android:entryValues เป็นรูปแบบที่เครื่องอ่านได้และไม่สามารถแปล ใช้ android:entries เพื่อแสดงค่าที่มนุษย์อ่านได้ซึ่งแปลได้ แต่ละรายการต้องมีดัชนีที่สอดคล้องกันใน android:entryValues

ตรวจสอบการกำหนดค่าที่มีการจัดการ

แอปของคุณจะไม่ได้รับการแจ้งเตือนโดยอัตโนมัติเมื่อแอปอื่นๆ เปลี่ยนการตั้งค่าการกําหนดค่า แต่คุณต้องตรวจสอบการกำหนดค่าที่มีการจัดการเมื่อแอปเริ่มทำงานหรือกลับมาทำงานต่อ และคอยฟังความตั้งใจของระบบเพื่อดูว่าการกำหนดค่ามีการเปลี่ยนแปลงขณะที่แอปทำงานอยู่หรือไม่

หากต้องการดูการตั้งค่าการกําหนดค่าปัจจุบัน แอปของคุณจะใช้ออบเจ็กต์ RestrictionsManager แอปของคุณควรตรวจสอบการกำหนดค่าที่มีการจัดการปัจจุบันในเวลาต่อไปนี้

หากต้องการรับออบเจ็กต์ RestrictionsManager ให้รับกิจกรรมปัจจุบันด้วย getActivity() จากนั้นเรียกใช้เมธอด Activity.getSystemService() ของกิจกรรมนั้น

Kotlin

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

Java

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

เมื่อคุณมี RestrictionsManager แล้ว คุณสามารถรับการตั้งค่าการกําหนดค่าปัจจุบันได้โดยเรียกใช้เมธอด getApplicationRestrictions() ดังนี้

Kotlin

var appRestrictions: Bundle = myRestrictionsMgr.applicationRestrictions

Java

Bundle appRestrictions = myRestrictionsMgr.getApplicationRestrictions();

หมายเหตุ: คุณยังเรียกข้อมูลการกําหนดค่าปัจจุบันด้วย UserManager ได้ด้วยเพื่อความสะดวก โดยเรียกใช้ UserManager.getApplicationRestrictions() วิธีนี้ทํางานเหมือนกับ RestrictionsManager.getApplicationRestrictions() ทุกประการ

วิธี getApplicationRestrictions() ต้องมีการอ่านจากพื้นที่เก็บข้อมูล จึงควรใช้อย่างประหยัด อย่าเรียกใช้เมธอดนี้ทุกครั้งที่ต้องการทราบการกําหนดค่าปัจจุบัน แต่คุณควรเรียกใช้เพียงครั้งเดียวเมื่อแอปเริ่มทำงานหรือกลับมาทำงานต่อ และแคช Bundle การกำหนดค่าที่มีการจัดการที่ดึงข้อมูลมา จากนั้นฟัง Intent ACTION_APPLICATION_RESTRICTIONS_CHANGED เพื่อดูว่าการกำหนดค่ามีการเปลี่ยนแปลงขณะที่แอปทำงานอยู่หรือไม่ ตามที่อธิบายไว้ในฟังการเปลี่ยนแปลงการกำหนดค่าที่มีการจัดการ

การอ่านและใช้การกำหนดค่าที่มีการจัดการ

เมธอด getApplicationRestrictions() จะแสดงผล Bundle ที่มีคู่คีย์-ค่าสําหรับการกําหนดค่าแต่ละรายการที่ตั้งไว้ ค่าทั้งหมดเป็นประเภท Boolean, int, String และ String[] เมื่อคุณมีการกำหนดค่าที่มีการจัดการ Bundle แล้ว คุณสามารถตรวจสอบการตั้งค่าการกำหนดค่าปัจจุบันด้วยเมธอด Bundle มาตรฐานสำหรับประเภทข้อมูลเหล่านั้น เช่น getBoolean() หรือ getString()

หมายเหตุ: การกำหนดค่าที่มีการจัดการ Bundle จะมี 1 รายการสําหรับการกําหนดค่าทุกรายการที่ผู้ให้บริการการกําหนดค่าที่มีการจัดการตั้งค่าไว้อย่างชัดเจน อย่างไรก็ตาม คุณไม่สามารถคาดเดาได้ว่าจะมีการกำหนดค่าอยู่ในแพ็กเกจเพียงเพราะคุณกำหนดค่าเริ่มต้นไว้ในไฟล์ XML ของการกำหนดค่าที่มีการจัดการ

ขึ้นอยู่กับแอปของคุณที่จะดำเนินการตามความเหมาะสมตามการตั้งค่าการกำหนดค่าที่มีการจัดการในปัจจุบัน ตัวอย่างเช่น หากแอปมีการกําหนดค่าที่ระบุว่าสามารถดาวน์โหลดข้อมูลผ่านการเชื่อมต่อมือถือได้หรือไม่ และคุณพบว่ามีการกําหนดค่าเป็น 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
}

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
}

หากต้องการใช้ข้อจํากัดที่ฝังอยู่หลายรายการ ให้อ่านรายการข้อจํากัด 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
}

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
}

ฟังการเปลี่ยนแปลงการกำหนดค่าที่มีการจัดการ

เมื่อใดก็ตามที่มีการเปลี่ยนแปลงการกำหนดค่าที่มีการจัดการของแอป ระบบจะเรียกใช้ Intent ACTION_APPLICATION_RESTRICTIONS_CHANGED แอปของคุณต้องคอยฟัง Intent นี้เพื่อให้คุณเปลี่ยนลักษณะการทํางานของแอปได้เมื่อการตั้งค่าการกําหนดค่าเปลี่ยนแปลง

หมายเหตุ: ระบบจะส่ง Intent ACTION_APPLICATION_RESTRICTIONS_CHANGED ไปยัง Listener ที่ลงทะเบียนแบบไดนามิกเท่านั้น ไม่ใช่ Listener ที่ประกาศไว้ในไฟล์ Manifest ของแอป

โค้ดต่อไปนี้แสดงวิธีลงทะเบียน Broadcast Receiver แบบไดนามิกสําหรับ 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);

หมายเหตุ: โดยปกติแล้ว แอปไม่จำเป็นต้องได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงการกำหนดค่าเมื่อหยุดชั่วคราว แต่คุณควรยกเลิกการลงทะเบียนตัวรับการออกอากาศเมื่อแอปหยุดชั่วคราว เมื่อแอปกลับมาทำงานอีกครั้ง ให้ตรวจสอบการกำหนดค่าที่มีการจัดการปัจจุบันก่อน (ตามที่ได้อธิบายไว้ในตรวจสอบการกำหนดค่าที่มีการจัดการ) จากนั้นลงทะเบียนตัวรับการออกอากาศเพื่อให้แน่ใจว่าคุณจะได้รับแจ้งเกี่ยวกับการเปลี่ยนแปลงการกำหนดค่าที่เกิดขึ้นขณะที่แอปทำงานอยู่

ส่งความคิดเห็นเกี่ยวกับการกำหนดค่าที่มีการจัดการไปยัง EMM

หลังจากใช้การเปลี่ยนแปลงการกำหนดค่าที่มีการจัดการกับแอปแล้ว แนวทางปฏิบัติแนะนำคือการแจ้งสถานะการเปลี่ยนแปลงให้ EMM ทราบ Android รองรับฟีเจอร์ที่เรียกว่าสถานะแอปที่มีคีย์ ซึ่งคุณใช้เพื่อส่งความคิดเห็นได้ทุกครั้งที่แอปพยายามใช้การเปลี่ยนแปลงการกำหนดค่าที่มีการจัดการ ความคิดเห็นนี้อาจใช้เป็นการยืนยันว่าแอปของคุณตั้งค่าการกำหนดค่าที่มีการจัดการสำเร็จ หรืออาจมีข้อความแสดงข้อผิดพลาดหากแอปใช้การเปลี่ยนแปลงที่ระบุไม่สำเร็จ

ผู้ให้บริการ EMM สามารถเรียกข้อมูลความคิดเห็นนี้และแสดงในคอนโซลเพื่อให้ผู้ดูแลระบบไอทีดูได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ที่ส่งความคิดเห็นเกี่ยวกับแอปไปยัง EMM รวมถึงดูคู่มือโดยละเอียดเกี่ยวกับวิธีเพิ่มการรองรับความคิดเห็นในแอป

ตัวอย่างโค้ดเพิ่มเติม

ตัวอย่าง ManagedConfigurations แสดงการใช้งาน API ที่ครอบคลุมในหน้านี้เพิ่มเติม

การเพิ่มแอปในรายการที่อนุญาต/รายการที่บล็อกในโปรไฟล์ส่วนตัว

แอปสโตร์ของบุคคลที่สามอาจแสดงความสนใจในการใช้การกำหนดค่าที่มีการจัดการเพื่อให้มีวิธีที่น่าเชื่อถือในการใช้รายการที่บล็อกหรือรายการที่อนุญาตของแอปกับทั้งโปรไฟล์ส่วนตัวและฟีเจอร์พื้นที่ส่วนตัวสำหรับผู้บริโภค ซึ่งเป็นพื้นที่ส่วนตัวเพิ่มเติมสำหรับผู้ใช้ในการเก็บแอปที่มีความละเอียดอ่อน หากคุณพัฒนาแอปสโตร์สำหรับการใช้งานขององค์กรและต้องการใช้ฟีเจอร์นี้ ให้ส่ง แบบฟอร์มนี้เพื่อแสดงความสนใจและเลือกสนใจในรายการที่อนุญาตของแอปสโตร์ของบุคคลที่สามเป็นเหตุผลในการตอบกลับในแบบฟอร์ม