إعلانات البانر هي إعلانات مستطيلة تشغل جزءًا من تصميم التطبيق. وتظل معروضة على الشاشة أثناء تفاعل المستخدمين مع التطبيق، سواء في الجزء العلوي أو السفلي من الشاشة أو مضمَّنة مع المحتوى أثناء تمرير الشاشة. يمكن تحديث إعلانات البانر تلقائيًا بعد فترة زمنية معيّنة. يُرجى الاطّلاع على نظرة عامة على إعلانات البانر للحصول على مزيد من المعلومات.
يوضِّح لك هذا الدليل كيفية بدء استخدام إعلانات البانر التكيُّفية الثابتة، التي تعمل على تحقيق أفضل أداء من خلال تحسين حجم الإعلان لكلّ جهاز باستخدام عرض الإعلان الذي تحدِّده.
إعلان بانر تكيُّفي ثابت
إعلانات البانر التكيُّفية الثابتة هي إعلانات ذات نسبة عرض إلى ارتفاع ثابتة مقارنةً بالإعلانات العادية ذات الحجم الثابت. نسبة العرض إلى الارتفاع مماثلة لمعيار المجال 320*50. وبعد تحديد العرض الكامل المتاح، سيتم عرض إعلان بالارتفاع الأمثل لهذا العرض. لا يتغيّر الارتفاع المثالي على مستوى الطلبات الواردة من الجهاز نفسه، ولا تحتاج طرق العرض المحيطة إلى التحرّك عند إعادة تحميل الإعلان.
المتطلبات الأساسية
- أكمل دليل البدء.
الاختبار دائمًا من خلال الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات تجريبية وليس إعلانات مباشرة. وقد يؤدي عدم الالتزام بذلك إلى تعليق حسابك.
إنّ أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم تعريف الوحدة الإعلانية التجريبية المخصص لبانرات iOS:
ca-app-pub-3940256099942544/2435281174
لقد تم ضبطها خصّيصًا من أجل عرض إعلانات اختبارية لكل طلب، ويمكنك استخدامها في تطبيقاتك الخاصة أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى استبداله برقم تعريف وحدتك الإعلانية قبل نشر تطبيقك.
لمزيدٍ من المعلومات عن آلية عمل الإعلانات الاختبارية في "حزمة تطوير البرامج (SDK) لإعلانات الأجهزة الجوّالة"، اطّلِع على الإعلانات الاختبارية.
إنشاء GADBannerView
يتم عرض إعلانات البانر في عناصر GADBannerView
،
لذا، فإنّ الخطوة الأولى نحو دمج إعلانات البانر هي تضمين GADBannerView
في التسلسل الهرمي لطريقة العرض. يتم ذلك عادةً إما آليًا أو
من خلال أداة "إنشاء الواجهة".
آليًا
ويمكن أيضًا إنشاء مثيل GADBannerView
مباشرةً.
في ما يلي مثال على كيفية إنشاء علامة GADBannerView
تتم محاذاتها إلى منتصف الجزء السفلي من المنطقة الآمنة من الشاشة:
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { var bannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() let viewWidth = view.frame.inset(by: view.safeAreaInsets).width // Here the current interface orientation is used. Use // GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth or // GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth if you prefer to load an ad of a // particular orientation, let adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth) bannerView = GADBannerView(adSize: adaptiveSize) addBannerViewToView(bannerView) } func addBannerViewToView(_ bannerView: GADBannerView) { bannerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bannerView) view.addConstraints( [NSLayoutConstraint(item: bannerView, attribute: .bottom, relatedBy: .equal, toItem: view.safeAreaLayoutGuide, attribute: .bottom, multiplier: 1, constant: 0), NSLayoutConstraint(item: bannerView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0) ]) } }
Objective-C
@import GoogleMobileAds; @interface ViewController () @property(nonatomic, strong) GADBannerView *bannerView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Here safe area is taken into account, hence the view frame is used after the // view has been laid out. CGRect frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets); CGFloat viewWidth = frame.size.width; // Here the current interface orientation is used. If the ad is being preloaded // for a future orientation change or different orientation, the function for the // relevant orientation should be used. GADAdSize adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth); // In this case, we instantiate the banner with desired ad size. self.bannerView = [[GADBannerView alloc] initWithAdSize:adaptiveSize]; [self addBannerViewToView:self.bannerView]; } - (void)addBannerViewToView:(UIView *)bannerView { bannerView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:bannerView]; [self.view addConstraints:@[ [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view.safeAreaLayoutGuide attribute:NSLayoutAttributeBottom multiplier:1 constant:0], [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0] ]]; } @end
تجدر الإشارة إلى أنّنا لا نضع قيودًا على العرض أو الارتفاع في هذه الحالة، لأنّ حجم الإعلان المقدّم سيمنح البانر حجم محتوى أساسيًا يتلاءم مع حجم العرض.
أداة إنشاء الواجهة
يمكن إضافة GADBannerView
إلى مخطط القصة أو ملف xib. عند استخدام هذه الطريقة، احرص على إضافة قيود على الموضع على البانر فقط. على سبيل المثال، عند عرض بانر تكيُّفي في أسفل الشاشة، اضبط الجزء السفلي من عرض البانر على نفس الجزء العلوي من دليل التصميم السفلي، واضبط المركز X على الوسط المساوي X في العرض الفائق.
لا يزال حجم إعلان البانر معيّنًا آليًا:
Swift
bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)
Objective-C
self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);
تحميل إعلان
وبعد الانتهاء من ضبط GADBannerView
وخصائصه، يحين وقت تحميل أي إعلان. يتم ذلك من خلال استدعاء loadRequest:
على كائن
GADRequest
:
Swift
override func viewDidLoad() { super.viewDidLoad() ... // Set the ad unit ID and view controller that contains the GADBannerView. bannerView.adUnitID = "ca-app-pub-3940256099942544/2435281174" bannerView.rootViewController = self bannerView.load(GADRequest()) }
Objective-C
- (void)viewDidLoad { [super viewDidLoad]; ... // Set the ad unit ID and view controller that contains the GADBannerView. self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2435281174"; self.bannerView.rootViewController = self; [self.bannerView loadRequest:[GADRequest request]]; }
ويمثل العناصرGADRequest طلب إعلان واحدًا، ويحتوي على خصائص لأشياء مثل معلومات الاستهداف.
إذا تعذّر تحميل إعلانك، لا تحتاج إلى طلب إعلان آخر بشكل صريح طالما أنّك أعددت وحدتك الإعلانية بهدف التحديث، إذ إنّ حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" تلتزم بأي معدّل تحديث حدّدته في AdMob واجهة المستخدم. في حال عدم تفعيل إعادة التحميل، ستحتاج إلى إصدار طلب جديد.
أحداث الإعلانات
من خلال استخدام GADBannerViewDelegate
، يمكنك الاطّلاع على أحداث مراحل النشاط
مثل إغلاق إعلان أو مغادرة المستخدم التطبيق.
التسجيل لأحداث البانر
للتسجيل في أحداث إعلانات البانر، اضبط السمة delegate
في GADBannerView
على عنصر ينفّذ بروتوكول GADBannerViewDelegate
. بشكل عام، تكون الفئة التي تنفّذ إعلانات البانر بمثابة الفئة المفوَّضة، وفي هذه الحالة، يمكن ضبط السمة delegate
على self
.
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADBannerViewDelegate { var bannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() ... bannerView.delegate = self } }
Objective-C
@import GoogleMobileAds; @interface ViewController () <GADBannerViewDelegate> @property(nonatomic, strong) GADBannerView *bannerView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; ... self.bannerView.delegate = self; }
تنفيذ أحداث البانر
كلّ طريقة من الطرق في GADBannerViewDelegate
اختيارية، لذا ما عليك سوى تنفيذ الطرق التي تريدها. ينفذ هذا المثال كل طريقة ويسجل رسالة في وحدة التحكم:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("bannerViewDidReceiveAd") } func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)") } func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { print("bannerViewDidRecordImpression") } func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { print("bannerViewWillPresentScreen") } func bannerViewWillDismissScreen(_ bannerView: GADBannerView) { print("bannerViewWillDIsmissScreen") } func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { print("bannerViewDidDismissScreen") }
Objective-C
- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView { NSLog(@"bannerViewDidReceiveAd"); } - (void)bannerView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(NSError *)error { NSLog(@"bannerView:didFailToReceiveAdWithError: %@", [error localizedDescription]); } - (void)bannerViewDidRecordImpression:(GADBannerView *)bannerView { NSLog(@"bannerViewDidRecordImpression"); } - (void)bannerViewWillPresentScreen:(GADBannerView *)bannerView { NSLog(@"bannerViewWillPresentScreen"); } - (void)bannerViewWillDismissScreen:(GADBannerView *)bannerView { NSLog(@"bannerViewWillDismissScreen"); } - (void)bannerViewDidDismissScreen:(GADBannerView *)bannerView { NSLog(@"bannerViewDidDismissScreen"); }
اطّلِع على مثال "مفوَّض الإعلانات" لتنفيذ طرق تفويض إعلانات البانر في تطبيق العرض التوضيحي لواجهة برمجة تطبيقات iOS.
حالات الاستخدام
في ما يلي بعض الأمثلة على حالات استخدام طرق أحداث الإعلانات هذه.
إضافة بانر إلى هيكلية طرق العرض بعد تلقّي إعلان
قد تحتاج إلى تأخير إضافة "GADBannerView
" إلى
التسلسل الهرمي للملفات الشخصية إلى أن يتم عرض إعلان معيّن. يمكنك إجراء ذلك من خلال الاستماع
إلى حدث "bannerViewDidReceiveAd:
" على النحو التالي:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { // Add banner to view and add constraints as above. addBannerViewToView(bannerView) }
Objective-C
- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView { // Add bannerView to view and add constraints as above. [self addBannerViewToView:self.bannerView]; }
تحريك إعلان بانر
يمكنك أيضًا استخدام الحدث bannerViewDidReceiveAd:
لتحريك إعلان بانر بعد عرضه، كما هو موضّح في المثال التالي:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { bannerView.alpha = 0 UIView.animate(withDuration: 1, animations: { bannerView.alpha = 1 }) }
Objective-C
- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView { bannerView.alpha = 0; [UIView animateWithDuration:1.0 animations:^{ bannerView.alpha = 1; }]; }
إيقاف التطبيق مؤقتًا واستئنافه
يتضمّن بروتوكول GADBannerViewDelegate
طُرقًا لإشعارك بالأحداث، مثلاً عندما تؤدي نقرة إلى عرض أو إغلاق تراكب. إذا أردت تتبُّع ما إذا كانت هذه الأحداث ناتجة عن إعلانات، ننصحك بالتسجيل للاستفادة من طُرق GADBannerViewDelegate
هذه.
للتعرف على جميع أنواع العروض التقديمية التي تظهر على سطح الفيديو أو استدعاءات المتصفح الخارجية، وليس فقط تلك التي تأتي من النقرات على الإعلانات، من الأفضل بالنسبة إلى تطبيقك الاستماع إلى الطرق المكافئة على UIViewController
أو UIApplication
. إليك جدول
يعرِض طُرق iOS المكافئة التي يتم استدعاءها في نفس الوقت مع
طرق GADBannerViewDelegate
:
طريقة GADBannerViewDelegate | طريقة iOS |
---|---|
bannerViewWillPresentScreen: |
viewWillDisappear: في UIViewController |
bannerViewWillDismissScreen: |
viewWillAppear: في UIViewController |
bannerViewDidDismissScreen: |
viewDidAppear: في UIViewController |
مراجع إضافية
أمثلة على GitHub
- مثال على إعلانات البانر التكيُّفية الثابتة: Swift | Objective-C
- عرض توضيحي للميزات المتقدّمة: Swift | Objective-C
الخطوات التالية
إعلانات بانر قابلة للتصغير
إعلانات البانر القابلة للتصغير هي إعلانات بانر يتم عرضها في البداية كتراكب أكبر، مع زر لتصغير الإعلان إلى حجم أصغر. ننصحك باستخدام هذا التقرير لتحسين أدائك بشكل أكبر. اطّلِع على إعلانات البانر القابلة للتصغير للحصول على مزيد من التفاصيل.
إعلانات البانر التكيُّفية المضمّنة
إعلانات البانر التكيُّفية المضمّنة هي إعلانات بانر أكبر حجمًا وأطول مقارنةً بإعلانات البانر التكيُّفية الثابتة. ولها ارتفاع متغير، ويمكن أن تكون بطول شاشة الجهاز. يُنصَح باستخدام إعلانات البانر التكيُّفية المضمّنة بدلاً من إعلانات البانر التكيُّفية الثابتة في التطبيقات التي تعرِض إعلانات بانر ضمن محتوى قابل للتمرير. يمكنك الاطّلاع على إعلانات البانر التكيُّفية المضمّنة لمزيد من التفاصيل.