কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট ব্যবহার করুন,কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট ব্যবহার করুন

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

কাস্টম নেটিভ বিজ্ঞাপন ফরম্যাট লোড করুন

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

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

একটি কাস্টম নেটিভ বিজ্ঞাপন লোড করতে, নিম্নলিখিতগুলি করুন:

  1. NativeAdRequestNativeAdType.CUSTOM_NATIVE টাইপটিকে একটি বিজ্ঞাপনের ধরণ হিসেবে অন্তর্ভুক্ত করুন।

  2. কাস্টম নেটিভ বিজ্ঞাপনের ফরম্যাট আইডি সেট করুন।

কোটলিন

val adRequest =
  NativeAdRequest.Builder("AD_UNIT_ID", listOf(NativeAdType.CUSTOM_NATIVE))
    .setCustomFormatIds(listOf("CUSTOM_NATIVE_FORMAT_ID"))
    .build()

// Load the native ad with the ad request and callback.
NativeAdLoader.load(
  adRequest,
  object : NativeAdLoaderCallback {
    override fun onCustomNativeAdLoaded(customNativeAd: CustomNativeAd) {
      // TODO: Store the custom native ad.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {}
  },
)

জাভা

NativeAdRequest adRequest =
    new NativeAdRequest.Builder("AD_UNIT_ID", List.of(NativeAd.NativeAdType.CUSTOM_NATIVE))
        .setCustomFormatIds(Arrays.asList("CUSTOM_NATIVE_FORMAT_ID"))
        .build();

// Load the native ad with the ad request and callback.
NativeAdLoader.load(
    adRequest,
    new NativeAdLoaderCallback() {
      @Override
      public void onCustomNativeAdLoaded(@NonNull CustomNativeAd customNativeAd) {
        // TODO: Store the custom native ad.
      }

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

কাস্টম নেটিভ বিজ্ঞাপন ফরম্যাট আইডি

কাস্টম নেটিভ অ্যাড ফরম্যাট শনাক্ত করতে ব্যবহৃত ফরম্যাট আইডিটি অ্যাড ম্যানেজার UI-এর নেটিভ সেকশনের ডেলিভারি ড্রপ-ডাউনের ভেতরে পাওয়া যাবে:

প্রতিটি কাস্টম নেটিভ অ্যাড ফরম্যাটের আইডি তার নামের পাশে প্রদর্শিত হয়। নামগুলোর কোনো একটিতে ক্লিক করলে একটি ডিটেইলস স্ক্রিনে নিয়ে যাওয়া হয়, যেখানে ফরম্যাটটির ফিল্ডগুলো সম্পর্কে তথ্য দেখানো হয়:

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

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট প্রদর্শন করুন

কাস্টম নেটিভ বিজ্ঞাপন ফরম্যাটগুলো সিস্টেম-সংজ্ঞায়িত ফরম্যাট থেকে এই কারণে আলাদা যে, প্রকাশকদের একটি বিজ্ঞাপন তৈরির জন্য প্রয়োজনীয় অ্যাসেটগুলোর নিজস্ব তালিকা নির্ধারণ করার ক্ষমতা থাকে। তাই, এটি প্রদর্শনের প্রক্রিয়াটি সিস্টেম-সংজ্ঞায়িত ফরম্যাটগুলো থেকে কয়েকটি দিক দিয়ে ভিন্ন হয়:

  1. getText() এবং getImage() গেটারগুলোর মাধ্যমে টেক্সট এবং ইমেজ অ্যাসেট পাওয়া যায়, যেগুলো প্যারামিটার হিসেবে ফিল্ডের নাম গ্রহণ করে।
  2. যেহেতু গুগলে নিবন্ধন করার জন্য কোনো নির্দিষ্ট ViewGroup ক্লাস নেই, তাই আপনাকে ইম্প্রেশন এবং ক্লিক ম্যানুয়ালি রেকর্ড করতে হবে।
  3. একটি কাস্টম নেটিভ অ্যাডের মিডিয়া কন্টেন্ট null থাকে, যদি অ্যাডটিতে কোনো ভিডিও অ্যাসেট না থাকে।

এই উদাহরণটি আপনাকে দেখাবে কিভাবে একটি CustomNativeAd প্রদর্শন করতে হয়:

কোটলিন

private fun displayCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
  // Render the text elements.

  // The `customNativeAdBinding` is the layout binding for the ad container that
  // contains all `CustomNativeAd` assets.
  customNativeAdBinding.headline.text = customNativeAd.getText("Headline")
  customNativeAdBinding.caption.text = customNativeAd.getText("Caption")

  // If the main asset is an image, render it with an ImageView.
  val imageView = ImageView(context)
  imageView.adjustViewBounds = true
  imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
  imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
  customNativeAdBinding.mediaPlaceholder.addView(imageView)

  // Render the ad choices icon.
  renderAdChoices(customNativeAd)

  // Record an impression.
  customNativeAd.recordImpression()
}

জাভা

private void displayCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
  // Render the text elements.

  // The `customNativeAdBinding` is the layout binding for the ad container that
  // contains all `CustomNativeAd` assets.
  if (customNativeAdBinding != null) {
    customNativeAdBinding.headline.setText(customNativeAd.getText("Headline"));
    customNativeAdBinding.caption.setText(customNativeAd.getText("Caption"));

    ImageView imageView = new ImageView(context);
    imageView.setAdjustViewBounds(true);
    imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
    imageView.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            customNativeAd.performClick("MainImage");
          }
        });
    customNativeAdBinding.mediaPlaceholder.addView(imageView);

    // Render the ad choices icon.
    renderAdChoices(customNativeAd);

    // Record an impression.
    customNativeAd.recordImpression();
  }
}

