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

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

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

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

  • Xcode 15.3 या उसके बाद का वर्शन
  • 8.0 या उससे ज़्यादा का डिप्लॉयमेंट टारगेट
  • Google Mobile Ads iOS SDK डाउनलोड के लिए, मीडिएशन अडैप्टर फ़ोल्डर से मिले अतिरिक्त हेडर

मीडिएशन अडैप्टर बनाने के लिए, आपकी विज्ञापन नेटवर्क कंपनी का Google के साथ काम करने वाला संबंध होना ज़रूरी है.

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

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

@interface SampleBanner : UILabel

@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleBannerAdDelegate> delegate;
- (void)fetchAd:(SampleAdRequest *)request;

@end

typedef NS_ENUM(NSInteger, SampleErrorCode) {
  SampleErrorCodeBadRequest = 0,
  SampleErrorCodeUnknown = 1,
  SampleErrorCodeNetworkError = 2,
  SampleErrorCodeNoInventory = 3,
};

@interface SampleAdRequest : NSObject

@property(nonatomic, assign) BOOL testMode;
@property(nonatomic, copy) NSArray *keywords;

@end

@interface SampleInterstitial : NSObject

@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleInterstitialAdDelegate> delegate;
@property(nonatomic, assign, getter=isInterstitialLoaded) BOOL interstitialLoaded;
- (void)fetchAd:(SampleAdRequest *)request;
- (void)show;

@end

@protocol SampleBannerAdDelegate
- (void)bannerDidLoad:(SampleBanner *)banner;
- (void)banner:(SampleBanner *)banner didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)bannerWillLeaveApplication:(SampleBanner *)banner;

@end

@protocol SampleInterstitialAdDelegate<NSObject>
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial;
- (void)interstitial:(SampleInterstitial *)interstitial
    didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial;

@end

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

कनेक्टर

मीडिएशन अडैप्टर किसी ऐसे ऑब्जेक्ट का इस्तेमाल करके, Google Mobile Ads SDK के साथ इंटरैक्ट करते हैं जो GADMAdNetworkConnector प्रोटोकॉल को लागू करता है. यहां से, हम इस ऑब्जेक्ट को कनेक्टर कहेंगे. कनेक्टर, विज्ञापन अनुरोधों के लिए ज़रूरी जानकारी दिखाता है. साथ ही, विज्ञापन इवेंट और उपयोगकर्ता इंटरैक्शन के लिए मीडिएशन को फिर से कॉल करने का तरीका उपलब्ध कराता है. कनेक्टर चालू करते समय, मीडिएशन अडैप्टर को उपलब्ध कराया जाता है. कनेक्टर को इंस्टेंस वैरिएबल में स्टोर करने के लिए, अपना अडैप्टर सेट अप करें:

- (id)initWithGADMAdNetworkConnector:(id<GADMAdNetworkConnector>)c {
  if ((self = [super init])) {
    _connector = c;
  }
  return self;
}

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

किसी पब्लिशर की पहचान करने के लिए, आपकी विज्ञापन नेटवर्क कंपनी को आइडेंटिफ़ायर की ज़रूरत होती है. उदाहरण के लिए, सैंपल के लिए, विज्ञापन नेटवर्क कंपनी के लिए विज्ञापन यूनिट की ज़रूरत होती है. अडैप्टर को ये ज़रूरी सर्वर पैरामीटर credentials तरीके से दिए जाते हैं, जो आइडेंटिफ़ायर और उनसे जुड़ी वैल्यू का NSDictionary दिखाता है. कोड की नीचे दी गई लाइन, कनेक्टर से सैंपल विज्ञापन नेटवर्क के लिए ad_unit नाम के सर्वर पैरामीटर को फिर से हासिल करती है:

self.interstitialAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];

मीडिएशन नेटवर्क सेटअप

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

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

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

मीडिएशन विज्ञापन का अनुरोध करना

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

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

- (void)getBannerWithSize:(GADAdSize)adSize {
  //The adapter should fail immediately if the adSize is not supported
  if (!GADAdSizeEqualToSize(adSize, GADAdSizeBanner) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeMediumRectangle) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeFullBanner) &&
      !GADAdSizeEqualToSize(adSize, GADAdSizeLeaderboard)) {
    NSString *errorDesc =
        [NSString stringWithFormat:@"Invalid ad type %@, not going to get ad.",
                                   NSStringFromGADAdSize(adSize)];
    NSDictionary *errorInfo = [NSDictionary
        dictionaryWithObjectsAndKeys:errorDesc, NSLocalizedDescriptionKey, nil];
    NSError *error = [NSError errorWithDomain:GADErrorDomain
                                         code:GADErrorMediationInvalidAdSize
                                     userInfo:errorInfo];
    [self.connector adapter:self didFailAd:error];
    return;
  }
  self.bannerAd = [[SampleBanner alloc]
      initWithFrame:CGRectMake(0, 0, adSize.size.width, adSize.size.height)];

  self.bannerAd.delegate = self;
  self.bannerAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];

  // Setup request parameters.
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  request.testMode = self.connector.testMode;
  request.keywords = self.connector.userKeywords;
  [self.bannerAd fetchAd:request];
  NSLog(@"Requesting banner from Sample Ad Network");
}

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

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

  • userKeywords
  • testMode
  • childDirectedTreatment

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

