إعلان مدمج مع المحتوى (متقدم)

عرض NativeAd

عند تحميل إعلان مُدمَج مع المحتوى، تستدعي "حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة" مستمع ملف تعريف الارتباط لشكل الإعلان المعنيّ. بعد ذلك، يصبح تطبيقك مسؤولاً عن عرض الإعلان، وليس بالضرورة أن يتم ذلك على الفور. لتسهيل عرض أشكال الإعلانات التي يحدّدها النظام، تقدّم حزمة تطوير البرامج (SDK) بعض الموارد المفيدة، كما هو описан أدناه.

الصف NativeAdView

بالنسبة إلى تنسيق NativeAd، تتوفّر فئة NativeAdView المقابلة. هذه الفئة هي ViewGroup التي يجب أن يستخدمها الناشرون كجذر للعنصر NativeAd. يقابل الرمز NativeAdView الفردي إعلانًا واحدًا مدمجًا مع المحتوى. يجب أن يكون كلّ عرض مستخدَم لعرض مواد عرض هذا الإعلان (ImageView الذي يعرض مادة عرض لقطة الشاشة، على سبيل المثال) عنصرًا فرعيًا للعنصرNativeAdView.

قد يبدو التسلسل الهرمي للعرض لإعلان مُدمج مع المحتوى يستخدم LinearLayout لعرض مشاهدات مواد العرض على النحو التالي:

<com.google.android.gms.ads.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.gms.ads.nativead.NativeAdView>

في ما يلي مثال على إنشاء NativeAdView و ملؤه بـ NativeAd:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "/21775744923/example/native")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with ID fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call native_ad_layout.xml
            // in the res/layout folder
            NativeAdView adView = (NativeAdView) getLayoutInflater()
                .inflate(R.layout.native_ad_layout, null);
            // This method sets the assets into the ad view.
            populateNativeAdView(nativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
});

Kotlin

val builder = AdLoader.Builder(this, "/21775744923/example/native")
    .forNativeAd { nativeAd ->
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with ID fl_adplaceholder) where the ad is to be placed.
        val frameLayout: FrameLayout = findViewById(R.id.fl_adplaceholder)
        // Assumes that your ad layout is in a file call native_ad_layout.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.native_ad_layout, null) as NativeAdView
        // This method sets the assets into the ad view.
        populateNativeAdView(nativeAd, adView)
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
    }

يُرجى العِلم أنّه يجب عرض جميع مواد عرض إعلان مدمج مع المحتوى معيّن داخل تنسيق NativeAdView. تحاول حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة تسجيل تحذير عند عرض مواد العرض المدمجة مع المحتوى خارج تنسيق عرض الإعلان المدمج مع المحتوى.

توفّر فئات عرض الإعلان أيضًا طُرقًا تُستخدَم لتسجيل طريقة العرض المستخدَمة لكل مادة عرض فردية، وطريقة لتسجيل عنصر NativeAd نفسه. يتيح تسجيل المشاهدات بهذه الطريقة لحزمة تطوير البرامج (SDK) معالجة المهام تلقائيًا، مثل:

  • تسجيل النقرات
  • تسجيل مرّات الظهور عندما يكون أول بكسل مرئيًا على الشاشة
  • عرض تراكب AdChoices لمواد إبداعية ممتلئة الشاشة في الفيديوهات السابقة ، وهي متاحة حاليًا لمجموعة محدّدة من الناشرين

تراكب خيارات الإعلان

تُضيف حزمة تطوير البرامج (SDK) تراكب "خيارات الإعلان" كمشاهدة إعلان عند عرض إعلان في الفيديوهات القديمة. إذا كان تطبيقك يستخدم ميزة "إعادة عرض الإعلانات المدمجة مع المحتوى"، اترك مساحة في الزاوية المفضّلة لعرض شعار AdChoices الذي يتم إدراجه تلقائيًا في عرض الإعلان المدمج مع المحتوى. من المهم أيضًا أن تظهر شارة "خيارات الإعلان"، لذا يجب اختيار ألوان الخلفية والصور بشكل مناسب. لمزيد من المعلومات عن مظهر التراكب و وظيفته، يُرجى الاطّلاع على إرشادات تنفيذ الإعلانات المدمجة مع المحتوى آليًا.

تحديد مصدر الإعلانات للإعلانات المدمجة مع المحتوى الآلية

عند عرض إعلانات مدمجة مع المحتوى آليًا، يجب عرض مصدر إعلان لتحديد أنّ العرض هو إعلان. يمكنك الاطّلاع على مزيد من المعلومات في إرشادات سياستنا.

مثال على الرمز البرمجي

