ব্যানার বিজ্ঞাপন

ব্যানার বিজ্ঞাপন হল আয়তক্ষেত্রাকার বিজ্ঞাপন যা একটি অ্যাপের লেআউটের একটি অংশ দখল করে। অ্যাঙ্কর করা অভিযোজিত ব্যানারগুলি হল ফিক্সড অ্যাসপেক্ট রেশিও বিজ্ঞাপন যা ব্যবহারকারীরা অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় স্ক্রিনে থাকে, হয় স্ক্রিনের উপরে বা নীচে অ্যাঙ্কর করা হয়।

এই নির্দেশিকাটি একটি Android অ্যাপে একটি নোঙ্গর করা অভিযোজিত ব্যানার বিজ্ঞাপন লোড করাকে কভার করে৷

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

টেস্ট বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যান্ড্রয়েড ব্যানারের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

ca-app-pub-3940256099942544/9214589741

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটি আপনার নিজের অ্যাপে ব্যবহার করতে পারেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

Google মোবাইল বিজ্ঞাপন SDK (বিটা) পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি সক্ষম করুন দেখুন৷

বিজ্ঞাপন দৃশ্য সংজ্ঞায়িত করুন

XML লেআউট

আপনার নোঙ্গর করা অভিযোজিত ব্যানার বিজ্ঞাপনের ধারক হিসাবে পরিবেশন করতে আপনার লেআউট XML ফাইলে একটি দৃশ্য যুক্ত করুন:

<?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">

  <FrameLayout
      android:id="@+id/banner_view_container"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent">

  </FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

জেটপ্যাক রচনা

কম্পোজ UI-এর মধ্যে একটি AndroidView উপাদান অন্তর্ভুক্ত করুন এবং ব্যানার বিজ্ঞাপন ধরে রাখার জন্য একটি 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()) },
      )
    }
  }
}

একটি বিজ্ঞাপন লোড করুন

  1. একটি বিজ্ঞাপন ইউনিট আইডি এবং একটি নোঙ্গর করা অভিযোজিত বিজ্ঞাপনের আকার সহ একটি BannerAdRequest অবজেক্ট তৈরি করুন৷
  2. BannerAd.load() কে কল করুন।
  3. BannerAd.getView() ভিউ হায়ারার্কিতে যোগ করুন।

কোটলিন

import com.google.android.libraries.ads.mobile.sdk.banner.AdSize
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError

class MainActivity : Activity() {

  private var bannerAd: BannerAd? = null
  private lateinit var binding: ActivityMainBinding
  private lateinit var adSize: AdSize
  private lateinit var bannerViewContainer: FrameLayout

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    // 320 is a placeholder value. Replace 320 with your banner container width.
    adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320)

    // Give the banner container a placeholder height to avoid a sudden layout
    // shifts when the ad loads.
    bannerViewContainer = binding.bannerViewContainer
    val bannerLayoutParams = bannerViewContainer.layoutParams
    bannerLayoutParams.height = adSize.getHeightInPixels(requireContext())
    bannerViewContainer.layoutParams = bannerLayoutParams

    // Step 1 - Create a BannerAdRequest object with ad unit ID and size.
    val adRequest = BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", adSize).build()

    // Step 2 - Load the ad.
    BannerAd.load(
      adRequest,
      object : AdLoadCallback<BannerAd> {
        override fun onAdLoaded(ad: BannerAd) {
          // Assign the loaded ad to the BannerAd object.
          bannerAd = ad
          // Step 3 - Call BannerAd.getView() to get the View and add it
          // to view hierarchy on the UI thread.
          activity?.runOnUiThread {
            binding.bannerViewContainer.addView(ad.getView(requireActivity()))
          }
        }

        override fun onAdFailedToLoad(loadAdError: LoadAdError) {
          bannerAd = null
        }
      },
    )
  }
}

জাভা

import com.google.android.libraries.ads.mobile.sdk.banner.AdSize;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest;
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback;
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;

public class MainActivity extends AppCompatActivity {

  private BannerAd bannerAd;
  private ActivityMainBinding binding;
  private AdSize adSize;
  private FrameLayout bannerViewContainer;

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    // 320 is a placeholder value. Replace 320 with your banner container width.
    adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320);

    // Give the banner container a placeholder height to avoid a sudden layout
    // shifts when the ad loads.
    bannerViewContainer = binding.bannerViewContainer;
    LayoutParams bannerLayoutParams = bannerViewContainer.getLayoutParams();
    bannerLayoutParams.height = adSize.getHeightInPixels(this);
    bannerViewContainer.setLayoutParams(bannerLayoutParams);

    // Step 1 - Create a BannerAdRequest object with ad unit ID and size.
    BannerAdRequest adRequest = new BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741",
        adSize).build();

    // Step 2 - Load the ad.
    BannerAd.load(
        adRequest,
        new AdLoadCallback<BannerAd>() {
          @Override
          public void onAdLoaded(@NonNull BannerAd ad) {
            // Assign the loaded ad to the BannerAd object.
            bannerAd = ad;
            // Step 3 - Call BannerAd.getView() to get the View and add it
            // to view hierarchy on the UI thread.
            runOnUiThread(
                () -> binding.bannerViewContainer.addView(ad.getView(MainActivity.this)));
          }

          @Override
          public void onAdFailedToLoad(@NonNull LoadAdError adError) {
            bannerAd = null;
          }
        });
  }
}