मीडिएशन की अतिरिक्त सुविधाओं की मदद से, आपकी विज्ञापन नेटवर्क कंपनी को टारगेट करने के लिए अतिरिक्त पैरामीटर या इनपुट देने में मदद मिलती है. ये ऐसे पैरामीटर या इनपुट हैं जो कनेक्टर से मिले अतिरिक्त अनुरोध पैरामीटर में शामिल नहीं होते. यह फ़ंक्शन, GADAdNetworkExtras प्रोटोकॉल लागू करने वाली क्लास के ज़रिए दिया जा सकता है. SampleAdNetworkExtras क्लास को नीचे उदाहरण के तौर पर दिखाया गया है:

@interface SampleAdNetworkExtras : NSObject <GADAdNetworkExtras>
/// Should ad volume audio be muted.
@property(nonatomic, assign) BOOL muteAudio;

@end

विज्ञापन अनुरोध करते समय, पब्लिशर को आपकी GADAdNetworkExtras सब-क्लास का एक इंस्टेंस पास करना होगा. आपकी GADAdNetworkExtras सब-क्लास के इस इंस्टेंस को कनेक्टर से ऐक्सेस किया जा सकता है. यहां बताया गया है कि अपने नेटवर्क के लिए विज्ञापन अनुरोध बनाते समय, मीडिएशन की अतिरिक्त सुविधाओं का इस्तेमाल कैसे किया जा सकता है:

SampleAdRequest *request = [[SampleAdRequest alloc] init];
SampleAdNetworkExtras *myAdNetworkExtras = [self.connector networkExtras];
request.muteAudio = myAdNetworkExtras.muteAudio;
[self.bannerAd fetchAd:request];

यह पक्का करने के लिए कि कनेक्टर से आपकी GADAdNetworkExtras सब-क्लास को ऐक्सेस किया जा सके, networkExtrasClass को लागू करें और GADAdNetworkExtras सब-क्लास दिखाएं:

+ (Class<GADAdNetworkExtras>)networkExtrasClass {
  return [SampleAdNetworkExtras class];
}

अगर आपका अडैप्टर, मीडिएशन की अतिरिक्त सुविधाओं का इस्तेमाल नहीं करता है, तो networkExtrasClass वाला तरीका Nil दिखाता है.

मध्यस्थता की सूचना दें

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

तरीका कॉल कब करें
adapter:didReceiveAdView: बैनर अनुरोध पूरा हो गया.
adapter:didFailAd: बैनर नहीं भेजा जा सका.
adapterDidGetAdClick: बैनर पर क्लिक किया गया था.
adapterWillPresentFullScreenModal: बैनर, ऐप्लिकेशन के अंदर ओवरले दिखाएगा.
adapterWillDismissFullScreenModal: इन-ऐप्लिकेशन ओवरले बंद हो जाएगा.
adapterDidDismissFullScreenModal: इन-ऐप्लिकेशन ओवरले बंद कर दिया गया है.
adapterWillLeaveApplication: ऐप्लिकेशन बैकग्राउंड में रखा जाएगा या बंद कर दिया जाएगा, क्योंकि उपयोगकर्ता ने ऐसे विज्ञापन पर क्लिक किया जिससे दूसरा ऐप्लिकेशन लॉन्च होगा.

नीचे दिए गए उदाहरण में, गड़बड़ी और स्थिति के मैसेज फ़ॉरवर्ड करने के लिए, सैंपल विज्ञापन नेटवर्क से SampleBannerAdDelegate इंटरफ़ेस लागू किया गया है:

- (void)bannerDidLoad:(SampleBanner *)banner {
  [self.connector adapter:self didReceiveAdView:banner];
}

- (void)banner:(SampleBanner *)banner didFailWithError:(SampleErrorCode)error {
  [self.connector adapter:self
                didFailAd:[NSError errorWithDomain:@"Ad request failed"
                                              code:error
                                          userInfo:nil]];
}

- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
  [self.connector adapterDidGetAdClick:self];
  [self.connector adapterWillLeaveApplication:self];
}

इन-ऐप्लिकेशन ओवरले बनाम बाहरी ऐप्लिकेशन लॉन्च करें

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

अगर किसी बैनर पर क्लिक करने से फ़ुल-स्क्रीन ओवरले खुलता है, तो ओवरले को प्रज़ेंट करते समय adapterWillPresentFullScreenModal: पर कॉल करें. जब ओवरले बंद हो, तब adapterWillDismissFullScreenModal: और adapterDidDismissFullScreenModal:, दोनों को कॉल करें.

