تتيح لك واجهة API إعلان البانر الأصلي إنشاء تجربة مخصصة لعرض إعلان أصلي بدون أصول تصميم المُعلن، مثل صورة أو فيديو أو محتوى إعلان دوّار. وعلى غرار الإعلانات الأصلية، ستتلقى مجموعة من خصائص الإعلان، مثل عنوان وأيقونة ودعوة لاتخاذ إجراء، وستستخدمها في تصميم طريقة عرض مخصصة حيث سيظهر الإعلان. ولكن على عكس إعلانات البانر، توفر واجهة API إعلان البانر الأصلي تجربة تخطيط أصلي بحيث تتمتع بالتحكم الكامل عند تخصيص تخطيط المكونات داخل الإعلان.
احرص على قراءة دليل بدء استخدام Audience Network ودليل بدء استخدام Android قبل المتابعة.
سنقوم في هذا الدليل بتنفيذ موضع إعلان البانر الأصلي التالي. وسننشئ إعلان بانر أصليًا بالمكونات التالية:
العرض رقم 1: AdOptionsViewالعرض رقم 2: التسمية "مُموَّل"العرض رقم 3: أيقونة الإعلان | العرض رقم 4: عنوان الإعلانالعرض رقم 5: سياق التواصل الاجتماعيالعرض رقم 6: زر الدعوة لاتخاذ إجراء |
تمت إضافة هذا الأسلوب في مجموعة Audience Network SDK لنظام Android بالإصدار 5.1.
يلزم وجود تهيئة واضحة لمجموعة Audience Network SDK لنظام Android بالإصدار 5.3.0
والإصدارات الأحدث. يرجى الرجوع إلى هذا المستند حول كيفية تهيئة مجموعة Audience Network SDK لنظام Android.
قبل إنشاء كائن إعلان وتحميل إعلانات، يجب عليك تهيئة مجموعة Audience Network SDK. ويوصى بإجراء ذلك عند تشغيل التطبيق.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
أضف الرمز البرمجي التالي أعلى فئة النشاط لديك لاستيراد مجموعة SDK لإعلانات Facebook:
import com.facebook.ads.*;
بعد ذلك، أنشئ مثيلًا للكائن NativeBannerAd
وأنشئ AdListener
وقم باستدعاء loadAd(...)
في نشاطك:
public class NativeBannerAdActivity extends Activity { private final String TAG = NativeBannerAdActivity.class.getSimpleName(); private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { @Override public void onMediaDownloaded(Ad ad) { // Native ad finished downloading all assets Log.e(TAG, "Native ad finished downloading all assets."); } @Override public void onError(Ad ad, AdError adError) { // Native ad failed to load Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Native ad is loaded and ready to be displayed Log.d(TAG, "Native ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Native ad clicked Log.d(TAG, "Native ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Native ad impression Log.d(TAG, "Native ad impression logged!"); } }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } }
سنعود لاحقًا لإضافة الرمز البرمجي إلى الأسلوب onAdLoaded()
.
تتمثل الخطوة التالية في استخراج بيانات تعريف الإعلان واستخدام خصائصه لإنشاء واجهة مستخدم أصلية مخصصة. ويمكنك إنشاء طريقة عرض مخصصة في ملف تخطيط بتنسيق .xml، أو يمكنك إضافة عناصر إلى الرمز البرمجي.
يرجى الرجوع إلى إرشاداتنا حول الإعلانات الأصلية عند تصميم إعلانات البانر الأصلية داخل تطبيقك.
في تخطيط النشاط activity_main.xml
لديك، أضف حاوية إلى إعلان البانر الأصلي لديك. ويجب أن تكون الحاوية com.facebook.ads.NativeAdLayout والتي تُعد أداة تغليف أعلى FrameLayout مزوّدة ببعض الوظائف الإضافية التي أتاحت لنا عرض تدفق تقارير الإعلانات الأصلية أعلى الإعلان. وفي الأسلوب onAdLoaded()
لاحقًا، ستحتاج إلى تعبئة عرض إعلانك الأصلي في هذه الحاوية.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> ... <com.facebook.ads.NativeAdLayout android:id="@+id/native_banner_ad_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> ... </RelativeLayout>
أنشئ تخطيطًا مخصصًا native_banner_ad_unit.xml
لإعلان البانر الأصلي لديك:
فيما يلي مثال على التخطيط المخصص لإعلان البانر الأصلي لديك:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RelativeLayout android:id="@+id/ad_choices_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="2dp" /> <TextView android:id="@+id/native_ad_sponsored_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:ellipsize="end" android:lines="1" android:padding="2dp" android:textColor="@android:color/darker_gray" android:textSize="12sp" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white"> <com.facebook.ads.MediaView android:id="@+id/native_icon_view" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:gravity="center" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical" android:paddingLeft="53dp" android:paddingRight="83dp"> <TextView android:id="@+id/native_ad_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textColor="@android:color/black" android:textSize="15sp" android:textStyle="bold" /> <TextView android:id="@+id/native_ad_social_context" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:textSize="12sp" /> </LinearLayout> <Button android:id="@+id/native_ad_call_to_action" android:layout_width="80dp" android:layout_height="50dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:background="#4286F4" android:gravity="center" android:paddingLeft="3dp" android:paddingRight="3dp" android:textColor="@android:color/white" android:textSize="12sp" android:visibility="gone" /> </RelativeLayout> </LinearLayout>
onAdLoaded()
أعلاه لاستعادة خصائص Native Banner Ad's
وعرضها كما يلي:public class NativeBannerAdActivity extends Activity { private NativeAdLayout nativeAdLayout; private LinearLayout adView; private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Race condition, load() called again before last ad was displayed if (nativeBannerAd == null || nativeBannerAd != ad) { return; } // Inflate Native Banner Ad into Container inflateAd(nativeBannerAd); } ... }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } private void inflateAd(NativeBannerAd nativeBannerAd) { // Unregister last ad nativeBannerAd.unregisterView(); // Add the Ad view into the ad container. nativeAdLayout = findViewById(R.id.native_banner_ad_container); LayoutInflater inflater = LayoutInflater.from(NativeBannerAdActivity.this); // Inflate the Ad view. The layout referenced is the one you created in the last step. adView = (LinearLayout) inflater.inflate(R.layout.native_banner_ad_layout, nativeAdLayout, false); nativeAdLayout.addView(adView); // Add the AdChoices icon RelativeLayout adChoicesContainer = adView.findViewById(R.id.ad_choices_container); AdOptionsView adOptionsView = new AdOptionsView(NativeBannerAdActivity.this, nativeBannerAd, nativeAdLayout); adChoicesContainer.removeAllViews(); adChoicesContainer.addView(adOptionsView, 0); // Create native UI using the ad metadata. TextView nativeAdTitle = adView.findViewById(R.id.native_ad_title); TextView nativeAdSocialContext = adView.findViewById(R.id.native_ad_social_context); TextView sponsoredLabel = adView.findViewById(R.id.native_ad_sponsored_label); MediaView nativeAdIconView = adView.findViewById(R.id.native_icon_view); Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action); // Set the Text. nativeAdCallToAction.setText(nativeBannerAd.getAdCallToAction()); nativeAdCallToAction.setVisibility( nativeBannerAd.hasCallToAction() ? View.VISIBLE : View.INVISIBLE); nativeAdTitle.setText(nativeBannerAd.getAdvertiserName()); nativeAdSocialContext.setText(nativeBannerAd.getAdSocialContext()); sponsoredLabel.setText(nativeBannerAd.getSponsoredTranslation()); // Register the Title and CTA button to listen for clicks. List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); nativeBannerAd.registerViewForInteraction(adView, nativeAdIconView, clickableViews); } }
ستسجّل مجموعة SDK عدد مرات ظهور الإعلان وتعالج النقرة تلقائيًا. لذا يرجى ملاحظة أنه يجب تسجيل طريقة عرض الإعلان بالمثيل NativeBannerAd
لتمكين ذلك. ولجعل عناصر إعلانك قابلة للنقر، يمكنك تسجيلها باستخدام:
registerViewForInteraction(View view, MediaView adIconView)
في حالة عدم عرض الإعلان على الفور بعد تحميل الإعلان، يتولى المطوّر مسؤولية التحقق مما إذا تم إلغاء صلاحية الإعلان أم لا. بمجرد تحميل الإعلان بنجاح، سيكون الإعلان صالحًا لمدة 60 دقيقة. لن تحقق أي أرباح إذا كنت تعرض إعلانًا غير صالح. يجب أن تستدعي isAdInvalidated()
للتحقق من صحة الإعلان.
يجب عليك متابعة الفكرة أدناه، ولكن يرجى عدم نسخ الرمز البرمجي في مشروعك لأنه مجرد مثال:
public class NativeBannerAdActivity extends Activity { private NativeBannerAd nativeBannerAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a NativeBannerAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get a no fill error). nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new NativeAdListener() { ... }); // load the ad nativeBannerAd.loadAd( nativeBannerAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } private void showAdWithDelay() { /** * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ // Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if nativeBannerAd has been loaded successfully if(nativeBannerAd == null || !nativeBannerAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad. if(nativeBannerAd.isAdInvalidated()) { return; } inflateAd(nativeBannerAd); // Inflate Native Banner Ad into Container same as in previous code example } }, 1000 * 60 * 15); // Show the ad after 15 minutes } }
لتقديم تجربة أفضل للمستخدم والحصول على نتائج أفضل، يجب عليك دائمًا مراعاة التحكم في المساحة القابلة للنقر عليها في إعلانك لتجنب النقرات غير المقصودة. يرجى الرجوع إلى صفحة سياسة مجموعة Audience Network SDK للتعرف على مزيد من التفاصيل حول تنفيذ المساحة البيضاء غير القابلة للنقر.
للتحكم بصورة أدق في العناصر التي يمكن النقر عليها، يمكنك استخدام registerViewForInteraction(View view, MediaView adIconView, List<View> clickableViews)
لتسجيل قائمة بطرق العرض التي يمكن النقر عليها. فعلى سبيل المثال، إذا كنت لا تريد سوى جعل عنوان الإعلان وزر الدعوة لاتخاذ إجراء يمكن النقر عليهما في المثال السابق، يمكنك الكتابة بالطريقة التالية:
@Override public void onAdLoaded(Ad ad) { ... List<View> clickableViews = new ArrayList<>(); clickableViews.add(nativeAdTitle); clickableViews.add(nativeAdCallToAction); nativeBannerAd.registerViewForInteraction(mAdView, nativeAdIconView, clickableViews); ... }
في الحالات التي تعيد فيها استخدام طريقة العرض من أجل عرض إعلانات مختلفة بمرور الوقت، تأكد من استدعاء unregisterView()
قبل تسجيل طريقة العرض نفسها بمثيل NativeBannerAd
مختلف.
قم بتشغيل الرمز البرمجي ويتعين عليك عرض إعلان البانر الأصلي:
عند تحميل إعلان، ستتضمن الخصائص التالية بعض القيم: title
وicon
وcallToAction
. ويمكن أن تكون الخصائص الأخرى خالية أو فارغة. لذا تأكد من فعالية الرمز البرمجي لديك للتعامل مع هذه الحالات.
عند عدم وجود إعلان لعرضه، سيتم استدعاء onError
مع ظهور الخطأ error.code
. وإذا كنت تستخدم تقارير مخصصة أو طبقة خدمة وسيطة خاصة بك، فقد تريد التحقق من قيمة الرمز البرمجي واكتشاف هذه الحالة. وفي هذه الحالة، يمكنك الرجوع إلى شبكة إعلانية أخرى ولكن لا ترسل طلبًا مرة أخرى بشأن الإعلان على الفور بعد ذلك.
يمكن تخزين بيانات تعريف الإعلان التي تتلقاها مؤقتًا وإعادة استخدامها لمدة 30 دقيقة كحد أقصى. وإذا كنت تخطط لاستخدام بيانات التعريف بعد مرور هذه الفترة الزمنية، فقم بإجراء استدعاء لتحميل إعلان جديد.
اكتشف نماذج الرموز البرمجية لمجموعة Audience Network Android على Github. قم باستيراد المشروعات إلى IDE، ثم تشغيله على أي جهاز أو على المحاكي.
بمجرد أن تكون مستعدًا لتفعيل ونشر تطبيقك وتحقيق الأرباح، يجب تقديم تطبيقك للمراجعة بعد التأكد من التزامه بسياسات Audience Network ومعايير مجتمع فيسبوك.
يمكنك الرجوع إلى دليل قالب الإعلان الأصلي لإضافة إعلانات أصلية في تطبيقك.
استكشف عينات من الرموز البرمجية التي توضح كيفية استخدام الإعلانات الأصلية. ويتوفر NativeBannerAdSample
كجزء من مجموعة SDK ويمكن العثور عليه ضمن المجلد AudienceNetwork/samples
. وقم باستيراد المشروع إلى IDE وتشغيله على أي جهاز أو على المحاكي.
المزيد من الموارد |
دليل بدء الاستخدامدليل فني لبدء استخدام Audience Network عينات من الرمز البرمجيعينات من دمج الإعلانات في Audience Network | الأسئلة المتكررةالأسئلة المتكررة حول Audience Network قالب الإعلانات الأصليةطريقة تتمتع بتشغيل تلقائي أكبر عند دمج الإعلانات الأصلية |