عرض 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, "ca-app-pub-3940256099942544/2247696110")
.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, "ca-app-pub-3940256099942544/2247696110")
.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) شارة "خيارات الإعلان" إلى كلّ مشاهدة إعلان. اترك مساحة في الزاوية المفضّلة من عرض الإعلانات المدمجة لشعار "خيارات الإعلان" الذي يتم إدراجه تلقائيًا. من الضروري أيضًا أن يتمكّن المستخدم من رؤية شارة "خيارات الإعلان" بسهولة، لذا يجب اختيار ألوان الخلفية والصور بشكل مناسب. لمزيد من المعلومات عن مظهر التراكب و وظيفته، اطّلِع على أوصاف حقول الإعلانات المدمجة مع المحتوى.
تحديد مصدر الإعلان
يجب عرض مصدر الإعلان للإشارة إلى أنّ المشاهدة هي إعلان. اطّلِع على مزيد من المعلومات في إرشادات السياسة.
مثال على الرمز البرمجي
في ما يلي خطوات عرض إعلان مدمج مع المحتوى:
- أنشئ مثيلًا لفئة
NativeAdView
. لكلّ مادة عرض إعلان يتم عرضها:
- املأ عرض مادة العرض بمادة العرض في عنصر الإعلان.
- سجِّل عرض مادة العرض باستخدام فئة
NativeAdView
.
سجِّل العلامة
MediaView
إذا كان تنسيق الإعلان المدمج مع المحتوى يتضمّن مادة عرض وسائط كبيرة.سجِّل عنصر الإعلان في فئة
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)
}
في ما يلي المهام الفردية:
تكبير التنسيق
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
حالي إذا كان متوفّرًا في المقتطف أو النشاط، أو إنشاء مثيل ديناميكيًا بدون استخدام ملف تنسيق.تعبئة مشاهدات مواد العرض وتسجيلها
يحدد هذا الرمز النموذجي طريقة العرض المستخدمة لعرض العنوان، ويضبط نصه باستخدام مادة عرض السلسلة التي يوفرها عنصر الإعلان، ويسجّلها مع الكائن
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
يجب تكرار عملية تحديد موضع العرض وضبط قيمته وتسجيله باستخدام فئة عرض الإعلان لكل مادة عرض يوفّرها عنصر الإعلان المدمج الذي سيعرضه التطبيق.
التعامل مع النقرات
لا تنفِّذ أيّ معالجات نقرات مخصّصة على أيّ مشاهدات فوق عرض الإعلانات المدمجة أو داخله. تعالج حزمة تطوير البرامج (SDK) النقرات على مواد عرض الإعلانات شرط أن تتم بشكل صحيح تعبئة مشاهدات مواد العرض وتسجيلها، كما هو موضّح في القسم السابق.
للاستماع إلى النقرات، يجب تنفيذ رد اتصال SDK لإعلانات Google على الأجهزة الجوّالة:
Java
AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110") // ... .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, "ca-app-pub-3940256099942544/2247696110") // ... .withAdListener(object : AdListener() { override fun onAdFailedToLoad(adError: LoadAdError) { // Handle the failure. } override fun onAdClicked() { // Log the click event or other custom behavior. } }) .build()
تسجيل 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
على الصورة التي تم تنزيلها يدويًا. يُرجى العلم أنّه لن يتم استخدام هذه الصورة إلا في حال عدم توفّر مادة عرض فيديو.تسجيل عنصر الإعلان المدمج مع المحتوى
تسجِّل هذه الخطوة الأخيرة كائن الإعلان المدمج مع المحتوى بطريقة العرض المسؤولة عن عرضه.
Java
adView.setNativeAd(ad);
Kotlin
adView.setNativeAd(ad)
إتلاف الإعلان
عند الانتهاء من عرض إعلانك المدمج مع المحتوى، يجب إزالته حتى تتم معالجة الإعلان بشكل صحيح.
Java
nativeAd.destroy();
Kotlin
nativeAd.destroy()
أمثلة على GitHub
مثال على اكتمال تنفيذ الإعلانات المدمجة مع المحتوى:
الخطوات التالية
استكشِف المواضيع التالية: