กำหนดค่าการนำส่งตามเงื่อนไข

การนำส่งแบบมีเงื่อนไขช่วยให้คุณตั้งค่าข้อกำหนดในการกำหนดค่าอุปกรณ์บางอย่างได้ เพื่อให้ระบบดาวน์โหลดโมดูลฟีเจอร์โดยอัตโนมัติระหว่างการติดตั้งแอป ตัวอย่างเช่น คุณสามารถกำหนดค่าโมดูลฟีเจอร์ที่มี ฟังก์ชันสำหรับ Augmented Reality (AR) พร้อมใช้งานเมื่อติดตั้งแอปสำหรับ เฉพาะอุปกรณ์ที่รองรับ AR

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

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

ก่อนเริ่มต้นใช้งาน โปรดตรวจสอบว่าคุณใช้ Android Studio 3.5 ขึ้นไป ส่วนต่อไปนี้จะแสดงวิธีเพิ่มการสนับสนุนสำหรับ การส่งแบบมีเงื่อนไขไปยัง โมดูลฟีเจอร์

เพิ่มโมดูลใหม่พร้อมตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไข

วิธีที่ง่ายที่สุดในการสร้างโมดูลฟีเจอร์ใหม่ที่มีการนำส่งตามเงื่อนไข คือผ่านทางวิซาร์ด โมดูลใหม่ ดังนี้

  1. หากต้องการเปิดกล่องโต้ตอบโมดูลใหม่ ให้เลือกไฟล์ > ใหม่ > โมดูลใหม่จาก แถบเมนู
  2. ในกล่องโต้ตอบ "โมดูลใหม่" ให���เลือก โมดูลฟีเจอร์แบบไดนามิก แล้วคลิก ถัดไป
  3. กำหนดค่าโมดูลตามปกติและคลิกถัดไป
  4. ในส่วนตัวเลือกการดาวน์โหลดโมดูล ให้กรอกข้อมูลต่��ไปนี้

    1. ระบุชื่อโมดูลโดยใช้อักขระได้สูงสุด 50 ตัว แพลตฟอร์ม ใช้ชื่อนี้เพื่อระบุโมดูลให้ผู้ใช้ได้ เช่น ในกรณีที่ เพื่อยืนยันว่าผู้ใช้ต้องการดาวน์โหลดโมดูลหรือไม่ สำหรับกรณีนี้ โมดูลฐานของแอปคุณต้องมีชื่อโมดูลเป็น สตริงทรัพยากร ซึ่งคุณ แปลได้ เมื่อสร้างโมดูลโดยใช้ Android Studio, IDE เพิ่มทรัพยากรสตริงลงในโมดูลฐานให้คุณ และแทรกพารามิเตอร์ รายการต่อไปนี้ในไฟล์ Manifest ของโมดูลฟีเจอร์

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. ในเมนูแบบเลื่อนลงภายใต้การรวมเวลาติดตั้ง ให้เลือกเท่านั้น รวมโมดูลเมื่อติดตั้งแอปสำหรับอุปกรณ์ที่มีฟีเจอร์ตามที่ระบุ ซึ่ง สร้างโมดูลที่รวมอยู่กับแอปของคุณในเวลาติดตั้งแอปในวันที่ อุปกรณ์ที่มีการกำหนดค่าบางอย่างที่คุณระบุได้ เช่น อุปกรณ์ ฟีเจอร์หรือประเทศ Android Studio จะแทรกข้อมูลต่อไปนี้ลงใน ไฟล์ Manifest เพื่อแสดงสิ่งที่คุณเลือก:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. หากต้องการจำกัดการดาวน์โหลดโมดูลโดยอัตโนมัติสำหรับบางประเทศ หรือ ระดับ API ขั้นต่ำ ให้คลิกเสร็จสิ้นเพื่อสร้างโมดูลให้เสร็จ จากนั้น อ่านหัวข้อเกี่ยวกับวิธี ระบุเงื่อนไขตามประเทศ หรือ ระดับ API ขั้นต่ำ หรือคลิก + ฟีเจอร์ของอุปกรณ์ เพื่อเพิ่มฟีเจอร์ที่อุปกรณ์ จำเป็นต้องดาวน์โหลดโมดูล ณ เวลาติดตั้ง

    4. ข้าง device-feature ให้เลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้จาก เมนูแบบเลื่อนลงและระบุค่าของ

      • ชื่อ: อนุญาตให้คุณระบุฮาร์ดแวร์หรือซอฟต์แวร์ ที่อุปกรณ์ต้องใช้เพื่อดาวน์โหลดโมดูล เวลาติดตั้ง ฟีเจอร์ที่การนำส่งอย่างมีเงื่อนไขรองรับมีดังนี้ เหมือนกับที่ระบุเป็นค่าคงที่ FEATURE_* โดย PackageManager หากคุณเลือกตัวเลือกนี้ ให้เริ่มพิมพ์ส่วนใดก็ได้ของค่าคงที่ของ ของฟีเจอร์ เช่น "บลูทูธ" ในช่องข้างเมนูแบบเลื่อนลง และ เลือกคำแนะนำที่ปรากฏ
      • เวอร์ชัน OpenGL ES: ช่วยให้คุณระบุเวอร์ชันของ OpenGL ES ที่ อุปกรณ์ต้องใช้เพื่อดาวน์โหลดโมดูล ณ เวลาติดตั้ง หากคุณ เลือกตัวเลือกนี้ แล้วเริ่มพิมพ์เวอร์ชัน เช่น "0x00030001" ใน ช่องถัดจากเมนูแบบเลื่อนลง แล้วเลือกคำแนะนำข้อใดข้อหนึ่งที่ ปรากฏขึ้น
    5. หากต้องการเพิ่มเงื่อนไขหลายรายการตามฟีเจอร์ที่พร้อมใช้งานในอุปกรณ์ คลิก + ฟีเจอร์ของอุปกรณ์ สำหรับเงื่อนไขของฟีเจอร์ในอุปกรณ์แต่ละรายการที่คุณต้องการ ระบุ

    6. เลือกช่อง Fusing หากต้องการให้โมดูลนี้พร้อมใช้งาน สำหรับอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 20) และต่ำกว่า และรวมอยู่ใน APK หลายรายการ ซึ่งหมายความว่าคุณเปิดใช้ลักษณะการทำงานแบบออนดีมานด์สำหรับโมดูลนี้ได้ และปิดใช้การฟิวชันเพื่อยกเว้นการฟิวชันจากอุปกรณ์ที่ไม่รองรับ การดาวน์โหลดและติดตั้ง APK แยกส่วน Android Studio จะแทรก ต่อไปนี้ในไฟล์ Manifest ของโมดูลเพื่อ���ห้สอดคล้องกับตัวเลือกของคุณ

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. เมื่อกำหนดค่าตัวเลือกการดาวน์โหลดโมดูลเรียบร้อยแล้ว ให้คลิกเสร็จสิ้น

