SDK टूल के रनटाइम में विज्ञापन दिखने से जुड़े आंकड़ों के डिज़ाइन का प्रपोज़ल

SDK टूल के रनटाइम में मौजूद विज्ञापन SDK टूल, पब्लिशर के व्यू की हैरारकी को ऐक्सेस नहीं कर सकते. इसके बजाय, रनटाइम में SDK के अपने व्यू होते हैं. SDK टूल, उन View API का इस्तेमाल नहीं कर सकता जो SDK टूल के रनटाइम के बाहर इस्तेमाल किए जाते हैं. ऐसा इसलिए, क्योंकि विज्ञापन व्यू, ऐप्लिकेशन की विंडो से अटैच नहीं होता. इन एपीआई का इस्तेमाल करके यह तय किया जाता है कि विज्ञापन, उपयोगकर्ता को दिख रहा है या नहीं. इसमें getLocationOnScreen, getLocationInWindow या getVisibility जैसे Android View API शामिल हैं, जो उम्मीद के मुताबिक वैल्यू नहीं दिखाते.

विज्ञापन दिखने से जुड़े आंकड़ों को मेज़र करने की सुविधा, SDK टूल के रनटाइम की मुख्य ज़रूरी शर्त है. इस डिज़ाइन के प्रस्ताव का मकसद, Open Measurement और मिलती-जुलती मेज़रमेंट सेवाओं के लिए सहायता पाना है. यहां बताए गए समाधान, Attribution Reporting API पर भी लागू हो सकते हैं.

क्षमताएं

इस डिज़ाइन का मकसद, विज्ञापन दिखाने वाले SDK टूल या मेज़रमेंट पार्टनर को विज्ञापन दिखने से जुड़े इस डेटा का हिसाब लगाने में मदद करना है (नामों में बदलाव हो सकता है):

इस इलस्ट्रेशन में दिखाया गया है कि SDK टूल के रनटाइम में विज्ञापन दिखने की सुविधा के कॉम्पोनेंट कैसे इंटरऑपरेट करते हैं
SDK रनटाइम की मदद से विज्ञापन दिखने की जानकारी.
  • viewport [Rect]: यह प्लैटफ़ॉर्म की क्षमताओं के आधार पर, डिवाइस की स्क्रीन या ऐप्लिकेशन विंडो की ज्यामिति दिखाता है.
  • uiContainerGeometry [Rect]: रेंडर की जा रही SandboxedSdkView की ज्यामिति.
  • alpha [float]: रेंडर किए जा रहे SandboxedSdkView की ओपैसिटी.
  • onScreenGeometry [Rect]: uiContainerGeometry का सबसेट, जो viewport तक के पैरंट व्यू से क्लिप नहीं किया गया है.
  • occludedGeometry [Rect]: onScreenGeometry के वे हिस्से जिन्हें ऐप्लिकेशन की हैरारकी में मौजूद किसी भी व्यू से छिपा दिया गया है. इसमें हर ऑक्लूज़न के लिए एक Rect शामिल होता है. यह SandboxedSdkView onScreenGeometry से इंटरसेक्शन करने वाले, शून्य, एक या उससे ज़्यादा ऐप्लिकेशन व्यू से जुड़ा होता है

ज़रूरी शर्तें

  • uiContainerGeometry, onScreenGeometry, और occludedGeometry की वैल्यू, viewport के निर्देशांक स्पेस में दिखाई जाती हैं.
  • विज़िबिलिटी में हुए बदलाव की रिपोर्टिंग, कम से कम इंतज़ार के साथ होती है.
  • विज्ञापन दिखने की दर को विज्ञापन व्यू के पूरे लाइफ़साइकल के लिए मेज़र किया जा सकता है. इसमें, विज्ञापन के दिखने की शुरुआत से लेकर आखिर तक की अवधि शामिल है.

डिज़ाइन का प्रस्ताव

यह प्रस्ताव, क्लाइंट और प्रोवाइडर यूआई लाइब्रेरी का इस्तेमाल करके, यूज़र इंटरफ़ेस (यूआई) प्रज़ेंटेशन के काम करने के तरीके पर आधारित है. हम यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी को बड़ा करेंगे, ताकि एसडीके टूल, यूज़र इंटरफ़ेस सेशन के एक या एक से ज़्यादा ऑब्ज़र्वर को रजिस्टर कर सके. जब भी क्षमताएं सेक्शन में डेटा टाइप में बदलाव करने वाले ज़रूरी इवेंट का पता चलता है, तो ऑब्ज़र्वर को विज्ञापन दिखने की जानकारी मिलेगी. SDK टूल के रनटाइम में मौजूद मेज़रमेंट SDK टूल (OMID और MRAID लागू करने वाले), इस ऑब्ज़र्वर को यूज़र इंटरफ़ेस (यूआई) सेशन से अटैच कर सकते हैं, ताकि यह जानकारी सीधे उन्हें भेजी जा सके. मेज़रमेंट पार्टनर, यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी से मिली जानकारी को, पहले से मौजूद कॉन्टेंट के डेटा के साथ जोड़ सकते हैं. जैसे, विज्ञापन क्रिएटिव में इंजेक्ट की गई मेज़रमेंट स्क्रिप्ट का इस्तेमाल करते समय. इससे, JavaScript व्यूबिलिटी इवेंट जनरेट किए जा सकते हैं.

