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

แสดงความคิดเห็น

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