इनाम वाला विज्ञापन अडैप्टर लागू करना

मीडिएशन अडैप्टर को Google मोबाइल विज्ञापन SDK से मैसेज और अनुरोध मिलते हैं. साथ ही, उन अनुरोधों को पूरा करने के लिए, वह तीसरे पक्ष के नेटवर्क SDK टूल से संपर्क करता है.

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

अडैप्टर क्लास का नाम और सर्वर के पैरामीटर तय करें

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

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

GADMediationAdapter प्रोटोकॉल का पालन करना

सबसे पहले, आपकी अडैप्टर क्लास GADMediationAdapter प्रोटोकॉल को लागू करे:

#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

इस बदलाव से यह पक्का होता है कि आपकी क्लास, यहां बताए गए कई तरीके लागू करती है.

रिपोर्ट अतिरिक्त क्लास

अगर तीसरे पक्ष का नेटवर्क चाहता है कि पब्लिशर, किसी विज्ञापन अनुरोध के लिए अन्य वैकल्पिक पैरामीटर पास कर सकें, तो extras क्लास को networkExtrasClass तरीके से लौटाया जाना चाहिए. अगर तीसरे पक्ष से, पब्लिशर की दी गई अतिरिक्त सुविधाएं काम नहीं करती हैं, तो Nil वापस करें.

#import <GoogleMobileAds/GoogleMobileAds.h>

@interface SampleExtras : NSObject<GADAdNetworkExtras>

/// Use this to indicate if debug mode is on for logging.
@property(nonatomic) BOOL debugLogging;

/// Use this to indicate whether to mute audio for video ads.
@property(nonatomic) BOOL muteAudio;

@end
#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
  return [SampleExtras class];
}
...
@end

वर्शन नंबर की रिपोर्ट करें

अडैप्टर को Google Mobile Ads SDK को, अडैप्टर के वर्शन और तीसरे पक्ष के SDK टूल के वर्शन, दोनों को रिपोर्ट करना होगा. वर्शन की रिपोर्ट GADVersionNumberका इस्तेमाल करके की जाती है.

Google के ओपन सोर्स और अलग-अलग वर्शन एडैप्टर 4-अंकों के अडैप्टर वर्शन स्कीम का इस्तेमाल करते हैं, लेकिन GADVersionNumber सिर्फ़ तीन अंकों का इस्तेमाल कर सकते हैं. इससे बचने के लिए, हमारा सुझाव है कि नीचे बताए गए तरीके से, आखिरी दो अंकों को पैच वर्शन में जोड़ लें:

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = SampleSDKVersion;
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];

  GADVersionNumber version = {0};
  if (versionComponents.count >= 3) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    version.patchVersion = [versionComponents[2] integerValue];
  }
  return version;
}

+ (GADVersionNumber)version {
  NSString *versionString = SampleAdapterVersion;
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];

  GADVersionNumber version = {0};
  if (versionComponents.count >= 4) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    // Adapter versions have 2 patch versions. Multiply the first patch by 100.
    version.patchVersion =
        [versionComponents[2] integerValue] * 100 + [versionComponents[3] integerValue];
  }
  return version;
}
...
@end

अडैप्टर शुरू करें

जब कोई ऐप्लिकेशन Google Mobile Ads SDK शुरू करता है, तो AdMob यूज़र इंटरफ़ेस (यूआई) में ऐप्लिकेशन के लिए कॉन्फ़िगर किए गए सभी अडैप्टर पर setUpWithConfiguration:completionHandler: शुरू हो जाता है.

GADMediationServerConfiguration आर्ग्युमेंट, AdMob यूज़र इंटरफ़ेस (यूआई) में ऐप्लिकेशन के लिए कॉन्फ़िगर किए गए सभी प्लेसमेंट की जानकारी देता है. इस जानकारी का इस्तेमाल करके, अपने विज्ञापन नेटवर्क का SDK टूल शुरू करें. आपकी विज्ञापन नेटवर्क कंपनी का SDK टूल शुरू होने के बाद, GADMediationAdapterSetUpCompletionBlock आर्ग्युमेंट शुरू करें. इस ब्लॉक की मदद से, nil या किसी NSError ऑब्जेक्ट के साथ पूरा होने वाले हैंडलर को शुरू करके, Google Mobile Ads SDK में सफल या असफल, दोनों की शुरुआत की जा सकती है.

#import "SampleAdapter.h"

@implementation SampleAdapter
...
+ (void)setUpWithConfiguration:(GADMediationServerConfiguration *)configuration
             completionHandler:(GADMediationAdapterSetUpCompletionBlock)completionHandler {
  // Since the Sample SDK doesn't need to be initialized, the completion
  //handler is called directly here.
  completionHandler(nil);
}
...
@end

इनाम वाले विज्ञापन का अनुरोध करना

जब कोई ऐप्लिकेशन, Google Mobile Ads SDK से इनाम वाले विज्ञापन को लोड करता है, तो अडैप्टर पर loadRewardedAdForAdConfiguration:completionHandler: शुरू होता है. ऐसा तब होता है, जब मीडिएशन वॉटरफ़ॉल में आपके विज्ञापन नेटवर्क की पहुंच हो.

