รันไทม์ของ SDK จะจำกัดวิธีที่ SDK สามารถเปิดกิจกรรมใหม่ได้ ปัญหานี้ก่อให้เกิดความท้าทายสําหรับรูปแบบโฆษณาแบบเต็มหน้าจอที่มักอาศัยการเริ่มกิจกรรมแยกต่างหากเพื่อการควบคุมและประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น รันไทม์ SDK จึงเปิดตัวกลไกใหม่สําหรับกิจกรรมในแซนด์บ็อกซ์เพื่อแก้ไขปัญหานี้
SDK ที่โหลดภายในสภาพแวดล้อมรันไทม์ของ SDK จะกำหนดแท็ก <activity>
ในไฟล์ Manifest หรือเริ่มกิจกรรมของตนเองโดยตรงไม่ได้
แต่จะมีการเปิดตัวการดำเนินการตาม Intent ใหม่อย่าง START_SANDBOXED_ACTIVITY
แทน
แม้ว่า SDK จะไม่ได้รับอนุญาตให้เปิดใช้งาน Intent ด้วยการดำเนินการนี้ แต่ SDK สามารถขอให้แอปไคลเอ็นต์เริ่ม Intent นี้ได้ จากนั้นระบบจะสร้างกิจกรรมที่กําหนดโดยแพลตฟอร์มและส่งไปยัง SDK กิจกรรมนี้จะทํางานในกระบวนการเดียวกับ SDK
จากนั้น SDK จะใช้กิจกรรมนี้เพื่อติดตั้งใช้งานและจัดการประสบการณ์การใช้งานโฆษณาแบบเต็มหน้าจอ
กิจกรรมที่แพลตฟอร์มให้คือ android.app.Activity
มาตรฐาน ซึ่งเปิดใช้งานเป็นส่วนหนึ่งของงานของแอปไคลเอ็นต์
การสร้างกิจกรรมในรันไทม์ของ SDK
คุณมีวิธีหลัก 2 วิธีในการสร้างกิจกรรม ได้แก่ การใช้ไลบรารีกิจกรรมของ Jetpack ที่มีประสิทธิภาพมากขึ้น หรือโต้ตอบกับ Platform API โดยตรง
เราขอแนะนําให้ใช้คลังกิจกรรม เนื่องจากช่วยให้การสร้างกิจกรรมง่ายขึ้นด้วยการจัดการกับความซับซ้อนที่ซ่อนอยู่
ไลบรารีกิจกรรม
คลังกิจกรรมมีข้อดีหลายประการ ดังนี้
- แสดงรายละเอียดภายในของการลงทะเบียนตัวแฮนเดิลกิจกรรมและการแชร์ตัวระบุของแฮนเดิลกับแอปไคลเอ็นต์
- ช่วยให้นักพัฒนาแอปควบคุมวิธีสร้างกิจกรรมภายในแอปของ SDK ได้มากขึ้นด้วยการอนุญาตให้ตั้งค่าเงื่อนไข (นิพจน์เชิงตรรกะ)
- สร้างวิธีแบบรวมสำหรับ SDK เพื่อกำหนด API ที่เปิดใช้งานกิจกรรม
คลังกิจกรรมมี 3 ประเภท ได้แก่ คลังหลัก คลังไคลเอ็นต์ และคลังผู้ให้บริการ
- ไลบรารี core มีอินเทอร์เฟซที่แอปไคลเอ็นต์และไลบรารีของผู้ให้บริการใช้
- ไลบรารี provider มี API สําหรับ SDK เพื่อเปิดใช้งานกิจกรรม
- ไลบรารีไคลเอ็นต์มี API สําหรับแอปไคลเอ็นต์ในการสร้างตัวเปิดใช้งานกิจกรรม ซึ่ง SDK สามารถใช้เพื่อขอให้แอปเปิดใช้งานกิจกรรม
ไลบรารีเหล่านี้จะแนะนำ API ต่อไปนี้
SdkActivityLauncher
: ตัวเปิดใช้งานกิจกรรมช่วยให้ SDK จัดการการเปิดใช้งานกิจกรรมจากแอปไคลเอ็นต์ได้ แอปไคลเอ็นต์ควรสร้างตัวเปิดใช้งานและส่งเป็นพารามิเตอร์ไปยัง API ของ SDK ที่เริ่มกิจกรรม<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: ฟังก์ชันส่วนขยายที่แอปไคลเอ็นต์เรียกจากกิจกรรมเพื่อสร้างตัวเปิดได้SdkActivityLauncher.launchSdkActivity(IBinder)
: วิธีที่ SDK ใช้เพื่อขอให้แอปเปิดใช้งานกิจกรรม
ขั้นตอนการเปิดใช้งานกิจกรรมด้วยคลังกิจกรรมมีดังนี้
- SDK จะเพิ่มพารามิเตอร์ประเภท
SdkActivityLauncher
ลงใน API ที่จะเริ่มต้นกิจกรรม - แอปไคลเอ็นต์เรียกใช้
createSdkActivityLauncher
ในกิจกรรมใดกิจกรรมหนึ่งเพื่อสร้างตัวเปิดแอปที่ส่งไปยัง SDK ในการเรียก API ได้ - SDK จะเรียกใช้
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
และดึงข้อมูลโทเค็นตัวระบุ - SDK จะเรียกใช้
launchSdkActivity
เพื่อเปิดใช้งานกิจกรรม
แผนภาพต่อไปนี้แสดงขั้นตอนในกรณีที่ใช้คลังกิจกรรม
Platform API
แพลตฟอร์มจะเปิดตัว API ต่อไปนี้เพื่ออำนวยความสะดวกในการสร้างและจัดการกิจกรรมใน Sandbox ภายในรันไทม์ของ SDK
SdkSandboxActivityHandler
: ตัวแฮนเดิลกิจกรรมใช้เพื่อแจ้ง SDK เมื่อสร้างกิจกรรม และ SDK จะเป็นผู้ลงทะเบียนตัวแฮนเดิล- SDK สามารถใช้เมธอดต่อไปนี้ในส่วน
SdkSandboxController
เพื่อช่วยในการลงทะเบียนตัวแฮนเดิลกิจกรรม.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: ลงทะเบียนอินสแตนซ์ของSdkSandboxActivityHandler
ซึ่งจะแสดงผลตัวระบุIBinder
.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: ยกเลิกการลงทะเบียนอินสแตนซ์ที่ลงทะเบียนของSdkSandboxActivityHandler
โดยใช้ตัวระบุ
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: เมธอดนี้เรียกใช้จากแอปไคลเอ็นต์เพื่อทริกเกอร์การสร้างกิจกรรมสําหรับ SDK แอปไคลเอ็นต์ต้องส่งกิจกรรมเริ่มต้นที่เลือกและตัวระบุตัวแฮนเดิลกิจกรรมของ SDK เป็นพารามิเตอร์
หากต้องการเริ่มกิจกรรมโดยใช้ Platform API นั้น SDK จะต้องทําตามขั้นตอนต่อไปนี้
- SDK จะลงทะเบียนตัวแฮนเดิลกิจกรรมโดยใช้ API ที่ระบุและรับตัวระบุ
- SDK จะแชร์ตัวระบุนี้กับแอปไคลเอ็นต์
- แอปไคลเอ็นต์เรียกเมธอดเพื่อเริ่มกิจกรรมในรันไทม์ SDK ด้วย API ของแพลตฟอร์ม
startSdkSandboxActivity(Activity, IBinder)
โดยส่งกิจกรรมเริ่มต้นที่เลือกสำหรับกิจกรรมใหม่นี้และตัวระบุของตัวแฮนเดิลกิจกรรมเป็นพารามิเตอร์ - แพลตฟอร์มจะเริ่มกิจกรรมและแจ้งให้ SDK ทราบผ่านการเรียกกลับในตัวแฮนเดิลกิจกรรม (
SdkSandboxActivityHandler.onActivityCreated(Activity)
) - SDK จะใช้กิจกรรมเพื่อป้อนข้อมูลโฆษณา
การใช้ Platform API ทำให้ SDK มีหน้าที่รับผิดชอบในการแชร์ตัวระบุของ SdkSandboxActivityHandler กับแอปไคลเอ็นต์ผ่าน API ในเวลาที่เหมาะสม และแนะนำแอปไคลเอ็นต์เกี่ยวกับวิธีใช้
ในแผนภาพขั้นตอนการทำงานต่อไปนี้ ตัวอย่าง SDK มีเมธอด launchActivity(AppCallback)
ซึ่งต้องการการเรียกกลับ (กำหนดไว้เป็นส่วนหนึ่งของ API ของ SDK) SDK ใช้การเรียกกลับนี้เพื่อแชร์ตัวระบุของตัวแฮนเดิลกิจกรรม (SdkSandboxActivityHandler
) กับแอปไคลเอ็นต์
การมองเห็นโฆษณา
ภายในรันไทม์ของ SDK โฆษณาที่ผสานรวมอยู่ในลําดับชั้นมุมมองของแอปไคลเอ็นต์จะใช้แชแนลด้านข้างเพื่อแสดงผลมุมมอง SDK จากกระบวนการของ SDK ไปยังกระบวนการของแอปไคลเอ็นต์
SDK ไม่สามารถใช้ View API เดียวกันกับที่ใช้นอกรันไทม์ SDK เพื่อระบุว่าผู้ใช้มองเห็นโฆษณาหรือไม่ เนื่องจากมุมมองโฆษณาไม่ได้แนบอยู่กับหน้าต่างของแอปพลิเคชัน (การมองเห็นโฆษณา)
ในทางตรงกันข้าม กิจกรรมที่แพลตฟอร์มให้จะทำงานภายในกระบวนการรันไทม์ของ SDK โดยไม่จำเป็นต้องใช้ช่องทางแยกต่างหาก และช่วยให้ SDK ใช้ API Activity
และ View
มาตรฐานของ Android ได้
การติดตั้งใช้งานที่แตกต่างกันเหล่านี้ทําให้เราต้องพยายามอย่างต่อเนื่องเพื่อรวมอินเทอร์เฟซเข้าด้วยกันเพื่อดึงข้อมูลสัญญาณการแสดงผลโดยไม่คำนึงถึงบริบทการโหลดโฆษณา
อายุการใช้งาน
ตัวแปร ActivityHolder
ที่ส่งไปยัง SDK ผ่าน SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
จะใช้เพื่อติดตั้งใช้งาน LifecycleOwner
ได้ และสามารถใช้เพื่อดูข้อมูลเกี่ยวกับ Lifecycle.Event
การนำทางกลับ
เมธอดนี้
ActivityHolder.getOnBackPressedDispatcher()
จะแสดงผล
OnBackPressedDispatcher
ซึ่งสามารถใช้เพื่อลงทะเบียนตัวอย่าง
OnBackPressedCallback
เพื่อจัดการการนําทางกลับ