รันไทม์ของ SDK จะกำหนดข้อจำกัดเกี่ยวกับวิธีที่ SDK สามารถเปิดตัวกิจกรรมใหม่ ซึ่งเป็นความท้าทายสำหรับรูปแบบโฆษณาแบบเต็มหน้าจอที่โดยปกติแล้วจะอาศัยการเริ่มกิจกรรมแยกต่างหากเพื่อการควบคุมและประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น เพื่อแก้ไขปัญหานี้ รันไทม์ของ SDK จึงได้เปิดตัวกลไกใหม่สำหรับกิจกรรมในแซนด์บ็อกซ์
SDK ที่โหลดภายในสภาพแวดล้อมรันไทม์ของ SDK จะกำหนดแท็ก <activity> ในไฟล์ Manifest หรือเริ่มต้นกิจกรรมของตนเองโดยตรงไม่ได้
แต่เราได้เปิดตัวการดำเนินการตามความตั้งใจใหม่ START_SANDBOXED_ACTIVITY แทน
แม้ว่า SDK จะถูกจำกัดไม่ให้เปิดใช้ Intent ด้วยการดำเนินการนี้ แต่ SDK สามารถ ขอให้แอปไคลเอ็นต์เริ่ม Intent นี้ได้ จากนั้นระบบจะสร้างกิจกรรมที่แพลตฟอร์มกำหนดและส่งไปยัง SDK กิจกรรมนี้จะทํางานใน กระบวนการเดียวกับ SDK
จากนั้น SDK จะใช้กิจกรรมนี้เพื่อติดตั้งใช้งานและจัดการประสบการณ์การใช้งานโฆษณาแบบเต็มหน้าจอ
กิจกรรมที่แพลตฟอร์มจัดให้เป็นandroid.app.Activityมาตรฐาน
ซึ่งเปิดตัวเป็นส่วนหนึ่งของงานของแอปไคลเอ็นต์
การสร้างกิจกรรมในรันไทม์ของ SDK
คุณมี 2 วิธีหลักในการสร้างกิจกรรม ได้แก่ การใช้ไลบรารีกิจกรรมของ Jetpack ที่ปรับปรุงแล้ว หรือการโต้ตอบกับ Platform API โดยตรง
เราขอแนะนำให้ใช้คลังกิจกรรมเนื่องจากจะช่วยลดความซับซ้อนในการสร้างกิจกรรมด้วยการแยกความซับซ้อนพื้นฐานออก
คลังกิจกรรม
ไลบรารีกิจกรรมมีข้อดีหลายประการ ดังนี้
- สรุปรายละเอียดภายในของการลงทะเบียนตัวแฮนเดิลกิจกรรมและการแชร์ตัวระบุกับแอปไคลเอ็นต์
- ช่วยให้นักพัฒนาแอปควบคุมวิธีที่ SDK สร้างกิจกรรมภายในแอปได้มากขึ้นโดยการอนุญาตให้นักพัฒนาแอปกำหนดเงื่อนไข (Predicate) ที่ต้องเป็นไปตามนั้น
- สร้างวิธีรวมสำหรับ SDK เพื่อกำหนด API ที่เปิดใช้กิจกรรม
ไลบรารีกิจกรรมมี 3 ประเภท ได้แก่ หลัก ลูกค้า และผู้ให้บริการ
- ไลบรารีหลักมีอินเทอร์เฟซที่แอปไคลเอ็นต์และ ไลบรารีของผู้ให้บริการใช้
- ไลบรารีผู้ให้บริการมี 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เพื่อเปิดกิจกรรม
แผนภาพต่อไปนี้แสดงโฟลว์ในกรณีที่ใช้ไลบรารีกิจกรรม
API ของแพลตฟอร์ม
แพลตฟอร์มนี้เปิดตัว API ต่อไปนี้เพื่ออำนวยความสะดวกในการสร้างและ จัดการกิจกรรมในแซนด์บ็อกซ์ภายในรันไทม์ของ 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 Runtime ด้วยแพลตฟอร์ม API
startSdkSandboxActivity(Activity, IBinder)โดยส่ง Activity เริ่มต้นที่เลือกสำหรับ Activity ใหม่นี้และตัวระบุของ Activity Handler เป็นพารามิเตอร์ - แพลตฟอร์มจะเริ่มกิจกรรมและแจ้ง 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
อินสแตนซ์เพื่อจัดการการนำทางย้อนกลับได้