विज्ञापन दिखने की दर के लिए कंट्रोल फ़्लो.
विज्ञापन दिखने की दर के लिए कंट्रोल फ़्लो.

क्लाइंट लाइब्रेरी, ViewTreeObserver जैसे इवेंट लिसनर की मदद से, विज्ञापन के यूज़र इंटरफ़ेस में होने वाले बदलावों को सुनती है. जब भी यह पता चलता है कि विज्ञापन के यूज़र इंटरफ़ेस (यूआई) में ऐसा बदलाव हुआ है जिससे व्यूबिलिटी मेज़रमेंट पर असर पड़ सकता है, तो क्लाइंट लाइब्रेरी यह जांच करती है कि ऑब्ज़र्वर को पिछली सूचना कब भेजी गई थी. अगर आखिरी अपडेट, अनुमति वाले इंतज़ार (एसडीके टूल की मदद से कॉन्फ़िगर किया जा सकता है, मोबाइल पर कम से कम 200 मिलीसेकंड तक) से ज़्यादा है, तो एक नया AdContainerInfo ऑब्जेक्ट बनाया जाता है और ऑब्ज़र्वर को सूचना भेजी जाती है. इवेंट पर आधारित यह मॉडल, Android पर मौजूद ज़्यादातर OMID लागू करने के तरीके से किए गए पोलिंग की तुलना में, सिस्टम की परफ़ॉर्मेंस के लिए बेहतर है.

एपीआई

privacysandbox.ui.core लाइब्रेरी में ये जोड़े जाएंगे:

  • SessionObserver: आम तौर पर, मेज़रमेंट SDK टूल के ज़रिए लागू किया जाता है. यह privacysandbox.ui के ज़रिए, SDK टूल से मिले सेशन से जुड़ा होता है. इस इंटरफ़ेस की मदद से, मेज़रमेंट SDK टूल, विज्ञापन दिखने से जुड़े सिग्नल की कुछ कैटगरी के लिए ऑप्ट-इन कर पाएगा. इससे, यूज़र इंटरफ़ेस (यूआई) क्लाइंट लाइब्रेरी सिर्फ़ उन सिग्नल को इकट्ठा कर पाती है जिनमें ऑब्ज़र्वर की दिलचस्पी है. यह सिस्टम की परफ़ॉर्मेंस के लिहाज़ से बेहतर होता है.
  • registerObserver(): Session क्लास में जोड़ा गया यह तरीका, सेशन का ऐक्सेस रखने वाले किसी भी व्यक्ति को ऑब्ज़र्वर के तौर पर रजिस्टर करने की अनुमति देता है. अगर यूज़र इंटरफ़ेस (यूआई) सेशन खुलने के बाद, ऑब्ज़र्वर को रजिस्टर किया जाता है, तो उसे तुरंत कैश मेमोरी में सेव किया गया AdContainerInfo भेजा जाएगा. अगर उपयोगकर्ता सेशन शुरू होने से पहले रजिस्टर कर लेता है, तो सेशन शुरू होने पर उसे AdContainerInfo भेजा जाएगा.
  • AdContainerInfo: यह एक ऐसी क्लास है जिसमें ऐसे गेट्टर होते हैं जिनकी मदद से, ऑब्ज़र्वर ऊपर दिए गए क्षमताओं सेक्शन में दिए गए डेटा टाइप के लिए, विज्ञापन कंटेनर की रीड-ओनली जानकारी पा सकता है. जहां भी संभव होगा, इन getters की रिटर्न वैल्यू, View और उसके सबक्लास पर मौजूद मौजूदा getters की, पार्सल की जा सकने वाली रिटर्न वैल्यू से मेल खाएगी. अगर विज्ञापन कंटेनर को Jetpack Compose का इस्तेमाल करके बनाया गया है, तो इससे कंटेनर की सेमैटिक प्रॉपर्टी दिखती हैं. इस क्लास का इस्तेमाल, विज्ञापन दिखने से जुड़े MRAID और OMID इवेंट का हिसाब लगाने के लिए किया जा सकता है.
  • SessionObserverotifyAdContainerChanged(): विज्ञापन दिखने की दर में बदलाव होने पर, ऑब्ज़र्वर को सूचना देने के लिए इसका इस्तेमाल किया जाता है. यह AdContainerInfo ऑब्जेक्ट पास करता है. जब भी ऐसे इवेंट का पता चलता है जिनका असर, 'सुविधाएं' सेक्शन में दिए गए डेटा टाइप पर पड़ता है, तब इस फ़ंक्शन को कॉल किया जाता है. ध्यान दें: सेशन के तरीकों के अलावा, इस तरीके को भी कॉल किया जा सकता है. उदाहरण के लिए, विज्ञापन का साइज़ बदलने के लिए SDK टूल से अनुरोध करने के लिए Session.notifyResized() को कॉल किया जाता है. ऐसा होने पर, SessionObserver.notifyAdContainerChanged() को भी कॉल किया जाता है.
  • SessionObserverotifySessionClosed(): इससे ऑब्ज़र्वर को यह सूचना मिलती है कि सेशन बंद हो गया है.

