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

การนำส่งแบบมีเงื่อนไขช่วยให้คุณกำหนดข้อกำหนดการกำหนดค่าอุปกรณ์บางอย่างเพื่อให้ระบบดาวน์โหลดโมดูลฟีเจอร์โดยอัตโนมัติระหว่างการติดตั้งแอปได้ เช่น คุณสามารถกําหนดค่าโมดูลฟีเจอร์ที่มีฟังก์ชันสําหรับเทคโนโลยีความจริงเสริม (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. เลือกช่องข้างการผสานหากต้องการให้โมดูลนี้พร้อมใช้งานสำหรับอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 20) หรือต่ำกว่า และรวมอยู่ใน APK หลายรายการ ซึ่งหมายความว่าคุณสามารถเปิดใช้ลักษณะการทำงานแบบออนดีมานด์สําหรับข้อบังคับนี้ และปิดใช้การผสานเพื่อยกเว้นข้อบังคับนี้จากอุปกรณ์ที่ไม่รองรับการดาวน์โหลดและการติดตั้ง APK แบบแยก Android Studio จะแทรกข้อมูลต่อไปนี้ในไฟล์ Manifest ของโมดูลเพื่อให้สอดคล้องกับตัวเลือกของคุณ

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

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

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

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

ระบุเงื่อนไขสำหรับพร็อพเพอร์ตี้อุปกรณ์อื่นๆ (เบต้า)

หากต้องการระบุเงื่อนไขสำหรับพร็อพเพอร์ตี้อื่นๆ ของอุปกรณ์ เช่น ชื่อรุ่น, RAM, ฟีเจอร์ของระบบ และระบบบนชิป คุณสามารถใช้ไฟล์การกําหนดค่าการกําหนดเป้าหมายอุปกรณ์

หากต้องการสร้างไฟล์การกําหนดค่าการกําหนดอุปกรณ์เป้าหมาย โปรดดูเอกสารประกอบสําหรับการกําหนดอุปกรณ์เป้าหมาย

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

<dist:conditions>
   <dist:device-groups>
      <dist:device-group dist:name="myCustomGroup1"/>
      <dist:device-group dist:name="myCustomGroup2"/>
   </dist:device-groups>
</dist:conditions>