โปรดทราบว่าปลั๊กอิน Android Gradle ไม่รองรับการเรียกใช้ lint จากโมดูลฟีเจอร์แบบไดนามิก กำลังเรียกใช้ Lint จาก โมดูลแอปพลิเคชันที่เกี่ยวข้องจะเรียกใช้ Lint ในโมดูลฟีเจอร์แบบไดนามิก และรวมปัญหาทั้งหมดไว้ในรายงาน Lint ของแอป

เพิ่มตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไขลงในโมดูลฟีเจอร์ที่มีอยู่

คุณสามารถเพิ่มตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไขในฟีเจอร์ที่มีอยู่ได้อย่างง่ายดาย ผ่านไฟล์ Manifest ของโมดูล แต่คุณควรอ่านเกี่ยวกับ ความสามารถในการใช้งานร่วมกันของตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไขกับ ตัวเลือกการแสดงโฆษณาที่คุณอาจเปิดใช้ไว้

ในการเริ่มต้นใช้งาน คุณต้องย้ายข้อมูลไฟล์ Manifest ไปยังไฟล์ Manifest องค์ประกอบ <dist:delivery> ข้อมูลโค้ดด้านล่างแสดงตัวอย่างของ ไวยากรณ์:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

ตัวเลือกการแสดงโฆษณาข้างต้นระบุดังนี้

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

