การรองรับกิจกรรมสำหรับโฆษณาแบบเต็มหน้าจอ

รันไทม์ของ 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 ใช้เพื่อขอให้แอปเปิดใช้งานกิจกรรม

ขั้นตอนการเปิดใช้งานกิจกรรมด้วยคลังกิจกรรมมีดังนี้

  1. SDK จะเพิ่มพารามิเตอร์ประเภท SdkActivityLauncher ลงใน API ที่จะเริ่มต้นกิจกรรม
  2. แอปไคลเอ็นต์เรียกใช้ createSdkActivityLauncher ในกิจกรรมใดกิจกรรมหนึ่งเพื่อสร้างตัวเปิดแอปที่ส่งไปยัง SDK ในการเรียก API ได้
  3. SDK จะเรียกใช้ SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) และดึงข้อมูลโทเค็นตัวระบุ
  4. SDK จะเรียกใช้ launchSdkActivity เพื่อเปิดใช้งานกิจกรรม

แผนภาพต่อไปนี้แสดงขั้นตอนในกรณีที่ใช้คลังกิจกรรม

แผนภาพลําดับชั้นของไลบรารีกิจกรรม
ผังลำดับแสดงขั้นตอนการเริ่มกิจกรรมโดยใช้ไลบรารีกิจกรรม

Platform API

แพลตฟอร์มจะเปิดตัว API ต่อไปนี้เพื่ออำนวยความสะดวกในการสร้างและจัดการกิจกรรมใน Sandbox ภายในรันไทม์ของ SDK

  • SdkSandboxActivityHandler: ตัวแฮนเดิลกิจกรรมใช้เพื่อแจ้ง SDK เมื่อสร้างกิจกรรม และ SDK จะเป็นผู้ลงทะเบียนตัวแฮนเดิล
  • SDK สามารถใช้เมธอดต่อไปนี้ในส่วน SdkSandboxController เพื่อช่วยในการลงทะเบียนตัวแฮนเดิลกิจกรรม
  • SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): เมธอดนี้เรียกใช้จากแอปไคลเอ็นต์เพื่อทริกเกอร์การสร้างกิจกรรมสําหรับ SDK แอปไคลเอ็นต์ต้องส่งกิจกรรมเริ่มต้นที่เลือกและตัวระบุตัวแฮนเดิลกิจกรรมของ SDK เป็นพารามิเตอร์

หากต้องการเริ่มกิจกรรมโดยใช้ Platform API นั้น SDK จะต้องทําตามขั้นตอนต่อไปนี้

  1. SDK จะลงทะเบียนตัวแฮนเดิลกิจกรรมโดยใช้ API ที่ระบุและรับตัวระบุ
  2. SDK จะแชร์ตัวระบุนี้กับแอปไคลเอ็นต์
  3. แอปไคลเอ็นต์เรียกเมธอดเพื่อเริ่มกิจกรรมในรันไทม์ SDK ด้วย API ของแพลตฟอร์ม startSdkSandboxActivity(Activity, IBinder) โดยส่งกิจกรรมเริ่มต้นที่เลือกสำหรับกิจกรรมใหม่นี้และตัวระบุของตัวแฮนเดิลกิจกรรมเป็นพารามิเตอร์
  4. แพลตฟอร์มจะเริ่มกิจกรรมและแจ้งให้ SDK ทราบผ่านการเรียกกลับในตัวแฮนเดิลกิจกรรม (SdkSandboxActivityHandler.onActivityCreated(Activity))
  5. SDK จะใช้กิจกรรมเพื่อป้อนข้อมูลโฆษณา

การใช้ Platform API ทำให้ SDK มีหน้าที่รับผิดชอบในการแชร์ตัวระบุของ SdkSandboxActivityHandler กับแอปไคลเอ็นต์ผ่าน API ในเวลาที่เหมาะสม และแนะนำแอปไคลเอ็นต์เกี่ยวกับวิธีใช้

ในแผนภาพขั้นตอนการทำงานต่อไปนี้ ตัวอย่าง SDK มีเมธอด launchActivity(AppCallback) ซึ่งต้องการการเรียกกลับ (กำหนดไว้เป็นส่วนหนึ่งของ API ของ SDK) SDK ใช้การเรียกกลับนี้เพื่อแชร์ตัวระบุของตัวแฮนเดิลกิจกรรม (SdkSandboxActivityHandler) กับแอปไคลเอ็นต์

แผนภาพลำดับการทำงานของ Platform API
ผังลำดับแสดงขั้นตอนการเริ่มกิจกรรมโดยใช้ API ของแพลตฟอร์ม

การมองเห็นโฆษณา

ภายในรันไทม์ของ 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 เพื่อจัดการการนําทางกลับ