अगर किसी बैनर क्लिक (या फ़ुल-स्क्रीन ओवरले क्लिक) की वजह से उपयोगकर्ता, ऐप्लिकेशन से बाहर निकल जाता है, तो adapterWillLeaveApplication: कॉलबैक को शुरू करें.

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

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

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

- (void)getInterstitial {
  self.interstitialAd = [[SampleInterstitial alloc] init];
  self.interstitialAd.delegate = self;
  self.interstitialAd.adUnit =
      [[self.connector credentials] objectForKey:@"ad_unit"];

  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  // Setup request parameters.
  request.testMode = self.connector.testMode;
  request.keywords = self.connector.userKeywords;

  [self.interstitialAd fetchAd:request];
  NSLog(@"Requesting interstitial from Sample Ad Network");
}

MediationBannerAdapter की तरह ही, कनेक्टर की मदद से पब्लिशर की पहचान और विज्ञापन टारगेटिंग की जानकारी पाई जा सकती है.

मध्यस्थता की सूचना दें

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

तरीका कॉल कब करें
adapterDidReceiveInterstitial: पेज पर अचानक दिखने वाला अनुरोध पूरा हो गया.
adapter:didFailInterstitial: पेज पर अचानक दिखने वाला अनुरोध पूरा नहीं हो सका.
adapterDidGetAdClick: पेज पर अचानक दिखने वाले विज्ञापन पर क्लिक किया गया.
adapterWillPresentInterstitial: पेज पर अचानक दिखने वाला विज्ञापन दिखाया जाएगा.
adapterWillDismissInterstitial: पेज पर अचानक दिखने वाला विज्ञापन खारिज हो जाएगा.
adapterDidDismissInterstitial: पेज पर अचानक दिखने वाला विज्ञापन खारिज कर दिया गया है.
adapterWillLeaveApplication: जब उपयोगकर्ता ने किसी दूसरे ऐप्लिकेशन को लॉन्च करने वाले विज्ञापन पर क्लिक किया, तो ऐप्लिकेशन बैकग्राउंड में चला जाएगा या बंद हो जाएगा.

नीचे दिए गए उदाहरण में, गड़बड़ी और स्थिति के मैसेज फ़ॉरवर्ड करने के लिए सैंपल विज्ञापन नेटवर्क के SampleInterstitialAdDelegate इंटरफ़ेस को लागू किया गया है:

- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
  [self.connector adapterDidReceiveInterstitial:self];
}

- (void)interstitial:(SampleInterstitial *)interstitial
    didFailWithError:(SampleErrorCode)error {
  [self.connector adapter:self
      didFailInterstitial:[NSError errorWithDomain:@"Ad request failed"
                                              code:error
                                          userInfo:nil]];
}

- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterWillPresentInterstitial:self];
}

- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterWillDismissInterstitial:self];
}

- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
  [self.connector adapterDidDismissInterstitial:self];
}

पेज पर अचानक दिखने वाला विज्ञापन दिखाना

अडैप्टर के adapterDidReceiveInterstitial को कॉल करने के बाद, presentInterstitialFromRootViewController को कॉल करने तक पेज पर अचानक दिखने वाला विज्ञापन दिखाएं. ऐप्लिकेशन डेवलपर तय करता है कि पेज पर अचानक दिखने वाला विज्ञापन कब दिखाना है. यह विज्ञापन मिलने के कुछ मिनट बाद तक का हो सकता है.

यहां सैंपल विज्ञापन नेटवर्क के लिए, presentInterstitialFromRootViewController: को लागू करने का तरीका बताया गया है:

- (void)presentInterstitialFromRootViewController:
    (UIViewController *)rootViewController {
  if ([self.interstitialAd isLoaded]) {
    [self.interstitialAd show];
  }
}

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

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

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

अगर आपका अडैप्टर सिर्फ़ बैनर के साथ काम करता है, तो पेज पर अचानक दिखने वाले अनुरोधों के लिए, गड़बड़ी वाले इवेंट को मीडिएशन पर भेजें:

- (void)getInterstitial {
  NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" };
  NSError *error = [NSError errorWithDomain:GADErrorDomain
                                       code:GADErrorInvalidRequest
                                   userInfo:errorInfo];
  [self.connector adapter:self didFailInterstitial:error];
  return;
}
अगर मेरा अडैप्टर सिर्फ़ पेज पर अचानक दिखने वाले विज्ञापनों के साथ काम करता है, तो मुझे क्या करना चाहिए?

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

- (void)getBannerWithSize:(GADAdSize)adSize {
  NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" };
  NSError *error =
      [NSError errorWithDomain:GADErrorDomain
                          code:GADErrorInvalidRequest
                      userInfo:errorInfo];
  [self.connector adapter:self didFailAd:error];
  return;
}