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

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

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

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

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

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

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

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

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

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

  1. SDK จะลงทะเบียนตัวแฮนเดิลกิจกรรมโดยใช้ API ที่ระบุและรับตัวระบุ
  2. SDK จะแชร์ตัวระบุนี้กับแอปไคลเอ็นต์
  3. แอปไคลเอ็นต์เรียกใช้เมธอดเพื่อเริ่มกิจกรรมใน SDK Runtime ด้วยแพลตฟอร์ม API startSdkSandboxActivity(Activity, IBinder) โดยส่ง Activity เริ่มต้นที่เลือกสำหรับ Activity ใหม่นี้และตัวระบุของ Activity Handler เป็นพารามิเตอร์
  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 อินสแตนซ์เพื่อจัดการการนำทางย้อนกลับได้