নেটিভ বিজ্ঞাপন

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড (বিটা) নতুন-নির্বাচিত অ্যান্ড্রয়েড আইওএস

যখন একটি নেটিভ বিজ্ঞাপন লোড হয়, GMA Next-Gen SDK সংশ্লিষ্ট বিজ্ঞাপন ফরম্যাটের জন্য লিসেনারকে কল করে। এরপর বিজ্ঞাপনটি দেখানোর দায়িত্ব আপনার অ্যাপের, যদিও তা সঙ্গে সঙ্গেই করতে হবে এমন কোনো বাধ্যবাধকতা নেই। সিস্টেম-সংজ্ঞায়িত বিজ্ঞাপন ফরম্যাটগুলো প্রদর্শন করা সহজ করার জন্য, SDK কিছু দরকারি রিসোর্স প্রদান করে, যা নিচে বর্ণনা করা হলো।

NativeAdView ক্লাসটি সংজ্ঞায়িত করুন

একটি NativeAdView ক্লাস সংজ্ঞায়িত করুন। এই ক্লাসটি একটি ViewGroup ক্লাস এবং এটি NativeAdView ক্লাসের শীর্ষ-স্তরের ধারক। প্রতিটি নেটিভ অ্যাড ভিউতে নেটিভ অ্যাড অ্যাসেট থাকে, যেমন MediaView ভিউ এলিমেন্ট বা Title ভিউ এলিমেন্ট, যা অবশ্যই NativeAdView অবজেক্টের একটি চাইল্ড হতে হবে।

এক্সএমএল লেআউট

আপনার প্রজেক্টে একটি XML NativeAdView যোগ করুন:

<com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical">
        <LinearLayout
        android:orientation="horizontal">
          <ImageView
          android:id="@+id/ad_app_icon" />
          <TextView
            android:id="@+id/ad_headline" />
        </LinearLayout>
        <!--Add remaining assets such as the image and media view.-->
    </LinearLayout>
</com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView>

জেটপ্যাক কম্পোজ

  1. JetpackCompose Utilities ফোল্ডারটি অন্তর্ভুক্ত করুন। এই ফোল্ডারটিতে NativeAdView অবজেক্ট এবং অ্যাসেট কম্পোজ করার জন্য সহায়ক টুল রয়েছে।

একটি NativeAdView রচনা করুন :

  import com.google.android.gms.compose_util.NativeAdAttribution
  import com.google.android.gms.compose_util.NativeAdView

  @Composable
  /** Display a native ad with a user defined template. */
  fun DisplayNativeAdView(nativeAd: NativeAd) {
      NativeAdView {
          // Display the ad attribution.
          NativeAdAttribution(text = context.getString("Ad"))
          // Add remaining assets such as the image and media view.
        }
    }

লোড হওয়া নেটিভ বিজ্ঞাপনটি পরিচালনা করুন

যখন একটি নেটিভ বিজ্ঞাপন লোড হয়, তখন কলব্যাক ইভেন্টটি হ্যান্ডেল করুন, নেটিভ বিজ্ঞাপন ভিউটি ইনফ্লেট করুন এবং এটিকে ভিউ হায়ারার্কিতে যুক্ত করুন:

কোটলিন

// Build an ad request with native ad options to customize the ad.
val adTypes = listOf(NativeAd.NativeAdType.NATIVE)
val adRequest = NativeAdRequest
  .Builder("ca-app-pub-3940256099942544/2247696110", adTypes)
  .build()

val adCallback =
  object : NativeAdLoaderCallback {
    override fun onNativeAdLoaded(nativeAd: NativeAd) {
      activity?.runOnUiThread {

        val nativeAdBinding = NativeAdBinding.inflate(layoutInflater)
        val adView = nativeAdBinding.root
        val frameLayout = myActivityLayout.nativeAdPlaceholder

        // Populate and register the native ad asset views.
        displayNativeAd(nativeAd, nativeAdBinding)

        // Remove all old ad views and add the new native ad
        // view to the view hierarchy.
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
      }
    }
  }

// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback)

জাভা

