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

عرض إعلان مدمج مع المحتوى

عند تحميل إعلان مدمج مع المحتوى، تستدعي حزمة "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>


         // Other assets such as image or media view, call to action, etc follow.
         ...
    </LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>

إليك مثال يتم فيه إنشاء NativeAdView يعبئه بـ NativeAd:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "AD_UNIT_ID")
    .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 text, images and the native ad, etc into the ad
            // view.
            populateNativeAdView(nativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
});

Kotlin

val builder = AdLoader.Builder(this, "AD_UNIT_ID")
    .forNativeAd { nativeAd ->
        // 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 text, images and the native ad, etc into the ad
        // view.
        populateNativeAdView(nativeAd, adView)
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with id ad_frame) where the ad is to be placed.
        ad_frame.removeAllViews()
        ad_frame.addView(adView)
    }

تجدر الإشارة إلى أنّه يجب عرض كل مواد العرض لإعلان مدمج مع المحتوى معيّن داخل التنسيق NativeAdView تحاول حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" تسجيل تحذير في حال يتم عرض مواد العرض المدمجة مع المحتوى خارج تنسيق مشاهدة الإعلانات المدمجة مع المحتوى.

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

  • جارٍ تسجيل النقرات
  • تسجيل مرّات الظهور عند ظهور أول بكسل على الشاشة
  • عرض تراكب "خيارات الإعلان" لإعادة الإعلانات المدمجة مع المحتوى تصميمات الإعلانات - تقتصر حاليًا على مجموعة مختارة من الناشرين

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

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

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

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

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

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

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

في ما يلي مثال على دالة تعرض 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 above 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 above 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) النقرات على مواد عرض مشاهدة الإعلان طالما أنّك تعاملت بشكل صحيح. وتعبئة مشاهدات مواد العرض وتسجيلها، كما هو موضّح في القسم السابق.

    فيما يلي مثال يستخدم إعلانًا المستمع لمراقبة الأحداث الناتجة عن النقر:

    Java

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

    Kotlin

    val adLoader = AdLoader.Builder(this, "/6499/example/native")
        ...
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                // Handle the failure by logging, altering the UI, and so on.
            }
        })
        .build()
    
  4. تسجيل MediaView

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

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

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

    Java

    MediaView mediaView = adView.findViewById(R.id.ad_media);
    adView.setMediaView(mediaView);
    

    Kotlin

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

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

    Java

    mediaView.setMediaContent(nativeAd.getMediaContent());
    

    Kotlin

    mediaView.mediaContent = nativeAd.mediaContent
    

    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 عندما تم ضبط السمة mediaContent MediaView باستخدام مثيل 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()

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

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

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

/6499/example/native

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

  • العنوان (نص)
  • الصورة الرئيسية (صورة)
  • شرح (نص)

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

إعلانات إعادة التعبئة المدمجة مع المحتوى

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

/6499/example/native-backfill

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

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

أمثلة على GitHub

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

Java Kotlin

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

يمكنك الاطّلاع على المواضيع التالية: