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

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

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

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

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

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

  1. NativeAdRequest এ বিজ্ঞাপনের ধরণ হিসেবে NativeAdType.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 এর About This Ad পৃষ্ঠার একটি লিঙ্ক প্রয়োজন। কাস্টম নেটিভ বিজ্ঞাপনগুলি বাস্তবায়নের সময়, 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 নেক্সট জেন 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. একটি ব্রাউজার খুলুন এবং বিজ্ঞাপনের গন্তব্য URL-এ যান।

একটি কাস্টম ক্লিক অ্যাকশন বাস্তবায়ন করতে, একটি 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-কে জানিয়েছে যে একটি ক্লিক হয়েছে, তাহলে SDK কেন ঘুরে অ্যাপে রিপোর্ট করবে?

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