फ़ुल-स्क्रीन विज्ञापनों के लिए गतिविधि से जुड़ी सहायता

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

एसडीके रनटाइम एनवायरमेंट में लोड किए गए एसडीके, अपने मेनिफ़ेस्ट में सीधे तौर पर <activity> टैग तय नहीं कर सकते या अपनी गतिविधियां शुरू नहीं कर सकते. इसके बजाय, एक नई इंटेंट ऐक्शन सुविधा, START_SANDBOXED_ACTIVITY, लॉन्च की गई है.

एसडीके टूल को भी इस कार्रवाई के साथ इंटेंट लॉन्च करने से रोका गया है. हालांकि, एसडीके टूल क्लाइंट ऐप्लिकेशन से इस इंटेंट को शुरू करने का अनुरोध कर सकते हैं. इसके बाद, सिस्टम प्लैटफ़ॉर्म के हिसाब से तय की गई गतिविधि बनाता है और उसे एसडीके को भेजता है. यह गतिविधि, एसडीके की तरह ही प्रोसेस में चलेगी.

इसके बाद, SDK टूल इस ऐक्टिविटी का इस्तेमाल करके, फ़ुल स्क्रीन वाले विज्ञापन को लागू और मैनेज कर सकता है.

प्लैटफ़ॉर्म की ओर से दी गई गतिविधि, एक स्टैंडर्ड android.app.Activity है. इसे क्लाइंट ऐप्लिकेशन के टास्क के तौर पर लॉन्च किया गया है.

एसडीके रनटाइम पर गतिविधि बनाना

गतिविधियां बनाने के लिए, आपके पास दो मुख्य तरीके हैं: Jetpack की Activity libraries का इस्तेमाल करना या सीधे Platform APIs के साथ इंटरैक्ट करना.

हमारा सुझाव है कि आप गतिविधि लाइब्रेरी का इस्तेमाल करें. ये लाइब्रेरी, गतिविधि बनाने की प्रोसेस को आसान बनाती हैं. ऐसा इसलिए, क्योंकि ये जटिलता को कम करती हैं.

गतिविधि लाइब्रेरी

गतिविधि की लाइब्रेरी के कई फ़ायदे हैं:

  • यह कुकी, गतिविधि हैंडलर रजिस्टर करने और उनके आइडेंटिफ़ायर को क्लाइंट ऐप्लिकेशन के साथ शेयर करने की अंदरूनी जानकारी को ऐब्स्ट्रैक्ट करती है.
  • इससे ऐप्लिकेशन डेवलपर को यह तय करने का ज़्यादा कंट्रोल मिलता है कि SDK टूल, उनके ऐप्लिकेशन में Activities कैसे बनाएं. इसके लिए, डेवलपर को कुछ शर्तें (प्रेडिकेट) सेट करने की अनुमति मिलती है.
  • एसडीके के लिए, एपीआई तय करने का एक ऐसा तरीका बनाना जो गतिविधियों को लॉन्च करता हो.

ऐक्टिविटी लाइब्रेरी तीन तरह की होती हैं: कोर, क्लाइंट, और प्रोवाइडर.

  • कोर लाइब्रेरी, क्लाइंट ऐप्लिकेशन और प्रोवाइडर लाइब्रेरी के लिए इंटरफ़ेस उपलब्ध कराती है.
  • provider लाइब्रेरी, एसडीके के लिए एपीआई उपलब्ध कराती है, ताकि वे गतिविधियां लॉन्च कर सकें.
  • क्लाइंट लाइब्रेरी, क्लाइंट ऐप्लिकेशन के लिए एपीआई उपलब्ध कराती है. इससे ऐप्लिकेशन, गतिविधि लॉन्चर बना सकते हैं. एसडीके, इन लॉन्चर का इस्तेमाल करके ऐप्लिकेशन से गतिविधियां लॉन्च करने का अनुरोध कर सकते हैं.