आने वाले समय में होने वाले सुधार

अगर ऐप्लिकेशन के साथ छेड़छाड़ की जाती है, तो ऐप्लिकेशन प्रोसेस में चल रहे किसी भी कोड में बदलाव किया जा सकता है. इनमें privacysandbox.ui.client लाइब्रेरी का कोड भी शामिल है. इसलिए, ऐप्लिकेशन प्रोसेस में चलने वाला सिग्नल इकट्ठा करने वाला कोई भी लॉजिक, ऐप्लिकेशन कोड से छेड़छाड़ का शिकार हो सकता है. यह शर्त, आवेदन की प्रोसेस में काम करने वाले SDK टूल के उस कोड पर भी लागू होती है जिसे Privacy Sandbox के उपलब्ध होने से पहले डिप्लॉय किया गया था. इसलिए, यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी से सिग्नल इकट्ठा करने से, सुरक्षा की स्थिति खराब नहीं होती.

इसके अलावा, SDK टूल के रनटाइम में मौजूद कोड, setTrustedPresentationCallback नाम के प्लैटफ़ॉर्म एपीआई का इस्तेमाल कर सकता है. इससे, विज्ञापन यूज़र इंटरफ़ेस (यूआई) के प्रज़ेंटेशन के बारे में, फ़्रेमवर्क से ज़्यादा बेहतर गारंटी मिल सकती है. setTrustedPresentationCallback सर्फ़ेस लेवल पर काम करता है. साथ ही, विज्ञापन यूज़र इंटरफ़ेस (यूआई) वाले प्लैटफ़ॉर्म के बारे में जानकारी देने में मदद कर सकता है. इसके लिए, विज्ञापन दिखाने के लिए कम से कम थ्रेशोल्ड तय किए जाते हैं. जैसे, दिखने वाले पिक्सल का प्रतिशत, स्क्रीन पर दिखने का समय या स्केल. इस डेटा की पुष्टि, यूज़र इंटरफ़ेस (यूआई) क्लाइंट लाइब्रेरी से मिले विज्ञापन दिखने की संभावना के डेटा के आधार पर की जा सकती है. इस बारे में ऊपर बताया गया है. फ़्रेमवर्क से मिलने वाला डेटा ज़्यादा भरोसेमंद होता है. इसलिए, यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी के ऐसे किसी भी इवेंट को खारिज किया जा सकता है जिसका डेटा, फ़्रेमवर्क के डेटा से मेल न खाता हो. उदाहरण के लिए, अगर setTrustedPresentationCallback के लिए दिए गए लिसनर को इस सूचना के साथ शुरू किया जाता है कि स्क्रीन पर विज्ञापन यूज़र इंटरफ़ेस (यूआई) के कोई पिक्सल नहीं दिखाए जा रहे हैं और क्लाइंट यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी, स्क्रीन पर नॉन-ज़ीरो पिक्सल दिखाती है, तो क्लाइंट यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी का डेटा खारिज किया जा सकता है.

सवाल पूछे जा सकते हैं

  1. आपकी दिलचस्पी किन व्यूबिलिटी सिग्नल में है जिनके बारे में इस जानकारी में नहीं बताया गया है?
  2. मौजूदा प्रस्ताव के मुताबिक, विज्ञापन दिखने से जुड़े आंकड़े को हर 200 मिलीसेकंड में अपडेट किया जाना चाहिए. हालांकि, ऐसा तब ही किया जाएगा, जब यूज़र इंटरफ़ेस (यूआई) में कोई ज़रूरी बदलाव किया गया हो. क्या यह फ़्रीक्वेंसी आपके लिए सही है? अगर नहीं, तो आपको कितने अंतराल में सफ़ाई करवानी है?
  3. क्या आपको setTrustedPresentationCallback से मिली जानकारी का विश्लेषण खुद करना है या जब वह setTrustedPresentationCallback के डेटा से मेल न खाए, तो प्रोवाइडर की यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी को क्लाइंट की यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी से डेटा हटाना है?
  4. विज्ञापन दिखने से जुड़े सिग्नल का इस्तेमाल कैसे किया जाता है? इन सवालों के जवाब देने वाला फ़ीडबैक सबमिट करके, हमें अपने इस्तेमाल के उदाहरणों को समझने में मदद करें.