رضایت در WebViewها: همگام نگه داشتن رضایت بومی و وب
مشکل بنر دوگانه
بسیاری از اپلیکیشنها تا حدی بومی و تا حدی وب هستند. یک بازی فروشگاه، اخبار یا صفحههای راهنمای خود را در WebView نشان میدهد؛ یک اپلیکیشن ابزاری مقالههایی از وبسایتش را رندر میکند؛ یک اپلیکیشن ترکیبی بیشتر رابط خود را در محتوای وب میپیچد. هر طرف سازوکار رضایت خودش را دارد: اپلیکیشن بومی از CMP یا SDK درونبرنامهای استفاده میکند و صفحههای وب یک CMP وب بارگذاری میکنند. مگر اینکه به هم متصل شوند، از کاربر دو بار پرسیده میشود، انتخابهایی که در یک جا انجام شده در جای دیگر نادیده گرفته میشود و درخواستهای تبلیغ از درون WebView با سیگنالهای نادرست ارسال میشود.
این راهنما نشان میدهد چگونه رضایت بومی و وب را همسو کنید، تا کاربران یک بار پاسخ دهند و هر درخواست تبلیغ همان تصمیم را حمل کند.
هر طرف رضایت را کجا ذخیره میکند
بومی
IAB TCF مشخص میکند CMP درونبرنامهای رضایت را چگونه ذخیره کند: در NSUserDefaults در iOS و SharedPreferences در Android، با کلیدهای استاندارد مانند IABTCF_TCString، IABTCF_gdprApplies و IABTCF_PurposeConsents. SDKهای تبلیغاتی این کلیدها را مستقیماً میخوانند. IAB GPP کلیدهای مشابهی با پیشوند IABGPP_ تعریف میکند، مانند IABGPP_HDR_GppString.
وب
یک CMP وب معمولاً تصمیم خود را در کوکیهای اولشخص یا حافظه محلی برای دامنه سایت ذخیره میکند و آن را از طریق توابع جاوااسکریپت __tcfapi و __gpp ارائه میدهد. تگهای تبلیغاتی در صفحه آن توابع را فراخوانی میکنند، نه حافظه بومی را.
شکاف
WebViewها فضای کوکی و ذخیرهسازی خودشان را دارند، جدا از مرورگر دستگاه و جدا از ترجیحات بومی اپلیکیشن. در iOS، یک WKWebView که از مخزن داده غیرماندگار استفاده میکند هنگام بسته شدن همهچیز را فراموش میکند. هیچچیز میان دو طرف جریان نمییابد مگر اینکه آن را خودتان بسازید.
یک منبع واحد حقیقت انتخاب کنید
نخستین تصمیم این است که کدام طرف مالک رضایت است. برای بیشتر اپلیکیشنها پاسخ CMP بومی است، چون:
- پیش از باز شدن هر WebView، ابتدا اجرا میشود.
- SDKهای تبلیغاتی بومی، که معمولاً بیشتر درآمد را میسازند، حافظه بومی را میخوانند.
- در iOS میتوان آن را با اعلان App Tracking Transparency هماهنگ کرد.
وبمحور بودن میتواند برای اپلیکیشنهای ترکیبی که کل رابطشان محتوای وب است منطقی باشد، اما در آن صورت باید تصمیم را برای SDKهای بومی به حافظه بومی بنویسید.
انتقال رضایت بومی به WebView
وقتی بومی منبع حقیقت است، WebView باید همان تصمیم را ببیند. الگوهای رایج:
- تزریق پیادهسازی
__tcfapi. پیش از اجرای اسکریپتهای صفحه، اسکریپت کوچکی تزریق کنید که__tcfapi(و در صورت نیاز__gpp) را تعریف میکند و به فراخوانیها با رشته TC و مقادیر خواندهشده از حافظه بومی پاسخ میدهد. تگهای تبلیغاتی صفحه سپس تصمیم بومی را از طریق API استاندارد دریافت میکنند. - پنهان کردن بنر وب. CMP وب را طوری پیکربندی کنید که وقتی صفحه درون اپلیکیشن شما بارگذاری میشود پنهان بماند، مثلاً بر اساس یک پارامتر کوئری یا توکن سفارشی user agent که خودتان کنترل میکنید. در غیر این صورت کاربر بنر دوم را میبیند.
- ارسال رشته هنگام بارگذاری. برخی CMPهای وب میتوانند هنگام مقداردهی اولیه یک رشته رضایت موجود را بپذیرند و آن را بهکار گیرند. مستندات CMP وب خود را برای روشهای پشتیبانیشده بررسی کنید.
از هر الگویی که استفاده کنید، مطمئن شوید مقادیر تزریقشده وقتی کاربر انتخابش را در صفحه تنظیمات بومی تغییر میدهد بهروز میشوند، نه فقط در اجرای بعدی اپلیکیشن.
بازگرداندن رضایت وب به بومی
اگر کاربران بتوانند رضایت را درون WebView تغییر دهند، مثلاً از طریق صفحه تنظیمات حریم خصوصی، اپلیکیشن باید از آن آگاه شود. از پل جاوااسکریپت استفاده کنید: یک message handler در iOS یا یک رابط جاوااسکریپت در Android. سمت وب با __tcfapi('addEventListener', ...) گوش میدهد و رشته جدید را به کد بومی میفرستد که کلیدهای استاندارد را مینویسد. ورودی WebView را پیش از نوشتن اعتبارسنجی کنید؛ فقط پیامهای محتوای خودتان را بپذیرید.
تبلیغات درون WebViewها
تبلیغاتی که در WebView رندر میشوند تبلیغات وباند. رضایت را از صفحه میخوانند، نه از حافظه بومی، مگر اینکه SDK تبلیغاتی راهی برای پیوند دادن این دو فراهم کند. برای نمونه Google Mobile Ads SDK رابطی برای ثبت WebViewها ارائه میدهد تا تبلیغات درون آنها بتوانند از سیگنالهای اپلیکیشن استفاده کنند؛ مستندات فعلی SDK خود را بررسی کنید. در هر حال، با یک آزمایش تأیید کنید که درخواستهای تبلیغ از WebView همان رشته TC یا GPP درخواستهای تبلیغ بومی را حمل میکنند.
چکلیست آزمایش
- نصب تازه: یک اعلان رضایت، نه دو.
- در CMP بومی «رد همه» را بزنید، یک WebView باز کنید و درخواستهای تبلیغ را بازرسی کنید: رشته باید رد را منعکس کند.
- رضایت را در تنظیمات بومی تغییر دهید، به یک WebView باز برگردید: صفحه باید تصمیم جدید را ببیند.
- اگر تنظیمات وب وجود دارد، رضایت را آنجا تغییر دهید و تأیید کنید کلیدهای بومی بهروز میشوند.
- اپلیکیشن را ببندید و دوباره اجرا کنید: تصمیمها در هر دو طرف ماندگار میمانند.
- روی iOS و Android هر دو آزمایش کنید، چون ذخیرهسازی WebView در هر کدام متفاوت رفتار میکند.
نکات کلیدی
- رضایت بومی و WebView در مخزنهای جداگانهاند و بهطور پیشفرض همگام نمیشوند.
- یک منبع حقیقت انتخاب کنید؛ برای بیشتر اپلیکیشنها CMP بومی است.
- رضایت بومی را از طریق
__tcfapiیا__gppتزریقشده در اختیار محتوای وب بگذارید و بنر وب را پنهان کنید. - از پل جاوااسکریپت برای ارسال تغییرات وب به حافظه بومی استفاده کنید.
- بررسی کنید درخواستهای تبلیغ از WebViewها همان رشته رضایت درخواستهای بومی را حمل میکنند.