नेटिव विज्ञापन

प्लैटफ़ॉर्म चुनें: Android iOS Flutter Unity

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

जब कोई नेटिव विज्ञापन लोड होता है, तो आपके ऐप्लिकेशन को एक विज्ञापन ऑब्जेक्ट मिलता है. इसमें उसकी ऐसेट शामिल होती हैं. इसके बाद, Google Mobile Ads SDK के बजाय, ऐप्लिकेशन इन ऐसेट को दिखाने के लिए ज़िम्मेदार होता है.

नेटिव विज्ञापन को सही तरीके से लागू करने के लिए, आम तौर पर दो काम करने होते हैं: एसडीके का इस्तेमाल करके विज्ञापन लोड करना और फिर अपने ऐप्लिकेशन में विज्ञापन का कॉन्टेंट दिखाना.

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

ग्राहक की सफलता की कुछ कहानियां भी देखी जा सकती हैं: केस स्टडी 1, केस स्टडी 2.

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

हमेशा टेस्ट विज्ञापनों का इस्तेमाल करके टेस्ट करें

अपने ऐप्लिकेशन बनाते और उनकी टेस्टिंग करते समय, पक्का करें कि आपने लाइव और प्रोडक्शन विज्ञापनों के बजाय, टेस्ट विज्ञापनों का इस्तेमाल किया हो.

टेस्ट विज्ञापनों को लोड करने का सबसे आसान तरीका यह है कि Android पर नेटिव विज्ञापनों के लिए, हमारी टेस्ट विज्ञापन यूनिट आईडी का इस्तेमाल करें:

ca-app-pub-3940256099942544/2247696110

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

Google Mobile Ads SDK के टेस्ट विज्ञापन कैसे काम करते हैं, इस बारे में ज़्यादा जानने के लिए, टेस्ट विज्ञापन लेख पढ़ें.

विज्ञापन लोड करना

नेटिव विज्ञापनों को AdLoader क्लास के साथ लोड किया जाता है. इसमें Builder क्लास होती है, ताकि विज्ञापन बनाते समय उसे कस्टमाइज़ किया जा सके. ऐप्लिकेशन बनाते समय, उसमें लिसनर जोड़ने से यह तय किया जाता है कि ऐप्लिकेशन किस तरह के नेटिव विज्ञापन पाने के लिए तैयार है.AdLoader इसके बाद, AdLoader सिर्फ़ उन टाइप के लिए अनुरोध करता है.

AdLoader बनाना

यहां दिए गए कोड से पता चलता है कि नेटिव विज्ञापन लोड करने वाला AdLoader कैसे बनाया जाता है:

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

forNativeAd() मेथड, NativeAd फ़ॉर्मैट के लिए AdLoader तैयार करता है. जब कोई विज्ञापन लोड हो जाता है, तब लिसनर ऑब्जेक्ट के onNativeAdLoaded() मेथड को कॉल किया जाता है.

AdLoader की मदद से AdListener सेट अप करना (ज़रूरी नहीं)

AdLoader बनाते समय, withAdListener फ़ंक्शन, लोडर के लिए AdListener सेट करता है. यह तरीका, AdListener को अपने पैरामीटर के तौर पर लेता है. जब विज्ञापन के लाइफ़साइकल इवेंट होते हैं, तब AdListener से कॉलबैक मिलते हैं:AdLoader

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

विज्ञापन जोड़ने का अनुरोध करें

AdLoader बनाने के बाद, अब इसका इस्तेमाल करके विज्ञापनों का अनुरोध किया जा सकता है. इसके लिए, दो तरीके उपलब्ध हैं: loadAd() और loadAds().

loadAd()

इस तरीके से, एक विज्ञापन का अनुरोध भेजा जाता है.

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

loadAds()

इस तरीके से, एक साथ कई विज्ञापनों (पांच तक) के लिए अनुरोध भेजा जाता है:

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

दोनों तरीकों में, AdRequest ऑब्जेक्ट को पहले पैरामीटर के तौर पर लिया जाता है. यह वही AdRequest क्लास है जिसका इस्तेमाल बैनर और इंटरस्टीशियल विज्ञापन करते हैं. साथ ही, AdRequest क्लास के तरीकों का इस्तेमाल करके, टारगेटिंग की जानकारी जोड़ी जा सकती है. ऐसा ही अन्य विज्ञापन फ़ॉर्मैट के साथ भी किया जा सकता है.

एक से ज़्यादा विज्ञापन लोड करना (ज़रूरी नहीं)

loadAds() तरीके में एक और पैरामीटर होता है: SDK को अनुरोध के लिए कितने विज्ञापन लोड करने की कोशिश करनी चाहिए. यह संख्या पांच तक सीमित है. साथ ही, यह ज़रूरी नहीं है कि एसडीके, अनुरोध किए गए विज्ञापनों की सटीक संख्या दिखाए.

Google Ads से मिले सभी विज्ञापन एक-दूसरे से अलग होंगे. हालांकि, आरक्षित इन्वेंट्री या तीसरे पक्ष के खरीदारों के विज्ञापन यूनीक होने की गारंटी नहीं है.

