فرمت‌های تبلیغاتی بومی سفارشی

علاوه بر قالب‌های بومی تعریف‌شده توسط سیستم، ناشران Ad Manager این گزینه را دارند که با تعریف فهرست‌های سفارشی دارایی‌ها، قالب‌های تبلیغاتی بومی خود را ایجاد کنند. به این فرمت‌های تبلیغاتی بومی سفارشی می‌گویند و می‌توانند با تبلیغات رزرو شده استفاده شوند. این به ناشران امکان می‌دهد تا داده‌های ساختار یافته دلخواه را به برنامه‌های خود ارسال کنند. این تبلیغات توسط شی NativeCustomFormatAd نمایش داده می شوند.

قالب‌های تبلیغاتی بومی سفارشی را بارگیری کنید

این راهنما نحوه بارگیری و نمایش قالب‌های تبلیغات بومی سفارشی را توضیح می‌دهد.

یک آگهی بومی سفارشی بارگیری کنید

برای بارگیری یک تبلیغ بومی سفارشی، موارد زیر را انجام دهید:

  1. نوع NativeAdType.CUSTOM_NATIVE را به عنوان یک نوع تبلیغ در NativeAdRequest وارد کنید.

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

شناسه فرمت آگهی بومی سفارشی

شناسه قالبی که برای شناسایی یک قالب آگهی بومی سفارشی استفاده می‌شود را می‌توانید در رابط کاربری Ad Manager در بخش Native در قسمت کشویی Delivery پیدا کنید:

هر شناسه فرمت تبلیغات بومی سفارشی در کنار نام آن ظاهر می شود. با کلیک بر روی یکی از نام ها به صفحه جزئیات نمایش داده می شود که اطلاعات مربوط به فیلدهای قالب را نشان می دهد:

از اینجا، فیلدهای فردی را می توان اضافه، ویرایش و حذف کرد. به نام هر یک از دارایی ها توجه کنید. نام کلیدی است که برای دریافت داده‌های هر دارایی هنگام نمایش قالب آگهی بومی سفارشی شما استفاده می‌شود.

نمایش فرمت های تبلیغاتی بومی سفارشی

قالب‌های تبلیغات بومی سفارشی با قالب‌های تعریف‌شده توسط سیستم از این نظر متفاوت است که ناشران این قدرت را دارند که فهرستی از دارایی‌های خود را که یک تبلیغ را تشکیل می‌دهند، تعریف کنند. بنابراین، روند نمایش یک با فرمت های تعریف شده توسط سیستم از چند جهت متفاوت است:

  1. دارایی های متن و تصویر از طریق دریافت کننده های getText() و getImage() که نام فیلد را به عنوان پارامتر می گیرند در دسترس هستند.
  2. از آنجایی که هیچ کلاس ViewGroup اختصاصی برای ثبت نام در Google وجود ندارد، باید نمایش ها و کلیک ها را به صورت دستی ثبت کنید.
  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 انجام دهید.

مثال زیر فرض می‌کند که شما یک عنصر <ImageView /> را در سلسله‌مراتب view خود برای نگه داشتن لوگوی AdChoices تعریف کرده‌اید.

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

برداشت ها را ضبط کنید و کلیک ها را گزارش دهید

برنامه شما مسئول ثبت نمایش‌ها و گزارش رویدادهای کلیک به Google Mobile Ads SDK (بتا) است.

برداشت ها را ثبت کنید

برای ثبت یک نمایش برای یک تبلیغ بومی سفارشی، متد recordImpression() آگهی را فراخوانی کنید:

کاتلین

// Record an impression.
customNativeAd.recordImpression()

جاوا

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

اگر برنامه شما به طور تصادفی دو بار برای یک تبلیغ روش را فراخوانی کند، SDK به طور خودکار از ثبت یک نمایش تکراری برای یک درخواست جلوگیری می کند.

گزارش کلیک ها

برای گزارش به SDK مبنی بر اینکه کلیک روی نمای دارایی رخ داده است، متد performClick() آگهی را فراخوانی کنید. نام دارایی را با استفاده از همان رشته ای که در رابط کاربری Ad Manager تعریف کرده اید، روی آن کلیک کنید.

کاتلین

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

جاوا

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

توجه داشته باشید که لازم نیست این روش را برای هر نمای مرتبط با تبلیغ خود فراخوانی کنید. اگر فیلد دیگری به نام «Caption» داشتید که قرار بود نمایش داده شود اما کاربر روی آن کلیک یا ضربه نخورد، برنامه شما برای مشاهده آن دارایی نیازی به تماس performClick ندارد.

به اقدامات کلیک سفارشی پاسخ دهید

هنگامی که یک کلیک روی یک تبلیغ با فرمت سفارشی انجام می شود، سه پاسخ ممکن از SDK وجود دارد که به این ترتیب تلاش می شود:

  1. اگر OnCustomClickListener ارائه شده بود، فراخوانی کنید.
  2. برای هر یک از URL های پیوند عمیق آگهی، سعی کنید یک حل کننده محتوا را پیدا کنید و اولین موردی را که حل می شود شروع کنید.
  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 های ردیابی شخص ثالث را که برای خلاق تنظیم شده اند، پینگ کند و کارهای دیگر را در پشت صحنه بدون هیچ کد اضافی انجام دهد.