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

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