// Build an ad request with native ad options to customize the ad.
List<NativeAd.NativeAdType> adTypes = Arrays.asList(NativeAd.NativeAdType.NATIVE);
NativeAdRequest adRequest = new NativeAdRequest
                                .Builder("ca-app-pub-3940256099942544/2247696110", adTypes)
                                .build();

NativeAdLoaderCallback adCallback = new NativeAdLoaderCallback() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
      if (getActivity() != null) {
        getActivity()
          .runOnUiThread(() -> {
            // Inflate the native ad view and add it to the view hierarchy.
            NativeAdBinding nativeAdBinding = NativeAdBinding.inflate(getLayoutInflater());
            NativeAdView adView = (NativeAdView) nativeAdBinding.getRoot();
            FrameLayout frameLayout = myActivityLayout.nativeAdPlaceholder;

            // Populate and register the native ad asset views.
            displayNativeAd(nativeAd, nativeAdBinding);

            // Remove all old ad views and add the new native ad
            // view to the view hierarchy.
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        });
      }
    }
};

// Load the native ad with our request and callback.
NativeAdLoader.load(adRequest, adCallback);

মনে রাখবেন যে, একটি নির্দিষ্ট নেটিভ অ্যাডের জন্য সমস্ত অ্যাসেট অবশ্যই NativeAdView লেআউটের ভিতরে রেন্ডার করতে হবে। যখন নেটিভ অ্যাসেটগুলি নেটিভ অ্যাড ভিউ লেআউটের বাইরে রেন্ডার করা হয়, তখন GMA Next-Gen SDK একটি সতর্কবার্তা লগ করার চেষ্টা করে।

অ্যাড ভিউ ক্লাসগুলিতে প্রতিটি স্বতন্ত্র অ্যাসেটের জন্য ব্যবহৃত ভিউ রেজিস্টার করার এবং NativeAd অবজেক্টটি রেজিস্টার করার জন্য মেথডও রয়েছে। এইভাবে ভিউগুলি রেজিস্টার করার ফলে SDK স্বয়ংক্রিয়ভাবে নিম্নলিখিত কাজগুলি পরিচালনা করতে পারে:

  • ক্লিক রেকর্ড করা
  • স্ক্রিনে প্রথম পিক্সেলটি দৃশ্যমান হওয়ার সাথে সাথে ইম্প্রেশন রেকর্ড করা হয়।
  • AdChoices ওভারলে প্রদর্শন করা হচ্ছে

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

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি নেটিভ বিজ্ঞাপন প্রদর্শন করতে হয়:

কোটলিন

private fun displayNativeAd(nativeAd: NativeAd, nativeAdBinding : NativeAdBinding) {
  // Set the native ad view elements.
  val nativeAdView = nativeAdBinding.root
  nativeAdView.advertiserView = nativeAdBinding.adAdvertiser
  nativeAdView.bodyView = nativeAdBinding.adBody
  nativeAdView.callToActionView = nativeAdBinding.adCallToAction
  nativeAdView.headlineView = nativeAdBinding.adHeadline
  nativeAdView.iconView = nativeAdBinding.adAppIcon
  nativeAdView.priceView = nativeAdBinding.adPrice
  nativeAdView.starRatingView = nativeAdBinding.adStars
  nativeAdView.storeView = nativeAdBinding.adStore

  // Set the view element with the native ad assets.
  nativeAdBinding.adAdvertiser.text = nativeAd.advertiser
  nativeAdBinding.adBody.text = nativeAd.body
  nativeAdBinding.adCallToAction.text = nativeAd.callToAction
  nativeAdBinding.adHeadline.text = nativeAd.headline
  nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.icon?.drawable)
  nativeAdBinding.adPrice.text = nativeAd.price
  nativeAd.starRating?.toFloat().let { value ->
    nativeAdBinding.adStars.rating = value
  }
  nativeAdBinding.adStore.text = nativeAd.store

  // Hide views for assets that don't have data.
  nativeAdBinding.adAdvertiser.visibility = getAssetViewVisibility(nativeAd.advertiser)
  nativeAdBinding.adBody.visibility = getAssetViewVisibility(nativeAd.body)
  nativeAdBinding.adCallToAction.visibility = getAssetViewVisibility(nativeAd.callToAction)
  nativeAdBinding.adHeadline.visibility = getAssetViewVisibility(nativeAd.headline)
  nativeAdBinding.adAppIcon.visibility = getAssetViewVisibility(nativeAd.icon)
  nativeAdBinding.adPrice.visibility = getAssetViewVisibility(nativeAd.price)
  nativeAdBinding.adStars.visibility = getAssetViewVisibility(nativeAd.starRating)
  nativeAdBinding.adStore.visibility = getAssetViewVisibility(nativeAd.store)

  // Inform GMA Next-Gen SDK that you have finished populating
  // the native ad views with this native ad.
  nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia)
}

