इनाम वाले इंटरस्टीशियल विज्ञापन सेट अप करना

Next-Gen SDK.

प्लेटफ़ॉर्म चुनें: Android iOS Unity Flutter Android (लेगसी)

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

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

शुरू करने से पहले

आगे बढ़ने से पहले, यह काम करें:

  • सेट अप करें GMA Next-Gen SDK.
  • टेस्ट के तौर पर, इनाम वाले इंटरस्टीशियल विज्ञापन की यूनिट का आईडी /21775744923/example/rewarded-interstitial इस्तेमाल करें.
    • अपने ऐप्लिकेशन बनाने और उसकी टेस्टिंग करने के लिए, लाइव और प्रोडक्शन विज्ञापन इस्तेमाल करने के बजाय, टेस्ट विज्ञापन इस्तेमाल करें. ऐसा न करने पर, आपका खाता निलंबित किया जा सकता है.
    • अपने ऐप्लिकेशन को पब्लिश करने से पहले, इस आईडी को अपने विज्ञापन यूनिट आईडी से बदलें.
    • GMA Next-Gen SDK टेस्ट विज्ञापनों के बारे में ज़्यादा जानने के लिए, टेस्ट विज्ञापन चालू करना लेख पढ़ें.

विज्ञापन को पहले से लोड करने की सुविधा के बारे में जानकारी

GMA Next-Gen SDK में, विज्ञापन को पहले से लोड करने की सुविधा से, विज्ञापन लोड करने और उन्हें कैश मेमोरी में सेव करने की प्रोसेस अपने-आप हो जाती है.

विज्ञापन को पहले से लोड करने की सुविधा से ये फ़ायदे मिलते हैं:

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

विज्ञापन को पहले से लोड करने की सुविधा चालू करना

विज्ञापन को पहले से लोड करने की सुविधा चालू करने के लिए, ऐप्लिकेशन शुरू होने पर start तरीके को एक बार कॉल करें. start तरीके को कॉल करने के बाद, GMA Next-Gen SDK विज्ञापनों को अपने-आप पहले से लोड कर लेता है. साथ ही, पहले से लोड किए गए कॉन्फ़िगरेशन के लिए, लोड न हो पाने वाले अनुरोधों को फिर से भेजता है.

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

Kotlin

// Call start() once after SDK initialization.
// Preload only one ad unit per format to optimize performance.
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)

Java

// Call start() once after SDK initialization.
// Preload only one ad unit per format to optimize performance.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig);

AD_UNIT_ID की जगह, अपना विज्ञापन यूनिट आईडी डालें.

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

पहले से लोड किए गए विज्ञापन को पाना और दिखाना

विज्ञापन दिखाने के लिए, pollAd तरीके को कॉल करें. GMA Next-Gen SDK उपलब्ध विज्ञापन को वापस पाता है और बैकग्राउंड में अगले विज्ञापन को अपने-आप पहले से लोड कर लेता है. अगर कोई विज्ञापन उपलब्ध नहीं है, तो GMA Next-Gen SDK कोई विज्ञापन नहीं दिखाता.

जब आपके पास कोई विज्ञापन ऑब्जेक्ट उपलब्ध हो, तो विज्ञापन दिखाने के लिए show तरीके को कॉल करें. इनाम से जुड़े इवेंट मैनेज करने के लिए, इनाम के लिसनर का इस्तेमाल करें. यहां दिए गए उदाहरण में, पहले से लोड किए गए विज्ञापन को वापस पाने और दिखाने का तरीका बताया गया है:

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = RewardedInterstitialAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "Rewarded interstitial ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "Rewarded interstitial ad recorded an impression.")
      }
    }
  ad.show(activity) { rewardItem -> Log.d(TAG, "User earned reward: ${rewardItem.amount}") }
}

Java

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final RewardedInterstitialAd ad = RewardedInterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not available.");
    return;
  }

  Log.d(TAG, "Rewarded interstitial ad response info: " + ad.getResponseInfo());
  ad.setAdEventCallback(
      new RewardedInterstitialAdEventCallback() {
        @Override
        public void onAdImpression() {
          Log.d(TAG, "Rewarded interstitial ad recorded an impression.");
        }
      });

  // Show the ad.
  ad.show(
      activity,
      rewardItem -> {
        Log.d(TAG, "User earned reward: " + rewardItem.getAmount());
      });
}

जब तक विज्ञापन दिखाने के लिए तैयार न हों, तब तक pollAd तरीके को कॉल न करें. विज्ञापन दिखाए बिना, उसके रिस्पॉन्स की जानकारी पढ़ने के लिए, रिस्पॉन्स की जानकारी पढ़ना लेख पढ़ें.

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

विज्ञापन दिखाने से पहले, विज्ञापन से जुड़े इवेंट सुनें. यहां दिए गए उदाहरण में, विज्ञापन से जुड़े इवेंट के लिए कॉलबैक रजिस्टर करने का तरीका बताया गया है:

Kotlin

private fun listenToAdEvents() {
  // Listen for ad events.
  val ad = rewardedInterstitialAd
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not ready yet.")
    return
  }

  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // Rewarded interstitial ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // Rewarded interstitial ad did dismiss.
        rewardedInterstitialAd = null
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // Rewarded interstitial ad failed to show.
        Log.e(TAG, "Rewarded interstitial ad failed to show: ${fullScreenContentError.message}")
      }

      override fun onAdImpression() {
        // Rewarded interstitial ad did record an impression.
      }

      override fun onAdClicked() {
        // Rewarded interstitial ad did record a click.
      }
    }
}

