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

प्लैटफ़ॉर्म चुनें: Android (बीटा वर्शन) नई सुविधा Android iOS Unity Flutter

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

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

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

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

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

ca-app-pub-3940256099942544/1712485313

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

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

लागू करना

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

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

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

विज्ञापन को लोड करने के लिए, GADRewardedAd क्लास में load(adUnitID:request) तरीके का इस्तेमाल किया जाता है.

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: RewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await RewardedAd.load(
        with: "ca-app-pub-3940256099942544/1712485313", request: Request())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest request]
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
        return;
      }
      self.rewardedAd = ad;
      self.rewardedAd.fullScreenContentDelegate = self;
    }];

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

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

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

Swift

private func validateServerSideVerification() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    let options = ServerSideVerificationOptions()
    options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
    rewardedAd?.serverSideVerificationOptions = options
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                        request:[GADRequest request]
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

SAMPLE_CUSTOM_DATA_STRING की जगह अपना कस्टम डेटा डालें.

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

प्रज़ेंटेशन इवेंट की सूचनाएं पाने के लिए, आपको दिखाए गए विज्ञापन की fullScreenContentDelegate प्रॉपर्टी को GADFullScreenContentDelegate असाइन करना होगा:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
  // Clear the rewarded ad.
  rewardedAd = nil
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called with error: \(error.localizedDescription).")
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the rewarded ad.
  self.rewardedAd = nil;
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}

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

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

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

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

Swift

rewardedAd.present(from: self) {
  let reward = rewardedAd.adReward
  print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")

  // TODO: Reward the user.
}

SwiftUI

विज्ञापन कब दिखाना है, यह तय करने के लिए व्यू में यूज़र इंटरफ़ेस (यूआई) इवेंट सुनें.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

व्यू मॉडल से इनाम वाला विज्ञापन दिखाएं:

func showAd() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  rewardedAd.present(from: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

[self.rewardedAd presentFromRootViewController:self
                      userDidEarnRewardHandler:^{
                        GADAdReward *reward = self.rewardedAd.adReward;
                        NSString *rewardMessage = [NSString
                            stringWithFormat:@"Reward received with currency %@ , amount %lf",
                                             reward.type, [reward.amount doubleValue]];
                        NSLog(@"%@", rewardMessage);

                        // TODO: Reward the user.
                      }];

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

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

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

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

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

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

क्या adDidDismissFullScreenContent: डेलिगेट मेथड से पहले, userDidEarnRewardHandler कंप्लीशन हैंडलर को हमेशा कॉल किया जाता है?

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

GitHub पर उदाहरण

इनाम वाले विज्ञापनों के सभी उदाहरण, अपनी पसंद की भाषा में देखें:

अगले चरण

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