बैनर विज्ञापन

प्लैटफ़ॉर्म चुनें: Android (बीटा) New-selected Android iOS Unity Flutter

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

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

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

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

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

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

/21775744923/example/adaptive-banner

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

GMA Next-Gen SDK टेस्ट विज्ञापन के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, टेस्ट विज्ञापन चालू करें लेख पढ़ें.

AdView ऑब्जेक्ट बनाना

बैनर दिखाने के लिए, यह तरीका अपनाएं:

Kotlin

  1. AdView ऑब्जेक्ट बनाएं.
  2. अपने ऐप्लिकेशन के लेआउट में AdView ऑब्जेक्ट जोड़ें.

यहां दिए गए उदाहरण में, किसी ऐप्लिकेशन लेआउट में AdView ऑब्जेक्ट को बनाने और जोड़ने का तरीका बताया गया है:

private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
  val adView = AdView(activity)
  adViewContainer.addView(adView)
}

Java

  1. AdView ऑब्जेक्ट बनाएं.
  2. अपने ऐप्लिकेशन के लेआउट में AdView ऑब्जेक्ट जोड़ें.

यहां दिए गए उदाहरण में, किसी ऐप्लिकेशन लेआउट में AdView ऑब्जेक्ट को बनाने और जोड़ने का तरीका बताया गया है:

private void createAdView(FrameLayout adViewContainer, Activity activity) {
  AdView adView = new AdView(activity);
  adViewContainer.addView(adView);
}

एक्सएमएल लेआउट

अपनी लेआउट एक्सएमएल फ़ाइल में AdView एलिमेंट जोड़ें:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <com.google.android.libraries.ads.mobile.sdk.banner.AdView
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Jetpack Compose

  1. Compose UI में AndroidView एलिमेंट शामिल करें.
  2. बैनर विज्ञापन को होल्ड करने के लिए, mutableStateOf<BannerAd?> वैरिएबल तय करें:
// Initialize required variables.
val context = LocalContext.current
var bannerAdState by remember { mutableStateOf<BannerAd?>(null) }

// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  bannerAdState?.let { bannerAd ->
    Box(modifier = Modifier.fillMaxWidth()) {
      // Display the ad within an AndroidView.
      AndroidView(
        modifier = modifier.wrapContentSize(),
        factory = { bannerAd.getView(requireActivity()) },
      )
    }
  }
}

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

यहां दिए गए उदाहरण में, 360 पिक्सल चौड़ाई वाले ऐंकर अडैप्टिव बैनर विज्ञापन को AdView ऑब्जेक्ट में लोड किया गया है:

Kotlin

private fun loadBannerAd(adView: AdView, activity: Activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360)
  val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()

  adView.loadAd(
    adRequest,
    object : AdLoadCallback<BannerAd> {
      override fun onAdLoaded(ad: BannerAd) {
        ad.adEventCallback =
          object : BannerAdEventCallback {
            override fun onAdImpression() {
              Log.d(TAG, "Banner ad recorded an impression.")
            }

            override fun onAdClicked() {
              Log.d(TAG, "Banner ad clicked.")
            }
          }
      }

      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.e(TAG, "Banner ad failed to load: $adError")
      }
    },
  )
}

Java

private void loadBannerAd(AdView adView, Activity activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  AdSize adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360);
  BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();

  adView.loadAd(
      adRequest,
      new AdLoadCallback<BannerAd>() {
        @Override
        public void onAdLoaded(@NonNull BannerAd bannerAd) {
          bannerAd.setAdEventCallback(
              new BannerAdEventCallback() {
                @Override
                public void onAdImpression() {
                  Log.d(TAG, "Banner ad recorded an impression.");
                }

                @Override
                public void onAdClicked() {
                  Log.d(TAG, "Banner ad clicked.");
                }
              });
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          Log.e(TAG, "Banner ad failed to load: " + adError);
        }
      });
}

Jetpack Compose

// Request an anchored adaptive banner with a width of 360.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(requireContext(), 360)

// Load the ad when the screen is active.
val coroutineScope = rememberCoroutineScope()
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(context) {
  bannerAdState?.destroy()
  if (!isPreviewMode) {
    coroutineScope.launch {
      when (val result = BannerAd.load(BannerAdRequest.Builder(AD_UNIT_ID, adSize).build())) {
        is AdLoadResult.Success -> {
          bannerAdState = result.ad
        }
        is AdLoadResult.Failure -> {
          showToast("Banner failed to load.")
          Log.w(Constant.TAG, "Banner ad failed to load: $result.error")
        }
      }
    }
  }
}

विज्ञापन रीफ़्रेश करना