Java

private void listenToAdEvents() {
  // Listen for ad events.
  if (rewardedInterstitialAd == null) {
    Log.e(TAG, "Rewarded interstitial ad is not ready yet.");
    return;
  }

  rewardedInterstitialAd.setAdEventCallback(
      new RewardedInterstitialAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // Rewarded interstitial ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Rewarded interstitial ad did dismiss.
          rewardedInterstitialAd = null;
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // Rewarded interstitial ad failed to show.
          Log.e(
              TAG,
              "Rewarded interstitial ad failed to show: " + fullScreenContentError.getMessage());
        }

        @Override
        public void onAdImpression() {
          // Rewarded interstitial ad did record an impression.
        }

        @Override
        public void onAdClicked() {
          // Rewarded interstitial ad did record a click.
        }
      });
}

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

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

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

Kotlin

RewardedInterstitialAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedInterstitialAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedInterstitialAd) {
      rewardedInterstitialAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedInterstitialAd?.setServerSideVerificationOptions(options)
    }
  },
)

Java

RewardedInterstitialAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedInterstitialAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedInterstitialAd ad) {
        rewardedInterstitialAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedInterstitialAd.setServerSideVerificationOptions(options);
      }
    });

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

ज़रूरी नहीं: पहले से लोड करने से जुड़े इवेंट सुनना

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

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

Kotlin

val preloadCallback =
  // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(
        TAG,
        "Rewarded interstitial preload ad $preloadId failed to load with error: ${adError.message}",
      )
    }

    override fun onAdsExhausted(preloadId: String) {
      Log.i(TAG, "Rewarded interstitial preload ad $preloadId is not available")
      // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
    }

    override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
      Log.i(TAG, "Rewarded interstitial preload ad $preloadId is available")
    }
  }
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)

Java

PreloadCallback preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "Rewarded interstitial preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
        // [Optional] Get the error response info for additional details.
        // ResponseInfo responseInfo = adError.getResponseInfo();
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is not available");
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      @Override
      public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is available");
      }
    };
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

जब कोई विज्ञापन लोड नहीं होता है, तब GMA Next-Gen SDK विज्ञापनों को अपने-आप पहले से लोड कर लेता है. साथ ही, पहले से लोड किए गए कॉन्फ़िगरेशन के लिए, लोड न हो पाने वाले अनुरोधों को फिर से भेजता है.

ज़रूरी नहीं: विज्ञापन की उपलब्धता की जांच करना

अगर आपको यह जानना है कि कोई विज्ञापन उपलब्ध है या नहीं, तो विज्ञापन की उपलब्धता की जांच करें. यहां दिए गए उदाहरण में, यह जांचने का तरीका बताया गया है कि पहले से लोड किया गया कोई विज्ञापन उपलब्ध है या नहीं:

Kotlin

private fun isAdAvailable(adUnitId: String): Boolean {
  return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId);
}

ज़रूरी नहीं: बफ़र साइज़ सेट करना

बफ़र साइज़ से, मेमोरी में पहले से लोड किए गए विज्ञापनों की संख्या कंट्रोल की जाती है. डिफ़ॉल्ट रूप से, Google, मेमोरी की खपत और विज्ञापन दिखाने में लगने वाले समय के बीच संतुलन बनाए रखने के लिए, बफ़र साइज़ को ऑप्टिमाइज़ करता है. मेमोरी में रखे जाने वाले विज्ञापनों की संख्या बढ़ाने के लिए, कस्टम बफ़र साइज़ सेट किया जा सकता है. हमारा सुझाव है कि बफ़र साइज़ ज़्यादा से ज़्यादा चार सेट करें.

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

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
// Maintain small or default buffer size unless rapid transitions are expected.
val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)

Java

// Maintain small or default buffer size unless rapid transitions are expected.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4);
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig);

पहले से लोड करने की सुविधा के लिए कैश मेमोरी की सीमाएं

GMA Next-Gen SDK सभी विज्ञापन यूनिट और पहले से लोड करने के आईडी के लिए, पहले से लोड किए गए विज्ञापनों की कुल संख्या पर, ऐप्लिकेशन के लिए एक सीमा लागू करता है:

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

ज़रूरी नहीं: विज्ञापन को पहले से लोड करने की सुविधा बंद करना

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

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

Kotlin

private fun stopPreloading(adUnitId: String) {
  // Stops the preloading and destroy preloaded ads.
  RewardedInterstitialAdPreloader.destroy(adUnitId)
}

Java

private void stopPreloading(String adUnitId) {
  // Stops the preloading and destroy preloaded ads.
  RewardedInterstitialAdPreloader.destroy(adUnitId);
}

ज़रूरी नहीं: रिस्पॉन्स की जानकारी पढ़ना

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

यहां दिए गए उदाहरण में, पहले से लोड किए गए अगले विज्ञापन के रिस्पॉन्स की जानकारी पढ़ने का तरीका बताया गया है:

Kotlin

val responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId)
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.")
  return
}

Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")

Java

ResponseInfo responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());