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

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

ขั้นตอนในการเริ่มกิจกรรมด้วยไลบรารีกิจกรรมมีดังนี้

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

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

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

API ของแพลตฟอร์ม

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

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

หากต้องการเริ่มกิจกรรมโดยใช้ API ของแพลตฟอร์ม SDK ต้องเป็นไปตามขั้นตอนนี้

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

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

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

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

ความสามารถในการแสดงตัวโฆษณา

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