अगर मीडिएशन का इस्तेमाल किया जा रहा है, तो loadAds() तरीके का इस्तेमाल न करें. ऐसा इसलिए, क्योंकि फ़िलहाल मीडिएशन के लिए कॉन्फ़िगर किए गए विज्ञापन यूनिट आईडी के लिए, एक साथ कई नेटिव विज्ञापनों के अनुरोध काम नहीं करते.

कॉलबैक

loadAd() को कॉल करने के बाद, पहले से तय किए गए लिसनर के तरीकों को एक ही बार कॉल किया जाता है. ऐसा नेटिव विज्ञापन ऑब्जेक्ट डिलीवर करने या गड़बड़ी की सूचना देने के लिए किया जाता है.

loadAds() को कॉल करने के बाद, इस तरह के कई कॉलबैक किए जाते हैं. इनकी संख्या कम से कम एक होती है और अनुरोध किए गए विज्ञापनों की संख्या से ज़्यादा नहीं होती. एक से ज़्यादा विज्ञापनों का अनुरोध करने वाले ऐप्लिकेशन को, अपने कॉलबैक लागू करने के दौरान AdLoader.isLoading() को कॉल करना चाहिए. इससे यह पता चलेगा कि विज्ञापन लोड करने की प्रोसेस पूरी हो गई है या नहीं.

यहां एक उदाहरण दिया गया है, जिसमें onNativeAdLoaded() कॉलबैक में isLoading() की जांच करने का तरीका बताया गया है:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

संसाधन रिलीज़ करना

पक्का करें कि आपने लोड किए गए नेटिव विज्ञापनों पर, destroy() तरीके का इस्तेमाल किया हो. इससे इस्तेमाल किए गए रिसॉर्स रिलीज़ हो जाते हैं और मेमोरी लीक नहीं होती.

पक्का करें कि आपकी ऐक्टिविटी के onDestroy() तरीके में, NativeAd के सभी रेफ़रंस मिटा दिए गए हों.

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

एक और ज़रूरी जांच यह है कि गतिविधि बंद हो गई है या नहीं. अगर ऐसा है, तो दिखाए गए विज्ञापन पर destroy() को कॉल करें और तुरंत वापस आएं:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

सबसे सही तरीके

विज्ञापन लोड करते समय, इन नियमों का पालन करें.

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

  • विज्ञापनों को पहले से कैश मेमोरी में सेव करते समय, अपनी कैश मेमोरी मिटाएं और एक घंटे बाद फिर से लोड करें.

  • पहले अनुरोध के लोड होने तक, AdLoader पर loadAd() या loadAds() को कॉल न करें.
  • नेटिव विज्ञापन की कैश मेमोरी को सिर्फ़ ज़रूरी डेटा तक सीमित रखें. उदाहरण के लिए, प्रीकैशिंग करते समय, सिर्फ़ उन विज्ञापनों को कैश मेमोरी में सेव करें जो स्क्रीन पर तुरंत दिखते हैं. नेटिव विज्ञापनों के लिए ज़्यादा मेमोरी की ज़रूरत होती है. साथ ही, नेटिव विज्ञापनों को मिटाए बिना कैश मेमोरी में सेव करने से, बहुत ज़्यादा मेमोरी का इस्तेमाल होता है.

  • जब नेटिव विज्ञापनों का इस्तेमाल न हो रहा हो, तब उन्हें डिस्ट्रॉय कर दें.

वीडियो विज्ञापनों के लिए हार्डवेयर की मदद से रेंडरिंग की सुविधा

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

हार्डवेयर ऐक्सेलरेटेड रेंडरिंग की सुविधा डिफ़ॉल्ट रूप से चालू होती है. हालांकि, कुछ ऐप्लिकेशन इसे बंद कर सकते हैं. अगर यह समस्या आपके ऐप्लिकेशन पर लागू होती है, तो हमारा सुझाव है कि विज्ञापन दिखाने वाली Activity क्लास के लिए, हार्डवेयर ऐक्सेलरेट करने की सुविधा चालू करें.

हार्डवेयर से तेज़ी लाने की सुविधा चालू करना

अगर हार्डवेयर ऐक्सलरेशन को ग्लोबल लेवल पर चालू करने पर आपका ऐप्लिकेशन ठीक से काम नहीं करता है, तो इसे अलग-अलग गतिविधियों के लिए भी कंट्रोल किया जा सकता है. हार्डवेयर से तेज़ी लाने की सुविधा को चालू या बंद करने के लिए, अपने AndroidManifest.xml में मौजूद <application> और <activity> एलिमेंट के लिए, android:hardwareAccelerated एट्रिब्यूट का इस्तेमाल करें. यहां दिए गए उदाहरण में, पूरे ऐप्लिकेशन के लिए हार्डवेयर ऐक्सेलरेटेड रेंडरिंग की सुविधा चालू की गई है. हालांकि, एक गतिविधि के लिए इसे बंद किया गया है:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

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

विज्ञापन दिखाना

विज्ञापन लोड हो जाने के बाद, आपको सिर्फ़ उसे उपयोगकर्ताओं को दिखाना होता है. इसके बारे में जानने के लिए, हमारी नेटिव ऐडवांस गाइड देखें.