SDK Runtime memberlakukan batasan tentang cara SDK dapat meluncurkan aktivitas baru. Hal ini menimbulkan tantangan bagi format iklan layar penuh yang biasanya mengandalkan dimulainya aktivitas terpisah untuk meningkatkan kontrol dan pengalaman pengguna. Untuk mengatasi hal ini, Runtime SDK memperkenalkan mekanisme baru untuk aktivitas yang di-sandbox.
SDK yang dimuat dalam lingkungan Runtime SDK tidak dapat secara langsung menentukan tag <activity> dalam manifesnya atau memulai aktivitasnya sendiri.
Sebagai gantinya, tindakan intent baru, START_SANDBOXED_ACTIVITY, diperkenalkan.
Meskipun SDK juga dilarang meluncurkan intent dengan tindakan ini, SDK dapat meminta aplikasi klien untuk memulai intent ini. Kemudian, sistem akan membuat aktivitas yang ditentukan platform dan meneruskannya ke SDK. Aktivitas ini akan berjalan dalam proses yang sama dengan SDK.
SDK kemudian dapat menggunakan aktivitas ini untuk menerapkan dan mengelola pengalaman iklan layar penuh.
Aktivitas yang disediakan oleh platform adalah android.app.Activity standar,
diluncurkan sebagai bagian dari tugas aplikasi klien.
Pembuatan aktivitas di Runtime SDK
Anda memiliki dua metode utama untuk membuat aktivitas: menggunakan library Aktivitas Jetpack yang disederhanakan atau berinteraksi langsung dengan Platform API.
Sebaiknya gunakan library Aktivitas karena menyederhanakan pembuatan aktivitas dengan mengabstraksi kompleksitas yang mendasarinya.
Library aktivitas
Library aktivitas memberikan beberapa keuntungan:
- Mengabstraksi detail internal pendaftaran handler aktivitas dan berbagi ID-nya dengan aplikasi klien.
- Memberi developer aplikasi kontrol lebih besar atas cara SDK membuat Aktivitas dalam aplikasi mereka dengan mengizinkan mereka menetapkan kondisi (predikat) yang harus dipenuhi.
- Membuat cara terpadu bagi SDK untuk menentukan API yang meluncurkan aktivitas.
Ada tiga library aktivitas: inti, klien, dan penyedia.
- Library core menyediakan antarmuka yang digunakan oleh aplikasi klien dan library penyedia.
- Library penyedia menyediakan API bagi SDK untuk meluncurkan aktivitas.
- Library klien menyediakan API bagi aplikasi klien untuk membuat peluncur aktivitas, yang dapat digunakan SDK untuk meminta aplikasi meluncurkan aktivitas.
Library ini memperkenalkan API berikut:
SdkActivityLauncher: Peluncur aktivitas memungkinkan SDK menangani peluncuran aktivitas dari aplikasi klien. Aplikasi klien harus membuat peluncur dan meneruskannya sebagai parameter ke API SDK yang memulai aktivitas.<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): Fungsi ekstensi yang dapat dipanggil aplikasi klien dari aktivitasnya untuk membuat peluncur.SdkActivityLauncher.launchSdkActivity(IBinder): Metode yang digunakan oleh SDK untuk meminta aplikasi meluncurkan aktivitas.
Alur peluncuran aktivitas dengan library aktivitas adalah sebagai berikut:
- SDK menambahkan parameter jenis
SdkActivityLauncherke semua API yang akan memulai aktivitas. - Aplikasi klien memanggil
createSdkActivityLauncherdi salah satu aktivitasnya untuk membuat peluncur yang dapat diteruskan ke SDK pada panggilan API. - SDK memanggil
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)dan mengambil token ID. - SDK memanggil
launchSdkActivityuntuk meluncurkan aktivitas.
Diagram berikut menunjukkan alur jika menggunakan library aktivitas.
Platform API
Platform ini memperkenalkan API berikut untuk memfasilitasi pembuatan dan pengelolaan aktivitas sandbox dalam Runtime SDK:
SdkSandboxActivityHandler: Activity Handler digunakan untuk memberi tahu SDK saat suatu Aktivitas dibuat, dan didaftarkan oleh SDK.- Untuk membantu pendaftaran Handler Aktivitas, SDK dapat menggunakan metode berikut di bagian
SdkSandboxController:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler): Mendaftarkan instanceSdkSandboxActivityHandler, yang menampilkan IDIBinder..unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler): Membatalkan pendaftaran instanceSdkSandboxActivityHandleryang terdaftar menggunakan ID-nya.
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): Dipanggil dari aplikasi klien, metode ini memicu pembuatan aktivitas untuk SDK. Aplikasi klien harus meneruskan sebagai parameter Aktivitas awal yang dipilih dan ID Activity Handler SDK.
Untuk memulai aktivitas menggunakan Platform API, SDK harus mengikuti alur ini:
- SDK mendaftarkan pengendali aktivitas menggunakan API yang disediakan dan mendapatkan ID.
- SDK membagikan ID ini dengan aplikasi kliennya.
- Aplikasi klien memanggil metode untuk memulai aktivitas di Runtime SDK dengan
startSdkSandboxActivity(Activity, IBinder)API platform, meneruskan sebagai parameter Aktivitas awal yang dipilih untuk Aktivitas baru ini, dan ID Handler Aktivitas. - Platform memulai Aktivitas, dan memberi tahu SDK melalui callback di Handler Aktivitas (
SdkSandboxActivityHandler.onActivityCreated(Activity)). - SDK menggunakan aktivitas untuk mengisi aktivitas dengan iklan.
Dengan menggunakan API Platform, SDK bertanggung jawab untuk membagikan ID SdkSandboxActivityHandler ke aplikasi klien melalui API-nya pada waktu yang tepat, dan memandu aplikasi klien tentang cara menggunakannya.
Dalam diagram alur berikut, contoh SDK memiliki metode launchActivity(AppCallback) yang mengharapkan
callback (ditentukan sebagai bagian dari API SDK). Callback ini digunakan oleh
SDK untuk membagikan ID
Activity Handler (SdkSandboxActivityHandler) ke aplikasi klien.
Visibilitas
Dalam Runtime SDK, iklan yang diintegrasikan ke hierarki tampilan aplikasi klien menggunakan saluran samping untuk merender tampilan SDK dari proses SDK ke proses aplikasi klien.
SDK tidak dapat menggunakan View API yang sama seperti yang digunakan di luar runtime SDK untuk menentukan apakah iklan terlihat oleh pengguna atau tidak, karena tampilan iklan tidak dikaitkan ke jendela aplikasi (Keterlihatan).
Sebaliknya, aktivitas yang disediakan platform berjalan secara native dalam proses Runtime SDK, sehingga tidak memerlukan saluran samping dan memungkinkan SDK menggunakan API Activity dan View Android standar.
Karena perbedaan implementasi ini, upaya berkelanjutan bertujuan untuk menyatukan antarmuka guna mengambil sinyal keaktifan dilihat terlepas dari konteks pemuatan iklan.
Lifecycle
ActivityHolder
yang diteruskan ke SDK melalui
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
menerapkan
LifecycleOwner
dan dapat digunakan untuk mengetahui
Lifecycle.Event.
Navigasi kembali
Metode
ActivityHolder.getOnBackPressedDispatcher()
menampilkan
OnBackPressedDispatcher
yang dapat digunakan untuk mendaftarkan
instance OnBackPressedCallback
untuk menangani navigasi kembali.