इन लाइब्रेरी में ये एपीआई शामिल हैं:

  • SdkActivityLauncher: ऐक्टिविटी लॉन्चर की मदद से, एसडीके, क्लाइंट ऐप्लिकेशन से ऐक्टिविटी लॉन्च कर सकते हैं. क्लाइंट ऐप्लिकेशन को एक लॉन्चर बनाना चाहिए और उसे एसडीके के उन एपीआई को पैरामीटर के तौर पर पास करना चाहिए जो ऐक्टिविटी शुरू करते हैं.
  • <T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): यह एक एक्सटेंशन फ़ंक्शन है. क्लाइंट ऐप्लिकेशन, लॉन्चर बनाने के लिए इसे अपनी गतिविधियों से कॉल कर सकता है.
  • SdkActivityLauncher.launchSdkActivity(IBinder): यह एक ऐसा तरीका है जिसका इस्तेमाल SDK टूल, ऐप्लिकेशन से गतिविधियां लॉन्च करने का अनुरोध करने के लिए करता है.

गतिविधि लाइब्रेरी की मदद से गतिविधियां लॉन्च करने का तरीका यहां दिया गया है:

  1. SDK टूल, SdkActivityLauncher टाइप का पैरामीटर उन सभी एपीआई में जोड़ता है जो गतिविधियां शुरू करेंगे.
  2. क्लाइंट ऐप्लिकेशन, अपनी किसी गतिविधि पर createSdkActivityLauncher को कॉल करता है, ताकि एक ऐसा लॉन्चर बनाया जा सके जिसे एपीआई कॉल पर एसडीके को पास किया जा सके.
  3. एसडीके, SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) को कॉल करता है और आइडेंटिफ़ायर टोकन वापस पाता है.
  4. एसडीके, गतिविधि लॉन्च करने के लिए launchSdkActivity को कॉल करता है.

यहां दिया गया डायग्राम, गतिविधि की लाइब्रेरी इस्तेमाल करने पर होने वाले फ़्लो को दिखाता है.

गतिविधि लाइब्रेरी का सीक्वेंस डायग्राम
गतिविधि लाइब्रेरी का इस्तेमाल करके गतिविधि शुरू करने का फ़्लो दिखाने वाला क्रमवार डायग्राम.

प्लैटफ़ॉर्म एपीआई

यह प्लैटफ़ॉर्म, एसडीके रनटाइम में सैंडबॉक्स की गई गतिविधियों को बनाने और मैनेज करने के लिए, ये एपीआई उपलब्ध कराता है:

  • SdkSandboxActivityHandler: Activity Handler का इस्तेमाल, SDK टूल को यह सूचना देने के लिए किया जाता है कि कोई गतिविधि बनाई गई है. साथ ही, इसे SDK टूल से रजिस्टर किया जाता है.
  • गतिविधि हैंडलर रजिस्टर करने में मदद करने के लिए, एसडीके SdkSandboxController में दिए गए इन तरीकों का इस्तेमाल कर सकता है:
  • SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): क्लाइंट ऐप्लिकेशन से कॉल किया गया यह तरीका, एसडीके के लिए गतिविधियां बनाने की प्रोसेस शुरू करता है. क्लाइंट ऐप्लिकेशन को पैरामीटर के तौर पर, चुनी गई शुरुआती गतिविधि और SDK टूल के गतिविधि हैंडलर आइडेंटिफ़ायर को पास करना होगा.

Platform API का इस्तेमाल करके कोई गतिविधि शुरू करने के लिए, एसडीके को इस फ़्लो का पालन करना होगा:

  1. एसडीके, दिए गए एपीआई का इस्तेमाल करके गतिविधि हैंडलर को रजिस्टर करता है और एक आइडेंटिफ़ायर हासिल करता है.
  2. एसडीके, इस आइडेंटिफ़ायर को अपने क्लाइंट ऐप्लिकेशन के साथ शेयर करता है.
  3. क्लाइंट ऐप्लिकेशन, SDK Runtime में गतिविधि शुरू करने के लिए, प्लैटफ़ॉर्म एपीआई startSdkSandboxActivity(Activity, IBinder) के साथ इस तरीके को कॉल करता है. इसमें पैरामीटर के तौर पर, इस नई गतिविधि के लिए चुनी गई शुरुआती गतिविधि और गतिविधि हैंडलर का आइडेंटिफ़ायर पास किया जाता है.
  4. प्लेटफ़ॉर्म, गतिविधि शुरू करता है और गतिविधि हैंडलर (SdkSandboxActivityHandler.onActivityCreated(Activity)) में कॉलबैक के ज़रिए SDK को सूचना देता है.
  5. SDK, इस गतिविधि का इस्तेमाल करके विज्ञापन दिखाता है.

