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

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

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

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

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

जारी रखने से पहले, ये काम करें:

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

विज्ञापन लोड और कैश होने की प्रोसेस (बीटा वर्शन) के बारे में जानकारी

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

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

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

विज्ञापन लोड और कैश होने की प्रोसेस शुरू करना

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

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

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
RewardedAdPreloader.start(adUnitId, preloadConfig)

Java

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedAdPreloader.start(adUnitId, preloadConfig);

AD_UNIT_ID को अपनी विज्ञापन यूनिट के आईडी से बदलें.

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

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

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

विज्ञापन दिखाने से पहले, pollAd तरीके को कॉल करें. पहले से लोड किए गए विज्ञापन ऑब्जेक्ट को सेव न करें. 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 = RewardedAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "Rewarded ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "Rewarded ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : RewardedAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "Rewarded 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 RewardedAd ad = RewardedAdPreloader.pollAd(adUnitId);

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

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

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

जब आपका ऐप्लिकेशन किसी विज्ञापन प्लेसमेंट तक पहुंच जाता है और show तरीके को कॉल कर सकता है, तो pollAd तरीके को कॉल करें. विज्ञापन को होल्ड करने के लिए, प्रीलोड कॉलबैक में या isAdAvailable तरीके की जांच करने के बाद, pollAd तरीके को कॉल न करें. अगर आपको विज्ञापन दिखाने से पहले, विज्ञापन के मेटाडेटा की जांच करनी है, तो विज्ञापन को कैश मेमोरी से हटाए बिना रिस्पॉन्स की जानकारी पढ़ें.

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

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

Kotlin

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

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

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

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

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

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

Java

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

  rewardedAd.setAdEventCallback(
      new RewardedAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // Rewarded ad did show.
        }

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

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

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

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

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

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

  • user_id क्वेरी पैरामीटर: इससे उस उपयोगकर्ता की पहचान की जाती है जिसे क्रेडिट देना है. जैसे, इंटरनल खाता आईडी.
  • custom_data क्वेरी पैरामीटर: इसमें ऐप्लिकेशन का डेटा होता है. जैसे, इनाम की जगह, गेम का लेवल या सर्वर से जनरेट किया गया नॉन्स.

अगर आपने कोई वैल्यू सेट नहीं की है, तो Google उस क्वेरी पैरामीटर को एसएसवी कॉलबैक से हटा देता है.

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

Kotlin

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

Java

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

SAMPLE_CUSTOM_DATA_STRING को अपने कस्टम डेटा से बदलें.

अहम जानकारी: custom_data क्वेरी पैरामीटर, परसेंट-एन्कोडेड होता है. वैल्यू को पार्स करने से पहले, अपने सर्वर पर स्ट्रिंग को यूआरएल-डिकोड करें. साथ ही, user_id या custom_data क्वेरी पैरामीटर पर भरोसा करने से पहले, कॉलबैक सिग्नेचर की पुष्टि करें.

ज़रूरी नहीं: प्रीलोडिंग इवेंट सुनें

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

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

Kotlin

val preloadCallback =
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(TAG, "Rewarded preload ad $preloadId failed to load with error: ${adError.message}")
    }

    override fun onAdsExhausted(preloadId: String) {
      Log.i(TAG, "Rewarded preload ad $preloadId is not available")
    }

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

Java

PreloadCallback preloadCallback =
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(String preloadId, LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "Rewarded preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
      }

      @Override
      public void onAdsExhausted(String preloadId) {
        Log.i(TAG, "Rewarded preload ad " + preloadId + " is not available");
      }

      @Override
      public void onAdPreloaded(String preloadId, ResponseInfo responseInfo) {
        Log.i(TAG, "Rewarded preload ad " + preloadId + " is available");
      }
    };

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

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

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

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

Kotlin

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

Java

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

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

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

यहां दिए गए उदाहरण में, बफ़र साइज़ सेट करने का तरीका बताया गया है:

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2)
RewardedAdPreloader.start(adUnitId, preloadConfig)

Java

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2);
RewardedAdPreloader.start(adUnitId, preloadConfig);

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

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

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

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

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

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

Kotlin

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

Java

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

ज़रूरी नहीं: जवाब में दी गई जानकारी पढ़ना

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

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

Kotlin

val responseInfo = RewardedAdPreloader.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 = RewardedAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

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