কাস্টম নেটিভ বিজ্ঞাপন ফরম্যাটের জন্য নেটিভ ভিডিও

কাস্টম ফরম্যাট তৈরি করার সময়, আপনার কাছে ফরম্যাটটিকে ভিডিওর জন্য উপযুক্ত করে তোলার বিকল্প থাকে।

আপনার অ্যাপ বাস্তবায়নে, মিডিয়া কন্টেন্ট পেতে আপনি CustomNativeAd.getMediaContent() ব্যবহার করতে পারেন। এরপর আপনার মিডিয়া ভিউতে মিডিয়া কন্টেন্ট সেট করার জন্য setMediaContent() কল করুন। যদি বিজ্ঞাপনটির মিডিয়া কন্টেন্ট null হয়, তবে ভিডিও ছাড়া বিজ্ঞাপনটি দেখানোর জন্য বিকল্প পরিকল্পনা করুন।

নিম্নলিখিত উদাহরণটি পরীক্ষা করে দেখে যে বিজ্ঞাপনটিতে ভিডিও কন্টেন্ট আছে কিনা, এবং ভিডিও না থাকলে তার পরিবর্তে একটি ছবি প্রদর্শন করে:

কোটলিন

private fun displayVideoCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
  // Check whether the custom native ad has video content.
  val mediaContent = customNativeAd.mediaContent
  if (mediaContent != null && mediaContent.hasVideoContent) {
    // Render the media content in a MediaView.
    val mediaView = MediaView(context)
    mediaView.mediaContent = mediaContent
    customNativeAdBinding.mediaPlaceholder.addView(mediaView)
  } else {
    // Fall back to other assets defined on your custom native ad.
    val imageView = ImageView(context)
    imageView.adjustViewBounds = true
    imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
    customNativeAdBinding.mediaPlaceholder.addView(imageView)
  }

  // Record an impression.
  customNativeAd.recordImpression()
}

জাভা

private void displayVideoCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
  // Check whether the custom native ad has video content.
  MediaContent mediaContent = customNativeAd.getMediaContent();
  if (mediaContent != null && mediaContent.getHasVideoContent()) {
    // Render the media content in a MediaView.
    MediaView mediaView = new MediaView(context);
    mediaView.setMediaContent(mediaContent);
    customNativeAdBinding.mediaPlaceholder.addView(mediaView);
  } else {
    // Fall back to other assets defined on your custom native ad.
    ImageView imageView = new ImageView(context);
    imageView.setAdjustViewBounds(true);
    imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
    customNativeAdBinding.mediaPlaceholder.addView(imageView);
  }

  // Record an impression.
  customNativeAd.recordImpression();
}

একটি কাস্টম নেটিভ অ্যাডের ভিডিও অভিজ্ঞতা কীভাবে কাস্টমাইজ করবেন, সে সম্পর্কে আরও তথ্যের জন্য ভিডিও অ্যাডস দেখুন।

AdChoices আইকনটি রেন্ডার করুন

ডিজিটাল পরিষেবা আইন (DSA) সমর্থনের অংশ হিসেবে, ইউরোপীয় অর্থনৈতিক অঞ্চলে (EEA) পরিবেশিত রিজার্ভেশন বিজ্ঞাপনগুলিতে একটি AdChoices আইকন এবং Google-এর 'এই বিজ্ঞাপন সম্পর্কে' পৃষ্ঠার একটি লিঙ্ক থাকা আবশ্যক। কাস্টম নেটিভ বিজ্ঞাপন প্রয়োগ করার সময়, AdChoices আইকনটি রেন্ডার করার দায়িত্ব আপনার। আমরা সুপারিশ করি যে, মূল বিজ্ঞাপন অ্যাসেটগুলি রেন্ডার করার সময় আপনি AdChoices আইকনটি রেন্ডার করুন এবং এর জন্য ক্লিক লিসেনার সেট করুন।

নিম্নলিখিত উদাহরণটি ধরে নেয় যে আপনি আপনার ভিউ হায়ারার্কিতে AdChoices লোগোটি রাখার জন্য একটি <ImageView /> এলিমেন্ট সংজ্ঞায়িত করেছেন।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:id="@+id/adChoices"
        android:layout_width="15dp"
        android:layout_height="15dp"
        android:adjustViewBounds="true"
        android:contentDescription="AdChoices icon." />
</LinearLayout>

নিম্নলিখিত উদাহরণটি AdChoices আইকনটি প্রদর্শন করে এবং উপযুক্ত ক্লিক আচরণ কনফিগার করে।

