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

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

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

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

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

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

  1. NativeAdRequest-এ বিজ্ঞাপনের ধরন হিসেবে NativeAdType.CUSTOM_NATIVE ধরন অন্তর্ভুক্ত করুন।

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

Kotlin

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) {}
  },
)

Java

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) {}
    });

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

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট শনাক্ত করার জন্য ব্যবহৃত ফর্ম্যাট আইডি Ad Manager UI-তে ডেলিভারি ড্রপ-ডাউনের মধ্যে নেটিভ বিভাগে খুঁজে পাওয়া যাবে:

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

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

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

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

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

এই উদাহরণে দেখানো হয়েছে কীভাবে CustomNativeAd দেখাতে হয়:

Kotlin

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()
}

Java

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টি মিডিয়া কন্টেন্ট থাকলে, ভিডিও ছাড়া বিজ্ঞাপন দেখানোর বিকল্প পরিকল্পনা করুন।

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

Kotlin

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()
}

Java

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 আইকন রেন্ডার করে এবং উপযুক্ত ক্লিক আচরণ কনফিগার করে।

Kotlin

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

Java

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() পদ্ধতি কল করুন:

Kotlin

// Record an impression.
customNativeAd.recordImpression()

Java

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

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

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

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

Kotlin

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

Java

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

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

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

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

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

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

Kotlin

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

Java

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

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

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