لا يمكن لحِزم SDK لعرض الإعلانات في "وقت تشغيل حِزم تطوير البرامج (SDK)" الوصول إلى التسلسل الهرمي لعرض الناشر.
بدلاً من ذلك، تتضمّن حِزم تطوير البرامج (SDK) في "وقت التشغيل" طرق عرض خاصة بها. لا يمكن لحزمة SDK استخدام واجهات برمجة التطبيقات
View نفسها التي تستخدمها خارج وقت تشغيل حزمة SDK لتحديد ما إذا كان الإعلان
مرئيًا للمستخدم، لأنّ عرض الإعلان غير مرفق بأحد
نوافذ التطبيق. ويشمل ذلك واجهات برمجة تطبيقات View في Android، مثل getLocationOnScreen
أو
getLocationInWindow
أو getVisibility
، التي لا تعرض القيمة
المتوقّعة.
إنّ إتاحة قياس إمكانية عرض الإعلانات هو أحد المتطلبات الأساسية لوقت تشغيل حزمة SDK. يهدف اقتراح التصميم هذا إلى توفير إمكانية استخدام قياس المفتوح وخدمات القياس المشابهة. قد تنطبق أيضًا الحلول الموضّحة هنا على واجهات برمجة التطبيقات Attribution Reporting API.
الإمكانات
يهدف هذا التصميم إلى إتاحة حِزم تطوير البرامج (SDK) للإعلانات أو شركاء القياس لاحتساب بيانات إمكانية العرض التالية (الأسماء مؤقتة وقابلة للتغيير):
-
viewport [Rect]
: يمثّل هندسة شاشة الجهاز أو نافذة التطبيق، استنادًا إلى إمكانات النظام الأساسي. uiContainerGeometry [Rect]
: هندسةSandboxedSdkView
التي تتم عرضها-
alpha [float]
: مستوى التعتيم لعنصرSandboxedSdkView
الذي يتم عرضه onScreenGeometry [Rect]
: مجموعة فرعية منuiContainerGeometry
لم يتم اقتصاصها من خلال طرق العرض الرئيسية، حتىviewport
.occludedGeometry [Rect]
: أجزاءonScreenGeometry
التي يتم حجبها بواسطة أيّ جداول عرض في التسلسل الهرمي للتطبيق تتضمّنRect
لكلّ حجب، بما يتوافق مع صفر أو عرض واحد أو أكثر من عروض التطبيق التي تتقاطع معSandboxedSdkView onScreenGeometry
المتطلبات
- يتم التعبير عن قيم
uiContainerGeometry
وonScreenGeometry
وoccludedGeometry
في مساحة الإحداثيات الخاصة بالعنصرviewport
. - يتم تسجيل تغييرات مستوى الرؤية بأقل وقت استجابة.
- يمكن قياس مستوى الظهور على مدار دورة ظهور الإعلان بالكامل، بدءًا من أول مرة يظهر فيها إلى آخر مرة.
اقتراح التصميم
يستند هذا الاقتراح إلى آلية عمل عرض واجهة المستخدم باستخدام مكتبات واجهة المستخدم الخاصة بالمستخدِم والموفِّر. سنوسّع نطاق مكتبات واجهة المستخدم للسماح لحزمة SDK بتسجيل مراقب واحد أو أكثر لجلسة واجهة المستخدم. سيتلقّى المُراقب معلومات عن إمكانية العرض عند رصد الأحداث ذات الصلة التي تعدّل أنواع البيانات في قسم capabilities. يمكن لحِزم تطوير البرامج (SDK) لقياس الأداء في وقت تشغيل حِزم SDK (عمليات تنفيذ OMID وMRAID) إرفاق هذا المُراقب بجلسة واجهة المستخدم، حتى يمكن إرسال هذه المعلومات إليه مباشرةً. يمكن لشركاء القياس دمج المعلومات التي يتم الحصول عليها من مكتبات UI مع بيانات عن المحتوى المتاح حاليًا (مثل عند استخدام نصوص برمجية للقياس يتم إدراجها في تصميم الإعلان) لإنشاء أحداث قياس إمكانية الرؤية باستخدام JavaScript.
تستمع مكتبة العميل إلى التغييرات في واجهة مستخدِم الإعلان من خلال أدوات الاستماع إلى الأحداث، مثل ViewTreeObserver
. عندما تحدّد مكتبة العميل أنّ واجهة مستخدم الإعلان تغيّرت بطريقة قد تؤثّر في قياس مدى الرؤية، تتحقّق من وقت إرسال الإشعار الأخير إلى المُراقب. إذا كان آخر تعديل أكبر
من وقت الاستجابة المسموح به (يمكن ضبطه من خلال حزمة تطوير البرامج (SDK) ليصل إلى 200 ملي ثانية بحد أدنى على
الأجهزة الجوّالة)، يتم إنشاء عنصر AdContainerInfo
جديد ويتم إرسال إشعار
إلى المُراقب. وهذا النموذج المستنِد إلى الأحداث أفضل لصحة النظام مقارنةً بالاستطلاع الذي تُجريه معظم عمليات تنفيذ OMID على Android اليوم.
واجهة برمجة التطبيقات
ستتم إضافة ما يلي إلى مكتبة privacysandbox.ui.core:
-
SessionObserver
: يتم تنفيذه عادةً من خلال حزمة تطوير البرامج (SDK) لقياس الأداء، ويتم إرفاقه بالجلسة التي تعرضها حزمة SDK من خلال privacysandbox.ui. ستتيح هذه الواجهة أيضًا لحزمة تطوير البرامج (SDK) للقياس تفعيل فئات معيّنة من إشارات إمكانية العرض. ويؤدي ذلك بدوره إلى السماح لمكتبة برامج العميل لواجهة المستخدم بجمع الإشارات التي تهمّ المُراقب فقط، ما يُعدّ أفضل لحالة النظام بشكل عام. registerObserver()
: تمت إضافة هذه الطريقة إلى فئةSession
، وهي تسمح لأي مستخدم لديه إذن بالوصول إلى الجلسة بتسجيل مراقب. إذا تم تسجيل المُراقب بعد فتح جلسة واجهة المستخدم، سيتم إرسالAdContainerInfo
المخزّنة مؤقتًا إليه على الفور. في حال التسجيل قبل فتح الجلسة، سيتم إرسالهاAdContainerInfo
عند فتح الجلسة.AdContainerInfo
: فئة تتضمّن وظائف للحصول على البيانات تتيح للمراقِب الحصول على معلومات حاوية الإعلانات للقراءة فقط لأنواع البيانات المدرَجة في القسم الإمكانات أعلاه. وستتطابق قيم العرض من وظائف الحصول هذه ، كلما أمكن ذلك، مع قيم العرض القابلة للتقسيم من وظائف الحصول الحالية فيView
وفئاتها الفرعية. إذا تم إنشاء حاوية الإعلان باستخدام Jetpack Compose، يؤدي ذلك إلى عرض السمات الدلالية للحاوية. يمكن استخدام هذه الفئة لاحتساب أحداث MRAID وOMID ذات الصلة بإمكانية العرض.-
SessionObserverotifyAdContainerChanged()
: يُستخدَم لإعلام المُراقب عند تغيُّر مدى الرؤية. ويمرر عنصرAdContainerInfo
. يتمّ تشغيل هذا الإجراء عند رصد أحداث تؤثّر في أنواع البيانات المدرَجة في القسم "الإمكانات". ملاحظة: قد يتمّ استدعاء هذه الطريقة بالإضافة إلى طُرق on Session. على سبيل المثال، يتمّ استدعاءSession.notifyResized()
لطلب حزمة SDK لتغيير حجم الإعلان، ويتمّ استدعاءSessionObserver.notifyAdContainerChanged()
أيضًا عند حدوث ذلك. SessionObserverotifySessionClosed()
: لإرسال إشعار إلى المُراقب بأنّه تم إغلاق الجلسة
التحسينات المستقبلية
يمكن تعديل أي رمز برمجي يتم تشغيله في عملية تطبيق التطبيق، بما في ذلك الرمز البرمجي من مكتبة privacysandbox.ui.client، في حال تعرّض التطبيق للاختراق. وبالتالي، فإنّ أي منطق لجمع الإشارات يتم تشغيله في عملية التطبيق معرّض للتلاعب من خلال رمز التطبيق. وينطبق ذلك أيضًا على رمز حزمة SDK الذي تم برمجته قبل توفّر "مبادرة حماية الخصوصية" والذي يتم تشغيله في عملية إرسال التطبيق. وبالتالي، لا يؤدي جمع الإشارات من خلال مكتبة واجهة المستخدم إلى تفاقم الوضع الأمني.
بالإضافة إلى ذلك، يمكن للرمز البرمجي في وقت تشغيل حزمة تطوير البرامج (SDK) استخدام واجهة برمجة تطبيقات لمنصّة تُسمى
setTrustedPresentationCallback
يمكن أن تمنحه ضمانات أقوى من
الإطار العمل بشأن عرض واجهة مستخدِم الإعلان. setTrustedPresentationCallback
يعمل على مستوى المساحة، ويمكن أن يساعد في تقديم تأكيدات حول المساحة
التي تحتوي على واجهة مستخدم الإعلان من خلال تحديد الحد الأدنى من الحدود الدنيا للعرض، مثل
النسبة المئوية للبكسل المرئي أو الوقت الذي يظهر فيه على الشاشة أو المقياس. يمكن التحقّق من هذه البيانات مقارنةً ببيانات مدى الرؤية المقدّمة من مكتبة عملاء واجهة المستخدِم الموضّحة أعلاه. وبما أنّ البيانات المقدَّمة من إطار العمل أكثر موثوقية، يمكن تجاهل أي أحداث من مكتبة واجهة المستخدم التي لا تتوافق بياناتها مع بيانات إطار العمل. على سبيل المثال، إذا تمّ استدعاء المستمع المقدَّم لـ
setTrustedPresentationCallback
من خلال إشعار بأنّه لا يتم عرض أي بكسل
من واجهة مستخدِم الإعلان على الشاشة، وتعرض مكتبة واجهة مستخدِم العميل
عددًا غير صفري من البكسل على الشاشة، يمكن تجاهل البيانات الواردة من هذه المكتبة.
الأسئلة المفتوحة
- ما هي إشارات مدى الرؤية التي تهمّك والتي لم يتم ذكرها في هذا الشرح؟
- يقضي الاقتراح الحالي بتعديل إمكانية العرض كل 200 ملي ثانية على الأقل، شرط أن يكون هناك تغيير ذي صلة في واجهة المستخدم. هل هذه الوتيرة مقبولة بالنسبة إليك؟ إذا لم يكن الأمر كذلك، ما هو معدّل التكرار الذي تفضّله؟
- هل تفضّل تحليل المعلومات من
setTrustedPresentationCallback
بنفسك، أو أن تُسقط مكتبة واجهة مستخدِم مقدّم الخدمة البيانات من مكتبة واجهة مستخدِم العميل عندما لا تتطابق مع بياناتsetTrustedPresentationCallback
؟ - كيف تستخدِم إشارات إمكانية العرض؟ يُرجى مساعدتنا في فهم حالات الاستخدام من خلال إرسال ملاحظات تجيب عن هذه الأسئلة.