জেটপ্যাক রচনা

// 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")
        }
      }
    }
  }
}

একটি বিজ্ঞাপন রিফ্রেশ করুন

আপনি যদি রিফ্রেশ করার জন্য আপনার বিজ্ঞাপন ইউনিট কনফিগার করেন, বিজ্ঞাপনটি লোড হতে ব্যর্থ হলে আপনাকে অন্য বিজ্ঞাপনের অনুরোধ করতে হবে না। Google মোবাইল বিজ্ঞাপন SDK (বিটা) আপনার AdMob UI-তে নির্দিষ্ট করা যেকোনো রিফ্রেশ রেটকে সম্মান করে। আপনি যদি রিফ্রেশ সক্ষম না করে থাকেন তবে একটি নতুন অনুরোধ জারি করুন৷ বিজ্ঞাপন ইউনিট রিফ্রেশ সম্পর্কে আরও বিশদ বিবরণের জন্য, যেমন একটি রিফ্রেশ রেট সেট করা, ব্যানার বিজ্ঞাপনের জন্য স্বয়ংক্রিয় রিফ্রেশ ব্যবহার করুন দেখুন।

একটি বিজ্ঞাপন সংস্থান প্রকাশ করুন

যখন আপনি একটি ব্যানার বিজ্ঞাপন ব্যবহার করা শেষ করেন, আপনি ব্যানার বিজ্ঞাপনের সংস্থানগুলি প্রকাশ করতে পারেন৷

বিজ্ঞাপনের সংস্থান প্রকাশ করতে, আপনি ভিউ হায়ারার্কি থেকে বিজ্ঞাপনটি সরিয়ে ফেলবেন এবং এর সমস্ত রেফারেন্স বাদ দেবেন:

কোটলিন

// 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

জাভা

// 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;

জেটপ্যাক রচনা


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

বিজ্ঞাপন ঘটনা

আপনি বিজ্ঞাপনের লাইফ সাইকেলের বেশ কয়েকটি ইভেন্ট শুনতে পারেন, যার মধ্যে বিজ্ঞাপনের ছাপ এবং ক্লিক, সেইসাথে বিজ্ঞাপন খোলা এবং বন্ধ করা। ব্যানার দেখানোর আগে কলব্যাক সেট করার পরামর্শ দেওয়া হয়।

কোটলিন

BannerAd.load(
  BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", 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.
          }
        }
    }
    // ...
  }
)

জাভা

BannerAd.load(
    new BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", 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 রিফ্রেশ কলব্যাক বিজ্ঞাপন রিফ্রেশিং ইভেন্টগুলি পরিচালনা করে৷ আপনার ভিউ হায়ারার্কিতে বিজ্ঞাপন ভিউ যোগ করার আগে কলব্যাক সেট করা নিশ্চিত করুন। বিজ্ঞাপন রিফ্রেশিং সম্পর্কে বিস্তারিত জানার জন্য, একটি বিজ্ঞাপন রিফ্রেশ করুন দেখুন।

কোটলিন

BannerAd.load(
  BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", 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.
          }
        }

      // ...
    }
  }
)

জাভা

BannerAd.load(
    new BannerAdRequest.Builder("ca-app-pub-3940256099942544/9214589741", 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>

হার্ডওয়্যার ত্বরণ নিয়ন্ত্রণের বিকল্পগুলি সম্পর্কে আরও তথ্যের জন্য হার্ডওয়্যার ত্বরণ নির্দেশিকা দেখুন। মনে রাখবেন যে ক্রিয়াকলাপটি অক্ষম থাকলে হার্ডওয়্যার ত্বরণের জন্য পৃথক বিজ্ঞাপন দৃশ্যগুলি সক্ষম করা যাবে না, তাই ক্রিয়াকলাপে অবশ্যই হার্ডওয়্যার ত্বরণ সক্ষম থাকতে হবে।

Google মোবাইল বিজ্ঞাপন SDK (বিটা) ব্যবহার প্রদর্শন করে এমন উদাহরণ অ্যাপ ডাউনলোড করুন এবং চালান।