अगर आपने विज्ञापन यूनिट को रीफ़्रेश करने के लिए कॉन्फ़िगर किया है, तो विज्ञापन लोड न होने पर आपको किसी दूसरे विज्ञापन का अनुरोध करने की ज़रूरत नहीं है. GMA Next-Gen SDK Ad Manager के यूज़र इंटरफ़ेस (यूआई) में तय की गई रीफ़्रेश दर का पालन करता है. अगर आपने रीफ़्रेश करने की सुविधा चालू नहीं की है, तो नया अनुरोध करें. विज्ञापन यूनिट रीफ़्रेश करने के बारे में ज़्यादा जानने के लिए, मोबाइल ऐप्लिकेशन में दिखने वाले विज्ञापनों के लिए रीफ़्रेश दर लेख पढ़ें. इस लेख में, रीफ़्रेश दर सेट करने के बारे में भी बताया गया है.

विज्ञापन संसाधन को रिलीज़ करना

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

विज्ञापन के संसाधन को रिलीज़ करने के लिए, विज्ञापन को व्यू हैरारकी से हटाएं और उसके सभी रेफ़रंस हटा दें:

Kotlin

// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
  parentView.removeView(adView)
}

// Destroy the banner ad resources.
adView?.destroy()

// Drop reference to the banner ad.
adView = null

Java

// Remove banner from view hierarchy.
if (adView.getParent() instanceof ViewGroup) {
  ((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
// Drop reference to the banner ad.
adView = null;

Jetpack Compose


// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { bannerAdState?.destroy() } }

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

विज्ञापन के लाइफ़साइकल में कई इवेंट के लिए सुना जा सकता है. इनमें विज्ञापन इंप्रेशन और क्लिक के साथ-साथ विज्ञापन खोलने और बंद करने के इवेंट शामिल हैं. हमारा सुझाव है कि बैनर दिखाने से पहले, कॉलबैक सेट करें.

Kotlin

BannerAd.load(
  BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.adEventCallback =
        object : BannerAdEventCallback {
          override fun onAdImpression() {
            // Banner ad recorded an impression.
          }

          override fun onAdClicked() {
            // Banner ad recorded a click.
          }

          override fun onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          override fun onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          override fun onAdFailedToShowFullScreenContent(
            fullScreenContentError: FullScreenContentError
          ) {
            // Banner ad failed to show.
          }
        }
    }
    // ...
  }
)

Java

BannerAd.load(
    new BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setAdEventCallback(new BannerAdEventCallback() {
          @Override
          public void onAdImpression() {
            // Banner ad recorded an impression.
          }

          @Override
          public void onAdClicked() {
            // Banner ad recorded a click.
          }

          @Override
          public void onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          @Override
          public void onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          @Override
          public void onAdFailedToShowFullScreenContent(
              @NonNull FullScreenContentError fullScreenContentError) {
            // Banner ad failed to show.
          }
        });

        // ...
      }
    });

विज्ञापन रीफ़्रेश करने के लिए कॉलबैक

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

Kotlin

BannerAd.load(
  BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          // Set the ad refresh callbacks.
          override fun onAdRefreshed() {
            // Called when the ad refreshes.
          }

          override fun onAdFailedToRefresh(loadAdError: LoadAdError) {
            // Called when the ad fails to refresh.
          }
        }

      // ...
    }
  }
)

Java

BannerAd.load(
    new BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setBannerAdRefreshCallback(
            // Set the ad refresh callbacks.
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Called when the ad refreshes.
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Called when the ad fails to refresh.
              }
            });
        // ...
      }
    });

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

बैनर विज्ञापन व्यू में वीडियो विज्ञापन सही तरीके से दिखाने के लिए, हार्डवेयर ऐक्सलरेशन चालू होना चाहिए.

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

हार्डवेयर से तेज़ी लाने की सुविधा चालू करना

अगर हार्डवेयर ऐक्सलरेशन को ग्लोबल लेवल पर चालू करने पर आपका ऐप्लिकेशन ठीक से काम नहीं करता है, तो इसे अलग-अलग गतिविधियों के लिए भी कंट्रोल किया जा सकता है. हार्डवेयर से तेज़ी लाने की सुविधा को चालू या बंद करने के लिए, AndroidManifest.xml में मौजूद <application> और <activity> एलिमेंट के लिए, android:hardwareAccelerated एट्रिब्यूट का इस्तेमाल किया जा सकता है. नीचे दिए गए उदाहरण में, पूरे ऐप्लिकेशन के लिए हार्डवेयर ऐक्सलरेशन चालू किया गया है. हालांकि, इसे एक गतिविधि के लिए बंद कर दिया गया है:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

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

GMA Next-Gen SDK के इस्तेमाल के बारे में बताने वाला उदाहरण के तौर पर दिया गया ऐप्लिकेशन डाउनलोड करें और चलाएं.