รันไทม์ของ 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) Callback นี้ใช้โดย
SDK สำหรับแชร์เครื่องจัดการกิจกรรม (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
จัดการการนำทางกลับ