จากนั้นคุณจะรวมตัวเลือกการนำส่งแบบมีเงื่อนไขตามฟีเจอร์ของอุปกรณ์ได้ ดังนี้ ติดตาม

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

ส่วนด้านล่างจะอธิบายตัวเลือกอื่นๆ สำหรับการนำส่งแบบมีเงื่อนไข เช่น ตามประเทศหรือระดับ API ขั้นต่ำ

การใช้งานร่วมกับตัวเลือกการดาวน์โหลดโมดูลอื่นๆ

เนื่องจากโมดูลฟีเจอร์มีตัวเลือกมากมายให้กำหนดค่า ที่ส่งไปยังอุปกรณ์ของผู้ใช้ คุณจึงต้องทำความเข้าใจว่า การตั้งค่าอื่นๆ ��������������������ัวเลือกการแสดงโฆษณาแบบมีเงื่อนไข ตารางต่อไปนี้ สรุปความเข้ากันได้ของการนำส่งตามเงื่อนไขกับการดาวน์โหลดโมดูลอื่นๆ ตัวเลือก

ตัวเลือกการดาวน์โหลดโมดูล ความเข้ากันได้กับการนำส่งตามเงื่อนไข
กำลังรวม (<dist:fusing dist:include="true"/>) หากโมดูลตั้งค่าตัวเลือกนี้เป็น "จริง" Google Play จะไม่ดำเนินการตามตัวเลือกการนำส่งแบบมีเงื่อนไขที่คุณระบุไว้เมื่อทำให้แอปใช้งานได้ในอุปกรณ์ที่ใช้ API ระดับ 19 หรือต่ำกว่า กล่าวคือ โมดูลฟีเจอร์ที่เปิดใช้การรวมจะรวมอยู่ในเวลาติดตั้งเสมอสำหรับอุปกรณ์ที่ใช้ API ระดับ 19 หรือต่ำกว่า
พร้อมใช้งาน Instant (<dist:module dist:instant="true"/>) โมดูลฟีเจอร์ที่เปิดใช้ Instant ไม่รองรับตัวเลือกการส่งตามเงื่อนไข
ออนดีมานด์ (<dist:on-demand/>) โดยค่าเริ่มต้น หากคุณระบุตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไข โมดูลจะพร้อมใช้งานแบบออนดีมานด์ด้วย

ระบุเงื่อนไขตามประเทศ

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

ในบริบทนี้ ประเทศอุปกรณ์มักจะกําหนดโดย ที่อยู่สำหรับการเรียกเก็บเงินที่ลงทะเบียนไว้ในบัญชี Google Play

หากต้องการระบุประเทศสำหรับโมดูล ให้ใส่ข้อมูลต่อไปนี้ในฟีเจอร์ ไฟล์ Manifest ของโมดูล

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

ระบุเงื่อนไขสำหรับระดับ API

การระบุเงื่อนไขตามระดับ API ของอุปกรณ์อาจมีประโยชน์ในกรณีต่อไปนี้ โมดูลฟีเจอร์ขึ้นอยู่กับ API ที่มีให้ใน เวอร์ชันต่างๆ ของแพลตฟอร์ม Android

หากต้องการตั้งเงื่อนไขตามระดับ API ของอุปกรณ์ต่ำสุดหรือสูงสุด ให้ใส่ ในไฟล์ Manifest ของโมดูลฟีเจอร์

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>