इनाम वाले विज्ञापन

इनाम वाले विज्ञापन ऐसे विज्ञापन होते हैं जिनमें उपयोगकर्ताओं को इन-ऐप्लिकेशन इनामों के बदले इंटरैक्ट करने का विकल्प मिलता है. इस गाइड में बताया गया है कि इनाम वाले विज्ञापनों को AdMobसे iOS ऐप्लिकेशन में कैसे इंटिग्रेट किया जा सकता है. ग्राहकों की सफलता की कुछ कहानियां पढ़ें: केस स्टडी 1, केस स्टडी 2.

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

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

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

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

ca-app-pub-3940256099942544/1712485313

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

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

लागू करने का तरीका

इनाम वाले इंटरस्टीशियल विज्ञापनों को इंटिग्रेट करने के मुख्य चरण इस तरह हैं:

  • विज्ञापन लोड करें
  • [ज़रूरी नहीं] SSV कॉलबैक की पुष्टि करें
  • कॉलबैक के लिए रजिस्टर करें
  • विज्ञापन दिखाएं और इनाम इवेंट को मैनेज करें

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

विज्ञापन को GADRewardedAd क्लास पर स्टैटिक loadWithAdUnitID:request:completionHandler: तरीके से लोड किया जाता है. लोड करने के तरीके के लिए, आपका विज्ञापन यूनिट आईडी, GADRequest ऑब्जेक्ट, और पूरा होने वाले हैंडलर की ज़रूरत होती है. विज्ञापन लोड होने या न होने पर, इस हैंडलर को कॉल किया जाता है. लोड किया गया GADRewardedAd ऑब्जेक्ट, पूरा होने वाले हैंडलर में पैरामीटर के तौर पर दिया जाता है. नीचे दिए गए उदाहरण में, ViewController क्लास में GADRewardedAd को लोड करने का तरीका बताया गया है.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[ज़रूरी नहीं] सर्वर-साइड वेरिफ़िकेशन (एसएसवी) कॉलबैक की पुष्टि करें

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

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

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

Objective-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

कॉलबैक के लिए रजिस्टर करें

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

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd एक बार इस्तेमाल किया जाने वाला ऑब्जेक्ट है. इसका मतलब है कि एक बार इनाम वाले विज्ञापन को दिखाने के बाद, उसे फिर से नहीं दिखाया जा सकता. इसका सबसे सही तरीका है कि आप GADFullScreenContentDelegate को adDidDismissFullScreenContent: तरीके में कोई दूसरा इनाम वाला विज्ञापन लोड करें, ताकि इनाम वाला अगला विज्ञापन खारिज होते ही लोड होना शुरू हो जाए.

विज्ञापन दिखाएं और इनाम इवेंट को मैनेज करें

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

उपयोगकर्ता को इनाम देने के लिए, अपना विज्ञापन प्रज़ेंट करते समय आपको एक GADUserDidEarnRewardHandler ऑब्जेक्ट देना होगा.

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

Swift

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

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

क्या मुझे GADRewardedAd के लिए इनाम की जानकारी मिल सकती है?
हां, अगर आपको userDidEarnReward कॉलबैक के चालू होने से पहले इनाम की रकम चाहिए, तो GADRewardedAd के पास adReward प्रॉपर्टी होती है. इसकी मदद से, विज्ञापन लोड होने के बाद इनाम की रकम की पुष्टि की जा सकती है.
क्या इनिशलाइज़ेशन कॉल के लिए कोई टाइम आउट हो गया है?
10 सेकंड बाद, Google Mobile Ads SDK, startWithCompletionHandler: तरीके में दिए गए GADInitializationCompletionHandler को शुरू करता है, भले ही किसी मीडिएशन नेटवर्क ने शुरू करने की प्रोसेस पूरी न की हो.
अगर मुझे इनिशलाइज़ेशन कॉलबैक मिलने पर, कुछ मीडिएशन नेटवर्क तैयार नहीं हैं, तो क्या होगा?

हमारा सुझाव है कि आप GADInitializationCompletionHandler में एक विज्ञापन लोड करें. कोई मीडिएशन नेटवर्क तैयार न होने पर भी, Google Mobile Ads SDK उस नेटवर्क से विज्ञापन के लिए पूछता है. इसलिए, अगर कोई मीडिएशन नेटवर्क टाइम आउट के बाद शुरू होता है, तो भी यह उस सेशन में आने वाले समय में विज्ञापन अनुरोधों को पूरा कर सकता है.

ऐप्लिकेशन के सेशन के दौरान, GADMobileAds.initializationStatus को कॉल करके सभी अडैप्टर के शुरू होने की स्थिति को पोल किया जा सकता है.

मैं इसका पता कैसे लगाऊं कि कोई खास मीडिएशन नेटवर्क तैयार क्यों नहीं है?

GADAdapterStatus ऑब्जेक्ट की description प्रॉपर्टी से यह पता चलता है कि एडाप्टर, विज्ञापन अनुरोधों को पूरा करने के लिए तैयार क्यों नहीं है.

क्या userDidEarnRewardHandler पूरा करने वाले हैंडलर को हमेशा adDidDismissFullScreenContent: ऐक्सेस देने का तरीका इस्तेमाल करने से पहले कॉल किया जाता है?

Google विज्ञापनों के लिए, सभी userDidEarnRewardHandler कॉल adDidDismissFullScreenContent: से पहले किए जाते हैं. मीडिएशन के ज़रिए दिखाए जाने वाले विज्ञापनों के लिए, तीसरे पक्ष की विज्ञापन नेटवर्क कंपनी के SDK टूल लागू करने पर कॉलबैक ऑर्डर तय होता है. अगर किसी विज्ञापन नेटवर्क कंपनी के SDK टूल में, किसी एक ही तरीके से इनाम की जानकारी दी जाती है, तो मीडिएशन अडैप्टर adDidDismissFullScreenContent: से पहले userDidEarnRewardHandler का अनुरोध करता है.

GitHub पर उदाहरण

  • इनाम वाले विज्ञापनों का उदाहरण: Swift | Objective-C

अगले चरण

उपयोगकर्ता की निजता के बारे में ज़्यादा जानें.