การนำส่งแบบมีเงื่อนไขช่วยให้คุณตั้งค่าข้อกำหนดในการกำหนดค่าอุปกรณ์บางอย่างได้ เพื่อให้ระบบดาวน์โหลดโมดูลฟีเจอร์โดยอัตโนมัติระหว่างการติดตั้งแอป ตัวอย่างเช่น คุณสามารถกำหนดค่าโมดูลฟีเจอร์ที่มี ฟังก์ชันสำหรับ Augmented Reality (AR) พร้อมใช้งานเมื่อติดตั้งแอปสำหรับ เฉพาะอุปกรณ์ที่รองรับ AR
ปัจจุบันกลไกการส่งนี้สนับสนุนการควบคุมการดาวน์โหลด โมดูล ณ เวลาที่ติดตั้งแอปตามการกำหนดค่าอุปกรณ์ต่อไปนี้
- ฟีเจอร์สำหรับฮาร์ดแวร์และซอฟต์แวร์ของอุปกรณ์ รวมถึง OpenGL ES เวอร์ชัน
- ประเทศของผู้ใช้
- ระดับ API
หากอุปกรณ์ไม่เป็นไปตามข้อกำหนดทั้งหมดที่คุณระบุ โมดูลจะไม่ ดาวน์โหลด ณ เวลาที่ติดตั้งแอป อย่างไรก็ตาม แอปของคุณอาจขอ ดาวน์โหลดโมดูลตามคำขอโดยใช้ Play Core SDK
ก่อนเริ่มต้นใช้งาน โปรดตรวจสอบว่าคุณใช้ Android Studio 3.5 ขึ้นไป ส่วนต่อไปนี้จะแสดงวิธีเพิ่มการสนับสนุนสำหรับ การส่งแบบมีเงื่อนไขไปยัง โมดูลฟีเจอร์
เพิ่มโมดูลใหม่พร้อมตัวเลือกการแสดงโฆษณาแบบมีเงื่อนไข
วิธีที่ง่ายที่สุดในการสร้างโมดูลฟีเจอร์ใหม่ที่มีการนำส่งตามเงื่อนไข คือผ่านทางวิซาร์ด โมดูลใหม่ ดังนี้
- หากต้องการเปิดกล่องโต้ตอบโมดูลใหม่ ให้เลือกไฟล์ > ใหม่ > โมดูลใหม่จาก แถบเมนู
- ในกล่องโต้ตอบ "โมดูลใหม่" ให้เลือก โมดูลฟีเจอร์แบบไดนามิก แล้วคลิก ถัดไป
- กำหนดค่าโมดูลตามปกติและคลิกถัดไป
ในส่วนตัวเลือกการดาวน์โหลดโมดูล ให้กรอกข้อมูลต่อไปนี้
ระบุชื่อโมดูลโดยใช้อักขระได้สูงสุด 50 ตัว แพลตฟอร์ม ใช้ชื่อนี้เพื่อระบุโมดูลให้ผู้ใช้ได้ เช่น ในกรณีที่ เพื่อยืนยันว่าผู้ใช้ต้องการดาวน์โหลดโมดูลหรือไม่ สำหรับกรณีนี้ โมดูลฐานของแอปคุณต้องมีชื่อโมดูลเป็น สตริงทรัพยากร ซึ่งคุณ แปลได้ เมื่อสร้างโมดูลโดยใช้ Android Studio, IDE เพิ่มทรัพยากรสตริงลงในโมดูลฐานให้คุณ และแทรกพารามิเตอร์ รายการต่อไปนี้ในไฟล์ Manifest ของโมดูลฟีเจอร์
<dist:module ... dist:title="@string/feature_title"> </dist:module>
ในเมนูแบบเลื่อนลงภายใต้การรวมเวลาติดตั้ง ให้เลือกเท่านั้น รวมโมดูลเมื่อติดตั้งแอปสำหรับอุปกรณ์ที่มีฟีเจอร์ตามที่ระบุ ซึ่ง สร้างโมดูลที่รวมอยู่กับแอปของคุณในเวลาติดตั้งแอปในวันที่ อุปกรณ์ที่มีการกำหนดค่าบางอย่างที่คุณระบุได้ เช่น อุปกรณ์ ฟีเจอร์หรือประเทศ 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>
หากต้องการจำกัดการดาวน์โหลดโมดูลโดยอัตโนมัติสำหรับบางประเทศ หรือ ระดับ API ขั้นต่ำ ให้คลิกเสร็จสิ้นเพื่อสร้างโมดูลให้เสร็จ จากนั้น อ่านหัวข้อเกี่ยวกับวิธี ระบุเงื่อนไขตามประเทศ หรือ ระดับ API ขั้นต่ำ หรือคลิก + ฟีเจอร์ของอุปกรณ์ เพื่อเพิ่มฟีเจอร์ที่อุปกรณ์ จำเป็นต้องดาวน์โหลดโมดูล ณ เวลาติดตั้ง
ข้าง device-feature ให้เลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้จาก เมนูแบบเลื่อนลงและระบุค่าของ
- ชื่อ: อนุญาตให้คุณระบุฮาร์ดแวร์หรือซอฟต์แวร์
ที่อุปกรณ์ต้องใช้เพื่อดาวน์โหลดโมดูล
เวลาติดตั้ง ฟีเจอร์ที่การนำส่งอย่างมีเงื่อนไขรองรับมีดังนี้
เหมือนกับที่ระบุเป็นค่าคงที่
FEATURE_*
โดยPackageManager
หากคุณเลือกตัวเลือกนี้ ให้เริ่มพิมพ์ส่วนใดก็ได้ของค่าคงที่ของ ของฟีเจอร์ เช่น "บลูทูธ" ในช่องข้างเมนูแบบเลื่อนลง และ เลือกคำแนะนำที่ปรากฏ - เวอร์ชัน OpenGL ES: ช่วยให้คุณระบุเวอร์ชันของ OpenGL ES ที่ อุปกรณ์ต้องใช้เพื่อดาวน์โหลดโมดูล ณ เวลาติดตั้ง หากคุณ เลือกตัวเลือกนี้ แล้วเริ่มพิมพ์เวอร์ชัน เช่น "0x00030001" ใน ช่องถัดจากเมนูแบบเลื่อนลง แล้วเลือกคำแนะนำข้อใดข้อหนึ่งที่ ปรากฏขึ้น
- ชื่อ: อนุญาตให้คุณระบุฮาร์ดแวร์หรือซอฟต์แวร์
ที่อุปกรณ์ต้องใช้เพื่อดาวน์โหลดโมดูล
เวลาติดตั้ง ฟีเจอร์ที่การนำส่งอย่างมีเงื่อนไขรองรับมีดังนี้
เหมือนกับที่ระบุเป็นค่าคงที่
หากต้องการเพิ่มเงื่อนไขหลายรายการตามฟีเจอร์ที่พร้อมใช้งานในอุปกรณ์ คลิก + ฟีเจอร์ของอุปกรณ์ สำหรับเงื่อนไขของฟีเจอร์ในอุปกรณ์แต่ละรายการที่คุณต้องการ ระบุ
เลือกช่อง Fusing หากต้องการให้โมดูลนี้พร้อมใช้งาน สำหรับอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 20) และต่ำกว่า และรวมอยู่ใน APK หลายรายการ ซึ่งหมายความว่าคุณเปิดใช้ลักษณะการทำงานแบบออนดีมานด์สำหรับโมดูลนี้ได้ และปิดใช้การฟิวชันเพื่อยกเว้นการฟิวชันจากอุปกรณ์ที่ไม่รองรับ การดาวน์โหลดและติดตั้ง APK แยกส่วน Android Studio จะแทรก ต่อไปนี้ในไฟล์ Manifest ของโมดูลเพื่อให้สอดคล้องกับตัวเลือกของคุณ
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
เมื่อกำหนดค่าตัวเลือกการดาวน์โหลดโมดูลเรียบร้อยแล้ว ให้คลิกเสร็จสิ้น
โปรดทราบว่าปลั๊กอิน 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>