Persetujuan di WebView: Menjaga Persetujuan Native dan Web Tetap Sinkron
Masalah Banner Ganda
Banyak aplikasi sebagian native dan sebagian web. Sebuah game menampilkan toko, berita, atau halaman bantuannya di WebView; aplikasi utilitas menampilkan artikel dari situs webnya; aplikasi hibrida membungkus sebagian besar antarmukanya dalam konten web. Masing-masing sisi memiliki mekanisme persetujuannya sendiri: aplikasi native memakai CMP atau SDK dalam aplikasi, dan halaman web memuat CMP web. Kecuali keduanya dihubungkan, pengguna ditanya dua kali, pilihan yang dibuat di satu tempat diabaikan di tempat lain, dan permintaan iklan dari dalam WebView keluar dengan sinyal yang salah.
Panduan ini membahas cara membuat persetujuan native dan web selaras, sehingga pengguna menjawab sekali dan setiap permintaan iklan membawa keputusan yang sama.
Tempat Masing-Masing Sisi Menyimpan Persetujuan
Native
IAB TCF menetapkan cara CMP dalam aplikasi menyimpan persetujuan: di NSUserDefaults pada iOS dan SharedPreferences pada Android, menggunakan kunci standar seperti IABTCF_TCString, IABTCF_gdprApplies, dan IABTCF_PurposeConsents. SDK iklan membaca kunci-kunci ini secara langsung. IAB GPP mendefinisikan kunci serupa dengan awalan IABGPP_, seperti IABGPP_HDR_GppString.
Web
CMP web biasanya menyimpan keputusannya di cookie first-party atau local storage untuk domain situs, dan mengeksposnya melalui fungsi JavaScript __tcfapi dan __gpp. Tag iklan di halaman memanggil fungsi-fungsi itu, bukan penyimpanan native.
Celahnya
WebView memiliki ruang cookie dan penyimpanan sendiri, terpisah dari browser perangkat dan terpisah dari preferensi native aplikasi. Di iOS, WKWebView yang memakai penyimpanan data non-persisten melupakan segalanya saat ditutup. Tidak ada yang mengalir di antara kedua sisi kecuali Anda membangunnya.
Pilih Satu Sumber Kebenaran
Keputusan pertama adalah sisi mana yang memiliki persetujuan. Untuk sebagian besar aplikasi jawabannya adalah CMP native, karena:
- Ia berjalan lebih dulu, sebelum WebView mana pun dibuka.
- SDK iklan native, yang biasanya menghasilkan sebagian besar pendapatan, membaca penyimpanan native.
- Di iOS, ia dapat dikoordinasikan dengan prompt App Tracking Transparency.
Pendekatan web-first dapat masuk akal untuk aplikasi hibrida yang seluruh antarmukanya adalah konten web, tetapi Anda harus menuliskan keputusan itu kembali ke penyimpanan native untuk SDK native.
Meneruskan Persetujuan Native ke WebView
Dengan native sebagai sumber kebenaran, WebView perlu melihat keputusan yang sama. Pola yang umum:
- Menyuntikkan implementasi
__tcfapi. Sebelum skrip halaman berjalan, suntikkan skrip kecil yang mendefinisikan__tcfapi(dan__gppbila perlu) dan menjawab panggilan dengan string TC dan nilai yang dibaca dari penyimpanan native. Tag iklan di halaman lalu mendapatkan keputusan native melalui API standar. - Menyembunyikan banner web. Konfigurasikan CMP web agar tetap tersembunyi ketika halaman dimuat di dalam aplikasi Anda, misalnya berdasarkan parameter query atau token user agent kustom yang Anda kendalikan. Jika tidak, pengguna melihat banner kedua.
- Meneruskan string saat pemuatan. Beberapa CMP web dapat menerima string persetujuan yang sudah ada saat inisialisasi dan mengadopsinya. Periksa dokumentasi CMP web Anda untuk metode yang didukung.
Pola apa pun yang Anda pakai, pastikan nilai yang disuntikkan diperbarui ketika pengguna mengubah pilihannya di layar pengaturan native, bukan hanya pada peluncuran aplikasi berikutnya.
Meneruskan Persetujuan Web Kembali ke Native
Jika pengguna dapat mengubah persetujuan di dalam WebView, misalnya melalui halaman pengaturan privasi, aplikasi harus mengetahuinya. Gunakan jembatan JavaScript: message handler di iOS atau JavaScript interface di Android. Sisi web mendengarkan dengan __tcfapi('addEventListener', ...) dan mengirim string baru ke kode native, yang menuliskan kunci standar. Validasi input dari WebView sebelum menulisnya; hanya terima pesan dari konten Anda sendiri.
Iklan di Dalam WebView
Iklan yang dirender di WebView adalah iklan web. Iklan itu membaca persetujuan dari halaman, bukan dari penyimpanan native, kecuali SDK iklan menyediakan cara untuk menghubungkan keduanya. Mobile Ads SDK milik Google, misalnya, menawarkan API untuk mendaftarkan WebView agar iklan di dalamnya dapat memakai sinyal dari aplikasi; periksa dokumentasi terbaru untuk SDK Anda. Bagaimanapun, pastikan melalui pengujian bahwa permintaan iklan dari WebView membawa string TC atau GPP yang sama dengan permintaan iklan native.
Daftar Periksa Pengujian
- Instalasi baru: satu prompt persetujuan, bukan dua.
- Tolak semua di CMP native, buka WebView, periksa permintaan iklan: string harus mencerminkan penolakan.
- Ubah persetujuan di pengaturan native, kembali ke WebView yang terbuka: halaman harus melihat keputusan baru.
- Jika ada pengaturan web, ubah persetujuan di sana dan pastikan kunci native diperbarui.
- Matikan paksa dan luncurkan ulang aplikasi: keputusan bertahan di kedua sisi.
- Uji di iOS dan Android, karena penyimpanan WebView berperilaku berbeda di masing-masing.
Poin Penting
- Persetujuan native dan WebView berada di penyimpanan terpisah dan tidak tersinkron secara default.
- Pilih satu sumber kebenaran; untuk sebagian besar aplikasi itu adalah CMP native.
- Ekspos persetujuan native ke konten web melalui
__tcfapiatau__gppyang disuntikkan dan sembunyikan banner web. - Gunakan jembatan JavaScript untuk mengirim perubahan dari web kembali ke penyimpanan native.
- Pastikan permintaan iklan dari WebView membawa string persetujuan yang sama dengan permintaan native.