কোটলিন

private fun renderAdChoices(customNativeAd: CustomNativeAd) {
  // Render the AdChoices image.
  val adChoiceAsset = customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
  if (adChoiceAsset != null) {
    customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.drawable)
    customNativeAdBinding.adchoices.visibility = View.VISIBLE
    customNativeAdBinding.adchoices.setOnClickListener {
      // Handle click. See the next section for more details.
      customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
    }
  } else {
    customNativeAdBinding.adchoices.visibility = View.GONE
  }
}

জাভা

private void renderAdChoices(CustomNativeAd customNativeAd) {
  // Render the AdChoices image.
  Image adChoiceAsset =
      customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
  if (adChoiceAsset != null) {
    if (customNativeAdBinding != null) {
      customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.getDrawable());
      customNativeAdBinding.adchoices.setVisibility(View.VISIBLE);
      customNativeAdBinding.adchoices.setOnClickListener(
          new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              // Handle click.
              customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
            }
          });
    }
  } else {
    if (customNativeAdBinding != null) {
      customNativeAdBinding.adchoices.setVisibility(View.GONE);
    }
  }
}

ইম্প্রেশন রেকর্ড করুন এবং ক্লিক রিপোর্ট করুন

আপনার অ্যাপটি ইম্প্রেশন রেকর্ড করা এবং GMA Next-Gen SDK -তে ক্লিক ইভেন্ট রিপোর্ট করার জন্য দায়ী।

রেকর্ড ইমপ্রেশন

একটি কাস্টম নেটিভ অ্যাডের জন্য ইম্প্রেশন রেকর্ড করতে, অ্যাডটির recordImpression() মেথডটি কল করুন:

কোটলিন

// Record an impression.
customNativeAd.recordImpression()

জাভা

// Record an impression.
customNativeAd.recordImpression();

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

রিপোর্ট ক্লিক

কোনো অ্যাসেট ভিউতে ক্লিক হয়েছে তা SDK-কে জানাতে, অ্যাডটির performClick() মেথডটি কল করুন। অ্যাড ম্যানেজার UI-তে আপনি যে স্ট্রিংটি নির্ধারণ করেছেন, সেটি ব্যবহার করে ক্লিক করা অ্যাসেটটির নাম প্রদান করুন।

কোটলিন

imageView.setOnClickListener { customNativeAd.performClick("MainImage") }

জাভা

imageView.setOnClickListener(
    new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        customNativeAd.performClick("MainImage");
      }
    });

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

কাস্টম ক্লিক অ্যাকশনগুলিতে সাড়া দিন

যখন কোনো কাস্টম ফরম্যাটের বিজ্ঞাপনে ক্লিক করা হয়, তখন SDK থেকে তিনটি সম্ভাব্য প্রতিক্রিয়া আসতে পারে, যা এই ক্রমে চেষ্টা করা হয়:

  1. যদি OnCustomClickListener প্রদান করা হয়ে থাকে, তবে সেটিকে কল করুন।
  2. বিজ্ঞাপনটির প্রতিটি ডিপ লিঙ্ক ইউআরএল-এর জন্য, একটি কন্টেন্ট রিজলভার খুঁজে বের করার চেষ্টা করুন এবং যেটি প্রথমে রিজলভ হয়, সেটি চালু করুন।
  3. একটি ব্রাউজার খুলুন এবং বিজ্ঞাপনটির গন্তব্য ইউআরএল-এ যান।

কাস্টম ক্লিক অ্যাকশন প্রয়োগ করতে, একটি OnCustomClickListener প্রদান করুন:

কোটলিন

customNativeAd.onCustomClickListener =
  object : OnCustomClickListener {
    override fun onCustomClick(assetName: String) {
      // Perform your custom action.
    }
  }

জাভা

customNativeAd.setOnCustomClickListener(
    new OnCustomClickListener() {
      @Override
      public void onCustomClick(@NonNull String assetName) {
        // Perform your custom action.
      }
    });

প্রথমত, কাস্টম ক্লিক লিসেনারের অস্তিত্ব অদ্ভুত মনে হতে পারে। কারণ, আপনার অ্যাপই তো এসডিকে-কে জানিয়েছে যে একটি ক্লিক হয়েছে, তাহলে এসডিকে কেন সেই তথ্যটি আবার অ্যাপকে জানাবে?

তথ্যের এই প্রবাহ কয়েকটি কারণে উপকারী, তবে সবচেয়ে গুরুত্বপূর্ণ হলো, এটি SDK-কে ক্লিকের প্রতিক্রিয়ার উপর নিয়ন্ত্রণ বজায় রাখতে সাহায্য করে। উদাহরণস্বরূপ, এটি কোনো অতিরিক্ত কোড ছাড়াই ক্রিয়েটিভের জন্য সেট করা থার্ড-পার্টি ট্র্যাকিং URL-গুলোতে স্বয়ংক্রিয়ভাবে পিং করতে পারে এবং নেপথ্যে অন্যান্য কাজও সামলাতে পারে।