รันไทม์ของ 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 ประเภท ได้แก่ หลัก ไคลเอ็นต์ และผู้ให้บริการ
- ไลบรารีหลักมีอินเทอร์เฟซที่แอปไคลเอ็นต์และไลบรารีของผู้ให้บริการใช้
- ไลบรารีของ provider มี API สำหรับ SDK เพื่อเริ่มกิจกรรม
- ไลบรารีไคลเอ็นต์มี API สำหรับแอปไคลเอ็นต์เพื่อสร้างตัวเรียกใช้งานกิจกรรม ซึ่ง SDK สามารถใช้เพื่อขอให้แอปเปิดกิจกรรมได้
ไลบรารีเหล่านี้เปิดตัว API ต่อไปนี้
SdkActivityLauncher
: ตัวเรียกใช้งานกิจกรรมช่วยให้ SDK จัดการกิจกรรมการเปิดตัวจากแอปไคลเอ็นต์ได้ แอปไคลเอ็นต์ควรสร้าง Launcher และส่งผ่านเป็นพารามิเตอร์ไปยัง API ของ SDK ที่เริ่มกิจกรรม<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: ฟังก์ชันส่วนขยายที่แอปไคลเอ็นต์เรียกใช้จากกิจกรรมเพื่อสร้าง Launcher ได้SdkActivityLauncher.launchSdkActivity(IBinder)
: วิธีการที่ SDK ใช้เพื่อขอแอปเปิดกิจกรรม
ขั้นตอนในการเริ่มกิจกรรมด้วยไลบรารีกิจกรรมมีดังนี้
- SDK จะเพิ่มพารามิเตอร์ประเภท
SdkActivityLauncher
ลงใน API ที่จะเริ่มกิจกรรม - แอปไคลเอ็นต์จะเรียก
createSdkActivityLauncher
ในกิจกรรมใดกิจกรรมหนึ่งเพื่อสร้าง Launcher ที่ส่งไปยัง SDK ในการเรียก API ได้ - SDK เรียกใช้
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
และดึงโทเค็นตัวระบุ - SDK เรียกใช้
launchSdkActivity
เพื่อเริ่มกิจกรรม
แผนภาพต่อไปนี้แสดงขั้นตอนในกรณีที่ใช้ไลบรารีกิจกรรม
API ของแพลตฟอร์ม
แพลตฟอร์มนี้เปิดตัว API ต่อไปนี้เพื่อช่วยอำนวยความสะดวกในการสร้างและการจัดการกิจกรรมที่ใช้แซนด์บ็อกซ์ภายในรันไทม์ของ SDK
SdkSandboxActivityHandler
: เครื่องจัดการกิจกรรมใช้เพื่อแจ้งเตือน SDK เมื่อมีการสร้างกิจกรรม และ SDK จะลงทะเบียนกิจกรรมดังกล่าว- SDK สามารถใช้วิธีการต่อไปนี้ใน
SdkSandboxController
เพื่อช่วยลงทะเบียนตัวแฮนเดิลกิจกรรม.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: ลงทะเบียนอินสแตนซ์ของSdkSandboxActivityHandler
ซึ่งแสดงผลตัวระบุIBinder
.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: ยกเลิกการลงทะเบียนอินสแตนซ์ที่ลงทะเบียนของSdkSandboxActivityHandler
โดยใช้ตัวระบุ
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: เมื่อเรียกใช้จากแอปไคลเอ็นต์ เมธอดนี้จะทริกเกอร์การสร้างกิจกรรมสำหรับ SDK แอปไคลเอ็นต์จะต้องส่งผ่านเป็นพารามิเตอร์ของกิจกรรมเริ่มต้นที่เลือกและตัวระบุเครื่องมือจัดการกิจกรรมของ SDK
หากต้องการเริ่มกิจกรรมโดยใช้ API ของแพลตฟอร์ม SDK ต้องเป็นไปตามขั้นตอนนี้
- SDK จะลงทะเบียนเครื่องจัดการกิจกรรมโดยใช้ API ที่มีให้และรับตัวระบุ
- SDK แชร์ตัวระบุนี้กับแอปไคลเอ็นต์
- แอปไคลเอ็นต์เรียกใช้เมธอดเพื่อเริ่มกิจกรรมในรันไทม์ของ SDK ด้วย API ของแพลตฟอร์ม
startSdkSandboxActivity(Activity, IBinder)
โดยการส่งเป็นพารามิเตอร์กิจกรรมเริ่มต้นที่เลือกสำหรับกิจกรรมใหม่นี้ และตัวระบุของเครื่องจัดการกิจกรรม - แพลตฟอร์มจะเริ่มกิจกรรมและแจ้งให้ SDK ทราบผ่าน Callback ในเครื่องมือจัดการกิจกรรม (
SdkSandboxActivityHandler.onActivityCreated(Activity)
) - SDK ใช้กิจกรรมดังกล่าวเพื่อสร้างโฆษณา
การใช้ API ของแพลตฟอร์มทำให้ SDK รับผิดชอบในการแชร์ตัวระบุของ SdkSandboxActivityHandler กับแอปไคลเอ็นต์ผ่าน API ของตนเองในเวลาที่เหมาะสม และแนะนำแอปไคลเอ็นต์เกี่ยวกับวิธีใช้
ในแผนภาพต่อไปนี้ SDK ตัวอย่างมีเมธอด launchActivity(AppCallback)
ซึ่งคาดว่าจะมี Callback (ซึ่งเป็นส่วนหนึ่งของ API ของ SDK) SDK จะใช้ Callback นี้เพื่อแชร์ตัวระบุของตัวแฮนเดิลกิจกรรม (SdkSandboxActivityHandler
) กับแอปไคลเอ็นต์
ความสามารถในการแสดงตัวโฆษณา
ภายในรันไทม์ของ SDK โฆษณาที่ผสานรวมในลำดับชั้นการแสดงผลของแอปไคลเอ็นต์จะใช้ แชแนล ด้านข้าง เพื่อแสดงมุมมอง SDK จากกระบวนการของ SDK ไปยังกระบวนการของแอปไคลเอ็นต์
SDK ไม่สามารถใช้ View API เดียวกันกับที่ใช้นอกรันไทม์ของ SDK เพื่อระบุว่าโฆษณาแสดงต่อผู้ใช้หรือไม่ เนื่องจากการดูโฆษณาไม่ได้แนบอยู่กับหน้าต่างของแอปพลิเคชัน (การมองเห็นโฆษณา)
ในทางตรงกันข้าม กิจกรรมที่มาจากแพลตฟอร์มจะทำงานภายในกระบวนการรันไทม์ของ SDK โดยตรง ทำให้ไม่จำเป็นต้องใช้ช่องทางด้านข้างและอนุญาตให้ SDK ใช้ API มาตรฐานของ Android Activity
และ View
เนื่องจากการใช้งานที่แตกต่างกันเหล่านี้ เราจึงพยายามอย่างต่อเนื่องที่จะผสานรวมอินเทอร์เฟซต่างๆ เข้าด้วยกันเพื่อดึงสัญญาณการมองเห็นโฆษณาโดยไม่คำนึงถึงบริบทการโหลดโฆษณา
อายุการใช้งาน
ActivityHolder
ส่งไปยัง SDK ผ่าน
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
มีการใช้งาน
LifecycleOwner
และใช้เพื่อให้ทราบเกี่ยวกับ
Lifecycle.Event
ได้
การนำทางย้อนกลับ
เมธอด
ActivityHolder.getOnBackPressedDispatcher()
แสดงผล
OnBackPressedDispatcher
ซึ่งสามารถใช้ลงทะเบียน
OnBackPressedCallback
อินสแตนซ์เพื่อจัดการการนำทางกลับ