في ما يلي خطوات عرض إعلان مدمج مع المحتوى:

  1. أنشئ مثيلًا لفئة NativeAdView.
  2. لكلّ مادة عرض إعلان يتم عرضها:

    1. املأ عرض مادة العرض بمادة العرض في عنصر الإعلان.
    2. سجِّل عرض مادة العرض باستخدام فئة NativeAdView.
  3. سجِّل العلامة MediaView إذا كان تنسيق الإعلان المدمج مع المحتوى يتضمّن مادة عرض وسائط كبيرة.

  4. سجِّل عنصر الإعلان في فئة NativeAdView.

في ما يلي مثال على دالة تعرِض NativeAd:

Java

private void displayNativeAd(ViewGroup parent, NativeAd ad) {

  // Inflate a layout and add it to the parent ViewGroup.
  LayoutInflater inflater = (LayoutInflater) parent.getContext()
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  NativeAdView adView = (NativeAdView) inflater
          .inflate(R.layout.ad_layout_file, parent);

  // Locate the view that will hold the headline, set its text, and call the
  // NativeAdView's setHeadlineView method to register it.
  TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
  headlineView.setText(ad.getHeadline());
  adView.setHeadlineView(headlineView);

  // Repeat the process for the other assets in the NativeAd
  // using additional view objects (Buttons, ImageViews, etc).

  // If the app is using a MediaView, it should be
  // instantiated and passed to setMediaView. This view is a little different
  // in that the asset is populated automatically, so there's one less step.
  MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
  adView.setMediaView(mediaView);

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad);

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews();

  // Place the AdView into the parent.
  parent.addView(adView);
}

Kotlin

fun displayNativeAd(parent: ViewGroup, ad: NativeAd) {

  // Inflate a layout and add it to the parent ViewGroup.
  val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
          as LayoutInflater
  val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView

  // Locate the view that will hold the headline, set its text, and use the
  // NativeAdView's headlineView property to register it.
  val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
  headlineView.text = ad.headline
  adView.headlineView = headlineView

  // Repeat the process for the other assets in the NativeAd using
  // additional view objects (Buttons, ImageViews, etc).

  val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
  adView.mediaView = mediaView

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad)

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews()

  // Place the AdView into the parent.
  parent.addView(adView)
}