/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return [View.VISIBLE] if the asset is not null, [View.INVISIBLE] otherwise.
*/
private fun getAssetViewVisibility(asset: Any?): Int {
  return if (asset == null) View.INVISIBLE else View.VISIBLE
}

জাভা

private void displayNativeAd(ad: NativeAd, nativeAdBinding : NativeAdBinding) {
  // Set the native ad view elements.
  NativeAdView nativeAdView = nativeAdBinding.getRoot();
  nativeAdView.setAdvertiserView(nativeAdBinding.adAdvertiser);
  nativeAdView.setBodyView(nativeAdBinding.adBody);
  nativeAdView.setCallToActionView(nativeAdBinding.adCallToAction);
  nativeAdView.setHeadlineView(nativeAdBinding.adHeadline);
  nativeAdView.setIconView(nativeAdBinding.adAppIcon);
  nativeAdView.setPriceView(nativeAdBinding.adPrice);
  nativeAdView.setStarRatingView(nativeAdBinding.adStars);
  nativeAdView.setStoreView(nativeAdBinding.adStore);

  // Set the view element with the native ad assets.
  nativeAdBinding.adAdvertiser.setText(nativeAd.getAdvertiser());
  nativeAdBinding.adBody.setText(nativeAd.getBody());
  nativeAdBinding.adCallToAction.setText(nativeAd.getCallToAction());
  nativeAdBinding.adHeadline.setText(nativeAd.getHeadline());
  if (nativeAd.getIcon() != null) {
      nativeAdBinding.adAppIcon.setImageDrawable(nativeAd.getIcon().getDrawable());
  }
  nativeAdBinding.adPrice.setText(nativeAd.getPrice());
  if (nativeAd.getStarRating() != null) {
      nativeAdBinding.adStars.setRating(nativeAd.getStarRating().floatValue());
  }
  nativeAdBinding.adStore.setText(nativeAd.getStore());

  // Hide views for assets that don't have data.
  nativeAdBinding.adAdvertiser.setVisibility(getAssetViewVisibility(nativeAd.getAdvertiser()));
  nativeAdBinding.adBody.setVisibility(getAssetViewVisibility(nativeAd.getBody()));
  nativeAdBinding.adCallToAction.setVisibility(getAssetViewVisibility(nativeAd.getCallToAction()));
  nativeAdBinding.adHeadline.setVisibility(getAssetViewVisibility(nativeAd.getHeadline()));
  nativeAdBinding.adAppIcon.setVisibility(getAssetViewVisibility(nativeAd.getIcon()));
  nativeAdBinding.adPrice.setVisibility(getAssetViewVisibility(nativeAd.getPrice()));
  nativeAdBinding.adStars.setVisibility(getAssetViewVisibility(nativeAd.getStarRating()));
  nativeAdBinding.adStore.setVisibility(getAssetViewVisibility(nativeAd.getStore()));

  // Inform GMA Next-Gen SDK that you have finished populating
  // the native ad views with this native ad.
  nativeAdView.registerNativeAd(nativeAd, nativeAdBinding.adMedia);
}

/**
* Determines the visibility of an asset view based on the presence of its asset.
*
* @param asset The native ad asset to check for nullability.
* @return {@link View#VISIBLE} if the asset is not null, {@link View#INVISIBLE} otherwise.
*/
private int getAssetViewVisibility(Object asset) {
    return (asset == null) ? View.INVISIBLE : View.VISIBLE;
}

AdChoices ওভারলে

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

বিজ্ঞাপন অ্যাট্রিবিউশন

এই ভিউটি যে একটি বিজ্ঞাপন, তা বোঝানোর জন্য আপনাকে অবশ্যই একটি বিজ্ঞাপন অ্যাট্রিবিউশন প্রদর্শন করতে হবে। আমাদের নীতি নির্দেশিকায় এ বিষয়ে আরও জানুন।

ক্লিকগুলি পরিচালনা করুন

নেটিভ অ্যাড ভিউ-এর উপরে বা ভিতরে কোনো ভিউতে কাস্টম ক্লিক হ্যান্ডলার প্রয়োগ করবেন না। অ্যাড ভিউ অ্যাসেটগুলিতে করা ক্লিকগুলি SDK দ্বারা পরিচালিত হয়, যদি আপনি অ্যাসেট ভিউগুলি সঠিকভাবে পূরণ এবং রেজিস্টার করেন।

ক্লিক শোনার জন্য, GMA Next-Gen SDK ক্লিক কলব্যাক প্রয়োগ করুন:

কোটলিন

private fun setEventCallback(nativeAd: NativeAd) {
  nativeAd.adEventCallback =
    object : NativeAdEventCallback {
      override fun onAdClicked() {
        Log.d(Constant.TAG, "Native ad recorded a click.")
      }
    }
}

জাভা

private void setEventCallback(NativeAd nativeAd) {
  nativeAd.setAdEventCallback(new NativeAdEventCallback() {
      @Override
      public void onAdClicked() {
        Log.d(Constant.TAG, "Native ad recorded a click.");
      }
  });
}

ইমেজস্কেলটাইপ

ছবি প্রদর্শনের জন্য MediaView ক্লাসের একটি ImageScaleType প্রপার্টি থাকে। আপনি যদি MediaView তে কোনো ছবির স্কেল পরিবর্তন করতে চান, তাহলে MediaView এর setImageScaleType() মেথড ব্যবহার করে সংশ্লিষ্ট ImageView.ScaleType সেট করুন:

কোটলিন

nativeAdViewBinding.mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP

জাভা

nativeAdViewBinding.mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);

মিডিয়া কন্টেন্ট

MediaContent ক্লাসটি নেটিভ অ্যাডের মিডিয়া কন্টেন্ট সম্পর্কিত ডেটা ধারণ করে, যা MediaView ক্লাস ব্যবহার করে প্রদর্শিত হয়। যখন MediaView এর mediaContent প্রপার্টি একটি MediaContent ইনস্ট্যান্স দিয়ে সেট করা হয়:

  • যদি কোনো ভিডিও অ্যাসেট উপলব্ধ থাকে, তবে তা বাফার হয়ে MediaView এর ভেতরে প্লে হতে শুরু করে। hasVideoContent() চেক করে আপনি জানতে পারবেন যে কোনো ভিডিও অ্যাসেট উপলব্ধ আছে কি না।

  • যদি বিজ্ঞাপনটিতে কোনো ভিডিও অ্যাসেট না থাকে, তাহলে তার পরিবর্তে mainImage অ্যাসেটটি ডাউনলোড করে MediaView এর ভেতরে রাখা হয়।

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

একটি নেটিভ বিজ্ঞাপন দেখানোর পর, বিজ্ঞাপনটি ধ্বংস করুন। নিচের উদাহরণটি একটি নেটিভ বিজ্ঞাপন ধ্বংস করে:

কোটলিন

nativeAd.destroy()

জাভা

nativeAd.destroy();

পরবর্তী পদক্ষেপ

নিম্নলিখিত বিষয়গুলো অন্বেষণ করুন:

উদাহরণ

GMA Next-Gen SDK এর ব্যবহার প্রদর্শনকারী উদাহরণ অ্যাপটি ডাউনলোড করে চালান।