GADRewardedLoadCompletionHandler की मदद से, Google Mobile Ads SDK में विज्ञापन लोड होने की प्रोसेस को रिपोर्ट किया जा सकता है. इसके लिए, आपको GADMediationRewardedAd प्रोटोकॉल के मुताबिक ऑब्जेक्ट का रेफ़रंस देना होगा या nilपहचान फ़ाइल और NSError ऑब्जेक्ट देकर, विज्ञापन लोड न हो पाने की जानकारी देनी होगी. लोड पूरा होने से जुड़े हैंडलर का कॉल, GADMediationRewardedAdEventDelegate दिखाता है, जिसे आपके अडैप्टर को विज्ञापन की लाइफ़साइकल के लिए होल्ड करना चाहिए, ताकि Google Mobile Ads SDK को बाद के किसी भी इवेंट के बारे में बताया जा सके.

#import "SampleAdapter.h"

@interface SampleAdapter () <GADMediationRewardedAd> {
  /// Rewarded ads from Sample SDK.
  SampleRewardedAd *_rewardedAd;

  /// Handles any callback when the sample rewarded ad finishes loading.
  GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;

  /// Delegate for receiving rewarded ad notifications.
  __weak id<GADMediationRewardedAdEventDelegate> _rewardedAdDelegate;
}
@end

@implementation SampleAdapter
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:
                           (GADMediationRewardedLoadCompletionHandler)completionHandler {
  _loadCompletionHandler = completionHandler;

  NSString *adUnit = adConfiguration.credentials.settings[SampleSDKAdUnitIDKey];
  SampleExtras *extras = adConfiguration.extras;

  _rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];
  _rewardedAd.enableDebugLogging = extras.enableDebugLogging;

  /// Check the extras to see if the request should be customized.
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  request.mute = extras.muteAudio;

  /// Set the delegate on the rewarded ad to listen for callbacks from the Sample SDK.
  _rewardedAd.delegate = self;
  [_rewardedAd fetchAd:request];
}
...
@end

विज्ञापन लोड करने से जुड़े इवेंट रिले करें

तीसरे पक्ष के SDK टूल कॉलबैक सुनना और उन्हें Google Mobile Ads SDK के सही कॉलबैक पर मैप करना, अडैप्टर की ज़िम्मेदारी है.

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

- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
  _rewardedAdDelegate = _loadCompletionHandler(self, nil);
}

- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
  _loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
                                                  code:GADErrorNoFill
                                              userInfo:nil]);
}

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

जब ऐप्लिकेशन, Google Mobile Ads SDK से इनाम वाले विज्ञापन दिखाने के लिए कहता है, तो SDK टूल लोड पूरा होने वाले हैंडलर को कॉल में दिए गए GADMediationRewardedAd के इंस्टेंस पर, presentFromViewController: तरीके को कॉल करता है. यहां आपको इनाम वाला विज्ञापन दिखाना होगा:

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if (!_rewardedAd.isReady) {
    NSError *error =
        [NSError errorWithDomain:kAdapterErrorDomain
                            code:0
                        userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [_rewardedAdDelegate didFailToPresentWithError:error];
    return;
  }
  [_rewardedAd presentFromRootViewController:viewController];
}

Mobile Ads SDK में विज्ञापन इवेंट की रिपोर्ट करें

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

- (void)rewardedAdDidPresent:(nonnull SampleRewardedAd *)rewardedAd {
  [_rewardedAdDelegate willPresentFullScreenView];
  [_rewardedAdDelegate didStartVideo];
  [_rewardedAdDelegate reportImpression];
}

- (void)rewardedAdDidDismiss:(nonnull SampleRewardedAd *)rewardedAd {
  [_rewardedAdDelegate willDismissFullScreenView];
  [_rewardedAdDelegate didEndVideo];
  [_rewardedAdDelegate didDismissFullScreenView];
}
- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward =
      [[GADAdReward alloc] initWithRewardType:@"GADMediationAdapterSampleAdNetwork"
                                 rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [_rewardedAdDelegate didRewardUserWithReward:aReward];
}

Google Mobile Ads SDK से रिपोर्ट किए जाने वाले विज्ञापन इवेंट के बारे में नीचे जानकारी दी गई है:

विज्ञापन इवेंट ब्यौरा
willPresentFullScreenView Google Mobile Ads SDK को सूचना देता है कि विज्ञापन दिखेगा.
didStartVideo यह Google Mobile Ads SDK को सूचना देता है कि इनाम वाला विज्ञापन चलना शुरू हुआ है.
reportImpression Google Mobile Ads SDK को सूचना देता है कि विज्ञापन पर कोई इंप्रेशन मिला.
didEndVideo यह Google Mobile Ads SDK को सूचना देता है कि इनाम वाला विज्ञापन दिख रहा है.
didRewardUserWithReward Google Mobile Ads SDK से यह सूचना देता है कि उपयोगकर्ता को इनाम मिला है.
reportClick Google Mobile Ads SDK को यह सूचना देता है कि विज्ञापन पर क्लिक किया गया है.
willDismissFullScreenView Google Mobile Ads SDK को सूचना देता है कि विज्ञापन खारिज कर दिया जाएगा.
didDismissFullScreenView Google Mobile Ads SDK को सूचना देता है कि विज्ञापन खारिज कर दिया गया है.