विज्ञापन नेटवर्क मीडिएशन अडैप्टर डेवलपमेंट

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

विज्ञापन नेटवर्क अडैप्टर आपके विज्ञापन नेटवर्क और Google मोबाइल विज्ञापन मीडिएशन के बीच कम्यूनिकेशन की परत होता है.

बैनर विज्ञापनों को दिखाने के लिए MediationBannerAdapter और इंटरस्टीशियल विज्ञापनों के साथ काम करने के लिए, MediationInterstitialAdapter को लागू करना अडैप्टर की ज़िम्मेदारी है. Google मोबाइल विज्ञापन मीडिएशन को इन इवेंट की सूचना देने के लिए, इसे सही समय पर MediationBannerListener और MediationInterstitialListener में कॉलबैक को भी शुरू करना चाहिए. इसे डेवलपर को भी भेजा जा सकता है.

सैंपल विज्ञापन नेटवर्क कंपनी

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

class SampleAdView {
    public SampleAdView(Context context);
    public void setSize(SampleAdSize size);
    public void setAdUnit(String sampleAdUnit);
    public void setAdListener(SampleAdListener listener);
    public void fetchAd(SampleAdRequest request);
    public void destroy();
}

class SampleAdSize {
    public SampleAdSize(int width, int height);
    public int getWidth();
    public int getHeight();
}

class SampleAdRequest {
    public SampleAdRequest();
    public void setKeywords(Set<String> keywords);
    public void setTestMode(boolean useTesting);
}

class SampleAdListener {
    public void onAdFetchSucceeded();
    public void onAdFetchFailed(SampleErrorCode code);
    public void onAdFullScreen();
    public void onAdClosed();
}

enum SampleErrorCode {
    UNKNOWN,
    BAD_REQUEST,
    NETWORK_ERROR,
    NO_INVENTORY
}

class SampleInterstitial {
    public SampleInterstitial(Context context);
    public void setAdUnit(String sampleAdUnit);
    public void setAdListener(SampleAdListener listener);
    public void fetchAd(SampleAdRequest request);
    public void show();
    public void destroy();
}

इन क्लास के बारे में ज़्यादा जानकारी के लिए, SDK टूल को लागू करने की पूरी जानकारी देखें.

बैनर अडैप्टर को लागू करना

बैनर विज्ञापनों के साथ काम करने वाले अडैप्टर को लागू करने के लिए, MediationBannerAdapter को लागू करने वाली क्लास बनाएं.

public class SampleAdapter implements MediationBannerAdapter {
    @Override
    public void requestBannerAd(
            Context context,
            MediationBannerListener listener,
            Bundle serverParameters,
            AdSize adSize,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {}

    @Override
    public View getBannerView() {}

    @Override
    public void onDestroy() {}

    @Override
    public void onPause() {}

    @Override
    public void onResume() {}
}

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

सर्वर पैरामीटर

पब्लिशर की पहचान करने के लिए, आपकी विज्ञापन नेटवर्क कंपनी को कुछ आइडेंटिफ़ायर की ज़रूरत होती है. उदाहरण के लिए, सैंपल विज्ञापन नेटवर्क को सिर्फ़ एक विज्ञापन यूनिट की ज़रूरत होती है. ये ज़रूरी पैरामीटर, आपको requestBannerAd() में मौजूद serverParameters बंडल में दिए गए हैं. डेवलपमेंट के दौरान, आप यह मान सकते हैं कि बंडल में उन कुंजियों की जानकारी अपने-आप भर जाएगी जिनकी आपको ज़रूरत है:

private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";

@Override
public void requestBannerAd(
        Context context,
        MediationBannerListener listener,
        Bundle serverParameters,
        AdSize adSize,
        MediationAdRequest mediationAdRequest,
        Bundle mediationExtras) {
    String adUnit = serverParameters.getString(SAMPLE_AD_UNIT_KEY);
    ...
}

AdMob आपको एक सवालों की सूची भेजेगा. इस सवाल में यह पूछा जाएगा कि विज्ञापनों का अनुरोध करने और उन्हें दिखाने के लिए, पब्लिशर से कौनसे सर्वर पैरामीटर की ज़रूरत है. AdMob उस इनपुट का इस्तेमाल करके, AdMob यूज़र इंटरफ़ेस (यूआई) में आपके नेटवर्क को कॉन्फ़िगर करेगा. नीचे दिया गया स्क्रीनशॉट दिखाता है कि Millennial Media के लिए APID और InMobi के लिए ऐप्लिकेशन आईडी ज़रूरी है.

आपके अडैप्टर को तुरंत चालू करते समय, AdMob इस जानकारी का इस्तेमाल serverParameters बंडल को भरने के लिए करेगा.

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

टारगेटिंग (विज्ञापन के लिए सही दर्शक चुनना) के अन्य पैरामीटर

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

मीडिएशन की सुविधाएं

अगर आपकी विज्ञापन नेटवर्क कंपनी ऐसी जानकारी को टारगेट करने की सुविधा देती है जो MediationAdRequest में नहीं दी गई है, तो ऐप्लिकेशन डेवलपर खास तौर पर आपके नेटवर्क को mediationExtras का बंडल भेज सकते हैं. मीडिएशन से मीडिएशन की अतिरिक्त सुविधाओं को पास करने के तरीके का उदाहरण मिलता है.

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

public static final class BundleBuilder {
    private int income;

    public BundleBuilder setIncome(int income) {
        this.income = income;
        return this;
    }

    public Bundle build() {
        Bundle bundle = new Bundle();
        bundle.putInt("income", income);
        return bundle;
    }
}

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

Bundle sampleAdapterBundle =
        new SampleAdapter.BundleBuilder().setIncome(100000).build();

requestBannerAd()

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

अडैप्टर के इंस्टैंशिएट होने के तुरंत बाद, requestBannerAd() तरीके को कॉल किया जाता है. यहां आपको अपना विज्ञापन व्यू बनाना चाहिए और बैनर विज्ञापन के लिए अनुरोध करना चाहिए.

सैंपल विज्ञापन नेटवर्क के लिए requestBannerAd() लागू करने पर यह कुछ ऐसा दिखेगा:

public class SampleAdMobAdapter implements MediationBannerAdapter {
    private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";
    private SampleAdView sampleAdView;

    @Override
    public void requestBannerAd(
            Context context, // May be an application context.
            MediationBannerListener listener,
            Bundle serverParameters,
            AdSize adSize,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {
        sampleAdView = new SampleAdView(context);

        if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
            sampleAdView.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
        } else {
            listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
        }

        sampleAdView.setSize(
                new SampleAdSize(adSize.getWidth(),adSize.getHeight()));

        sampleAdView.setAdListener(
                new SampleBannerEventForwarder(listener, this));

        SampleAdRequest request = new SampleAdRequest();
        request.setTestMode(mediationAdRequest.isTesting());
        request.setKeywords(mediationAdRequest.getKeywords());
        sampleAdView.fetchAd(request);
    }
}

यह न मानें कि कॉन्टेक्स्ट पैरामीटर, Activity टाइप का है. पब्लिशर लागू करने के आधार पर, Google मोबाइल विज्ञापन मीडिएशन आपके अडैप्टर पर किसी ऐप्लिकेशन का संदर्भ भेज सकता है. अगर आपका अडैप्टर किसी ऐप्लिकेशन के कॉन्टेक्स्ट को हैंडल नहीं कर सकता, तो हमारा सुझाव है कि गड़बड़ी कोड AdRequest.ERROR_CODE_INVALID_REQUEST के साथ onAdFailedToLoad() को शुरू करें.

MediationBannerListener कॉलबैक

आपको requestBannerAd() में MediationBannerListener सेव करना होगा, ताकि आप विज्ञापन इवेंट को वापस Google मोबाइल विज्ञापन मीडिएशन पर फ़ॉरवर्ड कर सकें. हर कॉलबैक को विज्ञापन की लाइफ़साइकल में सही समय पर शुरू किया जाना चाहिए:

तरीका कॉल कब करें
onAdLoaded() बैनर अनुरोध पूरा हो गया.
onAdFailedToLoad() बैनर नहीं भेजा जा सका.
onAdClicked() बैनर पर क्लिक किया गया था.
onAdOpened() बैनर, फ़ुल स्क्रीन व्यू को रेंडर कर रहा है.
onAdClosed() बैनर पर क्लिक करने के बाद, उपयोगकर्ता ऐप्लिकेशन पर वापस आता है.
onAdLeftApplication() इस बैनर की वजह से, उपयोगकर्ता ऐप्लिकेशन से बाहर निकल जाता है.

सैंपल विज्ञापन नेटवर्क अडैप्टर, इवेंट फ़ॉरवर्डिंग को मैनेज करने के लिए SampleBannerEventForwarder नाम की क्लास बनाता है:

public class SampleBannerEventForwarder extends SampleAdListener {
    private MediationBannerListener mediationListener;
    private SampleAdapter adapter;

    public SampleBannerEventForwarder(
            MediationBannerListener listener, SampleAdapter adapter) {
        this.mediationListener = listener;
        this.adapter = adapter;
    }

    @Override
    public void onAdFetchSucceeded() {
        mediationListener.onAdLoaded(adapter);
    }