Platform API का इस्तेमाल करने पर, एसडीके की यह ज़िम्मेदारी होती है कि वह सही समय पर अपने एपीआई के ज़रिए, क्लाइंट ऐप्लिकेशन के साथ SdkSandboxActivityHandler का आइडेंटिफ़ायर शेयर करे. साथ ही, क्लाइंट ऐप्लिकेशन को यह बताए कि इसका इस्तेमाल कैसे किया जाए.

यहां दिए गए फ़्लो डायग्राम में, उदाहरण के तौर पर दिखाए गए एसडीके में launchActivity(AppCallback) नाम का एक तरीका है. इसमें एक कॉलबैक की ज़रूरत होती है. इसे एसडीके के एपीआई के हिस्से के तौर पर तय किया जाता है. इस कॉलबैक का इस्तेमाल, एसडीके करता है. इससे वह क्लाइंट ऐप्लिकेशन के साथ गतिविधि हैंडलर (SdkSandboxActivityHandler) का आइडेंटिफ़ायर शेयर करता है.

प्लैटफ़ॉर्म एपीआई का सीक्वेंस डायग्राम
प्लैटफ़ॉर्म एपीआई का इस्तेमाल करके गतिविधि शुरू करने का फ़्लो दिखाने वाला सीक्वेंस डायग्राम.

विज्ञापन दिखने से जुड़े आंकड़े

एसडीके टूल के रनटाइम में, क्लाइंट ऐप्लिकेशन की व्यू हैरारकी में इंटिग्रेट किए गए विज्ञापन, साइड चैनल का इस्तेमाल करते हैं. ऐसा, एसडीके टूल की प्रोसेस से एसडीके व्यू को क्लाइंट ऐप्लिकेशन की प्रोसेस में रेंडर करने के लिए किया जाता है.

एसडीके, व्यू एपीआई का इस्तेमाल नहीं कर सकता. ऐसा इसलिए, क्योंकि एसडीके रनटाइम के बाहर, इन एपीआई का इस्तेमाल यह पता लगाने के लिए किया जाता है कि विज्ञापन उपयोगकर्ता को दिख रहा है या नहीं. इसकी वजह यह है कि विज्ञापन व्यू, ऐप्लिकेशन की विंडो से अटैच नहीं होता (विज्ञापन दिखने की संभावना).

इसके उलट, प्लैटफ़ॉर्म से उपलब्ध कराई गई गतिविधि, एसडीके टूल के रनटाइम प्रोसेस में नेटिव तौर पर चलती है. इससे साइड चैनल की ज़रूरत नहीं होती. साथ ही, एसडीके टूल, स्टैंडर्ड Android Activity और View एपीआई का इस्तेमाल कर सकते हैं.

इन अलग-अलग तरीकों की वजह से, हम इंटरफ़ेस को एक जैसा बनाने की कोशिश कर रहे हैं. इससे विज्ञापन लोड होने के कॉन्टेक्स्ट के बावजूद, व्यूएबिलिटी सिग्नल को वापस पाया जा सकेगा.

जीवनचक्र

SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) के ज़रिए एसडीके को पास किया गया ActivityHolder, LifecycleOwner को लागू करता है. इसका इस्तेमाल Lifecycle.Event के बारे में जानने के लिए किया जा सकता है.

पिछले पेज पर जाने की सुविधा

यह तरीका ActivityHolder.getOnBackPressedDispatcher() OnBackPressedDispatcher को दिखाता है. इसका इस्तेमाल, बैक नेविगेशन को हैंडल करने के लिए OnBackPressedCallback इंस्टेंस रजिस्टर करने के लिए किया जा सकता है.