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

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

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

क्षमताएं

इस डिज़ाइन का मकसद, विज्ञापन दिखाने वाले एसडीके या मेज़रमेंट पार्टनर को विज्ञापन दिखने से जुड़े इस डेटा को कैलकुलेट करने में मदद करना है. हालांकि, यहां दिए गए नाम अस्थायी हैं और इनमें बदलाव हो सकता है:

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

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

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

डिज़ाइन का सुझाव

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

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

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

एपीआई

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

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

आने वाले समय में उपलब्ध होने वाली बेहतर सुविधाएं

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

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

ऐसे सवाल जिन पर फ़ैसला लेना बाकी है

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