    @Override
    public void onAdFetchFailed(SampleErrorCode errorCode) {
        switch(errorCode) {
            case UNKNOWN:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INTERNAL_ERROR);
                break;
            case BAD_REQUEST:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INVALID_REQUEST);
                break;
            case NETWORK_ERROR:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NETWORK_ERROR);
                break;
            case NO_INVENTORY:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NO_FILL);
                break;
        }
    }

    @Override
    public void onAdFullScreen() {
        mediationListener.onAdClicked(adapter);
        mediationListener.onAdOpened(adapter);
        mediationListener.onAdLeftApplication(adapter);
    }

    @Override
    public void onAdClosed() {
        mediationListener.onAdClosed(adapter);
    }
}

ध्यान दें कि सैंपल विज्ञापन नेटवर्क अडैप्टर ने एक ही कॉलबैक में, onAdClicked, onAdOpened, और onAdLeftApplication को कैसे भेजा. भले ही आपके नेटवर्क के लिए कॉलबैक, Google Mobile Ads के लिए ज़रूरी कॉलबैक से पूरी तरह मेल न खाते हों, लेकिन यह अडैप्टर की ज़िम्मेदारी है कि आप सही मैपिंग करें.

getBannerView

MediationBannerListener.onAdLoaded() को कॉल करने के बाद, मीडिएशन की सुविधा getBannerView() को कॉल करेगी, ताकि आपकी विज्ञापन नेटवर्क कंपनी का बैनर व्यू स्क्रीन पर दिखाया जा सके. इसके लिए, requestBannerAd() में बनाया गया बैनर व्यू फिर से दिखाएं:

@Override
public View getBannerView() {
    return sampleAdView;
}

गतिविधि के लाइफ़साइकल इवेंट

अगर ऐप्लिकेशन डेवलपर, किसी इवेंट की मीडिएशन की सूचना देता है, तो मीडिएशन की सुविधा onPause() और onResume() गतिविधि के अडैप्टर को सूचना देगी. बैनर को रोकना और फिर से शुरू करना ज़रूरी है. इसके लिए:

@Override
public void onPause() {
}

@Override
public void onResume() {
}

सैंपल विज्ञापन नेटवर्क में, कॉल को रोकने या फिर से शुरू करने की सुविधा शामिल नहीं होती. इसलिए, विज्ञापन लागू करने के तरीके में कोई जानकारी नहीं होती.

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

@Override
public void onDestroy() {
    if (sampleAdView != null) {
        sampleAdView.destroy();
    }
}

स्मार्ट बैनर

Google Mobile Ads SDK एक स्मार्ट बैनर विज्ञापन साइज़ के साथ काम करता है. इसकी पूरी चौड़ाई और लंबाई, डिवाइस के साइज़ के हिसाब से अलग-अलग होती है.

स्मार्ट बैनर के विज्ञापन का साइज़ सही तरीके से पता करने के लिए, आपके अडैप्टर को चौड़ाई पाने के लिए adSize.getWidthInPixels(context) और ऊंचाई पाने के लिए adSize.getHeight() के बजाय adSize.getHeightInPixels(context) का इस्तेमाल करना चाहिए. इसके बाद, इसे डिवाइस की डेंसिटी से भाग दिया जाना चाहिए:

int widthInPixels = adSize.getWidthInPixels(context);
int heightInPixels = adSize.getHeightInPixels(context);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
int widthInDp = Math.round(widthInPixels / displayMetrics.density);
int heightInDp = Math.round(heightInPixels / displayMetrics.density);

इसके बाद, विज्ञापन अनुरोध करते समय, साइज़ के तौर पर widthInDp और heightInDp का इस्तेमाल किया जा सकता है.

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

इंटरस्टीशियल अडैप्टर का इस्तेमाल करना

पेज पर अचानक दिखने वाले विज्ञापनों के लिए अडैप्टर लागू करना, बैनर विज्ञापनों जैसा ही होता है. पेज पर अचानक दिखने वाले विज्ञापनों के साथ काम करने वाले अडैप्टर को लागू करने के लिए, एक ऐसी क्लास बनाएं जो MediationInterstitialAdapter को लागू करती हो:

public class SampleAdapter implements MediationInterstitialAdapter {
    @Override
    public void requestInterstitialAd(
            Context context,
            MediationInterstitialListener listener,
            Bundle serverParameters,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {}

    @Override
    public View showInterstitial() {}

    @Override
    public void onDestroy() {}

    @Override
    public void onPause() {}

    @Override
    public void onResume() {}
}

अगर आपका अडैप्टर बैनर के साथ भी काम करता है, तो दोनों इंटरफ़ेस को लागू करने के लिए उसी अडैप्टर क्लास का इस्तेमाल किया जा सकता है.

MediationInterstitialAdapter लागू करने से पहले, सर्वर पैरामीटर और मीडिएशन की अन्य सुविधाओं के बारे में अच्छे से जान लें.

सर्वर पैरामीटर (पेज पर अचानक दिखने वाले)

बैनर सर्वर पैरामीटर सेक्शन देखें.

अतिरिक्त टारगेटिंग पैरामीटर (पेज पर अचानक दिखने वाले)

बैनर के लिए टारगेटिंग के अन्य पैरामीटर सेक्शन देखें.

मीडिएशन की अतिरिक्त सुविधाएं (पेज पर अचानक दिखने वाले विज्ञापन)

बैनर मीडिएशन के अन्य टूल सेक्शन देखें.

requestInterstitialAd

अडैप्टर के इंस्टैंशिएट होने के तुरंत बाद, requestInterstitialAd() तरीके को कॉल किया जाता है. यहां आपको पेज पर अचानक दिखने वाला विज्ञापन बनाना चाहिए और पेज पर अचानक दिखने वाले विज्ञापन के लिए अनुरोध करना चाहिए.

सैंपल विज्ञापन नेटवर्क के लिए requestInterstitialAd() लागू करने पर कुछ ऐसा दिखेगा:

public class SampleAdapter implements MediationBannerAdapter {
    private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";

    private SampleInterstitial sampleInterstitial;

    @Override
    public void requestInterstitialAd(
            Context context, // May be an application context.
            MediationInterstitialListener listener,
            Bundle serverParameters,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {
        sampleInterstitial = new SampleInterstitial(context);

        if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
            sampleInterstitial.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
        } else {
            listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
        }

        sampleInterstitial.setAdListener(
                new SampleInterstitialEventForwarder(listener, this));

        // Make an ad request.
        SampleAdRequest request = new SampleAdRequest();
        request.setTestMode(mediationAdRequest.isTesting());
        request.setKeywords(mediationAdRequest.getKeywords());
        sampleInterstitial.fetchAd(request);
    }
}

यह न सोचें कि कॉन्टेक्स्ट पैरामीटर, ऐक्टिविटी टाइप की है! Google मोबाइल विज्ञापन मीडिएशन, ऐप्लिकेशन डेवलपर के पास किए गए संदर्भ को आगे भेजता है. इस वजह से, ऐप्लिकेशन के किसी कॉन्टेक्स्ट को पास किया जा सकता है. अगर आपका अडैप्टर किसी ऐप्लिकेशन के कॉन्टेक्स्ट को हैंडल नहीं कर सकता, तो हमारा सुझाव है कि गड़बड़ी कोड AdRequest.ERROR_CODE_INVALID_REQUEST के साथ onAdFailedToLoad को शुरू करें.

मीडिएशन मीडिएशन (पेज पर अचानक दिखने वाले विज्ञापन) कॉलबैक

आपको requestInterstitialAd में MediationInterstitialListener सेव करना होगा, ताकि आप विज्ञापन इवेंट को वापस Google मोबाइल विज्ञापन मीडिएशन में फ़ॉरवर्ड कर सकें. विज्ञापन की लाइफ़साइकल में, हर कॉलबैक को सही समय पर शुरू किया जाना चाहिए:

तरीका कॉल कब करें
onAdLoaded पेज पर अचानक दिखने वाला अनुरोध पूरा हो गया.
onAdFailedToLoad पेज पर अचानक दिखने वाला अनुरोध पूरा नहीं हो सका.
onAdOpened पेज पर अचानक दिखने वाला विज्ञापन दिखाया जा रहा है.
onAdClosed पेज पर अचानक दिखने वाला विज्ञापन बंद है.
onAdLeftApplication पेज पर अचानक दिखने वाले विज्ञापन की वजह से, उपयोगकर्ता ऐप्लिकेशन से बाहर निकल जाता है.

showInterstitial

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

showInterstitial() को लागू करना बहुत आसान है. बस अपना पेज पर अचानक दिखने वाला ऑब्जेक्ट दिखाएं:

@Override
public void showInterstitial() {
    sampleInterstitial.show();
}

गतिविधि के लाइफ़साइकल इवेंट (पेज पर अचानक दिखने वाले विज्ञापन)

बैनर गतिविधि के लाइफ़साइकल इवेंट सेक्शन देखें.

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

अक्सर पूछे जाने वाले सवाल

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

अगर आपके अडैप्टर में सिर्फ़ बैनर काम करते हैं, तो आपको सिर्फ़ MediationBannerAdapter इंटरफ़ेस लागू करना होगा. अगर आपके अडैप्टर में सिर्फ़ पेज पर अचानक दिखने वाले विज्ञापन हैं, तो आपको सिर्फ़ MediationInterstitialAdapter इंटरफ़ेस लागू करना होगा.