في ما يلي المهام الفردية:

  1. تضخيم التنسيق

    Java

    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAdView adView = (NativeAdView) inflater
            .inflate(R.layout.ad_layout_file, parent);
    

    Kotlin

    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
    

    يعمل هذا الرمز على تضخيم تنسيق XML يحتوي على طرق عرض لعرض إعلان مضمّن ، ثمّ تحديد مرجع إلى NativeAdView. تجدر الإشارة إلى أنّه يمكنك أيضًا إعادة استخدام NativeAdView حالي إذا كان متوفّرًا في المقتطف أو النشاط، أو إنشاء مثيل ديناميكيًا بدون استخدام ملف تنسيق.

  2. ملء مشاهد مواد العرض وتسجيلها

    يحدِّد نموذج الرمز هذا موقع العرض المستخدَم لعرض العنوان، ويضبط نصه باستخدام مادة عرض السلسلة التي يوفّرها عنصر الإعلان، ويُسجِّله باستخدام عنصر NativeAdView:

    Java

    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);
    

    Kotlin

    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView
    

    يجب تكرار عملية تحديد موضع العرض وضبط قيمته وتسجيله باستخدام فئة عرض الإعلان لكل مادة عرض يوفّرها عنصر الإعلان المدمج الذي سيعرضه التطبيق.

  3. التعامل مع النقرات

    لا تنفِّذ أيّ معالجات نقرات مخصّصة على أيّ مشاهدات فوق عرض الإعلانات المدمجة أو داخله. تعالج حزمة تطوير البرامج (SDK) النقرات على مواد عرض الإعلانات شرط أن تتم بشكل صحيح تعبئة مشاهدات مواد العرض وتسجيلها، كما هو موضّح في القسم السابق.

    للاستماع إلى النقرات، نفِّذ دالة الاستدعاء الخاصة بالنقرة في "حزمة SDK لإعلانات Google على الأجهزة الجوّالة":

    Java

    AdLoader adLoader = new AdLoader.Builder(context, "/21775744923/example/native")
        // ...
        .withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                // Handle the failure by logging.
            }
            @Override
            public void onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build();
    

    Kotlin

    val adLoader = AdLoader.Builder(this, "/21775744923/example/native")
        // ...
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                // Handle the failure.
            }
            override fun onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build()
    
  4. تسجيل MediaView

    عليك استخدام مادة العرض MediaView بدلاً من مادة العرض ImageView إذا كنت تريد تضمين مادة عرض صورة رئيسية في تنسيق إعلانك المدمج.

    MediaView هو View خاص مصمّم لعرض مادة عرض الوسائط الرئيسية، سواء كانت فيديو أو صورة.

    يمكن تحديد MediaView في تنسيق XML أو إنشاؤه ديناميكيًا. يجب وضعه ضمن التسلسل الهرمي لعرض NativeAdView، تمامًا مثل أي عرض آخر لمادة العرض. على التطبيقات التي تستخدم MediaView تسجيلها في NativeAdView:

    Java

     // Populate and register the media asset view.
     nativeAdView.setMediaView(nativeAdBinding.adMedia);
    

    Kotlin

     // Populate and register the media asset view.
     nativeAdView.mediaView = nativeAdBinding.adMedia
    

    ImageScaleType

    تحتوي فئة MediaView على سمة ImageScaleType عند عرض الصور. إذا أردت تغيير طريقة تغيير حجم صورة في MediaView، اضبط ImageView.ScaleType المطابق باستخدام طريقةsetImageScaleType() MediaView:

    Java

    mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
    

    Kotlin

    mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
    

    MediaContent

    تحتوي فئة MediaContent على البيانات المتعلّقة بمحتوى الوسائط في الإعلان المدمَج، والذي يتم عرضه باستخدام فئة MediaView. عند ضبط سمة MediaView mediaContent باستخدام مثيل MediaContent:

    • إذا كانت مادة عرض الفيديو متاحة، يتم تخزينها مؤقتًا ويبدأ تشغيلها داخل MediaView. يمكنك معرفة ما إذا كانت مادة عرض الفيديو متاحة من خلال التحقّق مما يلي: hasVideoContent().

    • إذا لم يحتوي الإعلان على مادة عرض فيديو، يتم تنزيل مادة عرض mainImage ووضعها داخل MediaView بدلاً من ذلك.

    وmainImage هي تلقائيًا أول مادة عرض صورة يتم تنزيلها. في حال استخدام setReturnUrlsForImageAssets(true)، تكون قيمة mainImage هي null ويجب ضبط السمة mainImage على الصورة التي تم تنزيلها يدويًا. يُرجى العلم أنّه لن يتم استخدام هذه الصورة إلا في حال عدم توفّر مادة عرض فيديو.

  5. تسجيل عنصر الإعلان المدمج مع المحتوى

    تسجِّل هذه الخطوة الأخيرة عنصر الإعلان المدمج مع المحتوى في العرض المسؤول عن عرضه.

    Java

    adView.setNativeAd(ad);
    

    Kotlin

    adView.setNativeAd(ad)
    

إتلاف الإعلان

عند الانتهاء من عرض إعلانك المدمج مع المحتوى، يجب إزالته حتى تتم معالجة الإعلان بشكل صحيح.

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

اختبار رمز الإعلانات المدمجة مع المحتوى

الإعلانات المَبيعة مباشرةً

إذا أردت اختبار أداء الإعلانات المدمجة مع المحتوى المُباعة مباشرةً، يمكنك استخدام رقم تعريف الوحدة الإعلانية هذا في "مدير إعلانات Google":

/21775744923/example/native

تم إعداده لعرض نماذج من إعلانات تثبيت التطبيقات والإعلانات الصورية، بالإضافة إلى شكل إعلان مُدمَج مع المحتوى مخصّص باستخدام مواد العرض التالية:

  • العنوان (نص)
  • MainImage (صورة)
  • الترجمة (نص)

رقم تعريف النموذج لشكل الإعلان المدمج مع المحتوى المخصّص هو 10063170.

الإعلانات المدمجة مع المحتوى في "ملء الفراغات"

تقتصر ميزة "إضافة البيانات السابقة" في Ad Exchange على مجموعة محدّدة من الناشرين. لاختبار سلوك الإعلانات المدمجة مع المحتوى في الفيديوهات التي تمّ عرضها سابقًا، استخدِم هذه الوحدة الإعلانية في "مدير إعلانات Google":

/21775744923/example/native-backfill

ويعرض نماذج من إعلانات تثبيت التطبيقات وإعلانات المحتوى التي تتضمّن تراكب AdChoices.

تذكَّر تعديل الرمز للإشارة إلى أرقام تعريف الوحدة الإعلانية والنموذج الفعلية قبل نشر الإعلان.

أمثلة على GitHub

مثال على اكتمال تنفيذ الإعلانات المدمجة مع المحتوى:

Java Kotlin

الخطوات التالية

يمكنك استكشاف المواضيع التالية: