إعلانات البانر

اختيار النظام الأساسي: Android iOS Unity Flutter

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

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

إعلان بانر تكيُّفي ثابت

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

المتطلبات الأساسية

اختبار الإعلانات دائمًا باستخدام الإعلانات الاختبارية

عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات اختبارية بدلاً من الإعلانات المباشرة في مرحلة الإنتاج. وقد يؤدي عدم اتّخاذ هذا الإجراء إلى تعليق حسابك.

أسهل طريقة لتحميل الإعلانات التجريبية هي استخدام رقم تعريف وحدة الإعلانات التجريبية المخصّص لإعلانات البانر على iOS:

/21775744923/example/adaptive-banner

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

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

إنشاء GAMBannerView

يتم عرض إعلانات البانر في عناصر GAMBannerView، لذا فإنّ الخطوة الأولى نحو دمج إعلانات البانر هي تضمين GAMBannerView في التدرّج الهرمي للعرض. يتم ذلك عادةً إما آليًا أو من خلال Interface Builder.

آليًا

يمكن أيضًا إنشاء مثيل GAMBannerView مباشرةً. ينشئ المثال التالي GAMBannerView:

Swift

// Initialize the BannerView.
bannerView = BannerView()

bannerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bannerView)

// This example doesn't give width or height constraints, as the ad size gives the banner an
// intrinsic content size to size the view.
NSLayoutConstraint.activate([
  // Align the banner's bottom edge with the safe area's bottom edge
  bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
  // Center the banner horizontally in the view
  bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
])

SwiftUI

لاستخدام AdManagerBannerView، أنشئ UIViewRepresentable:

private struct BannerViewContainer: UIViewRepresentable {
  typealias UIViewType = BannerView
  let adSize: AdSize

  init(_ adSize: AdSize) {
    self.adSize = adSize
  }

  func makeUIView(context: Context) -> BannerView {
    let banner = BannerView(adSize: adSize)
    banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
    banner.load(Request())
    banner.delegate = context.coordinator
    return banner
  }

  func updateUIView(_ uiView: BannerView, context: Context) {}

  func makeCoordinator() -> BannerCoordinator {
    return BannerCoordinator(self)
  }

أضِف UIViewRepresentable إلى التسلسل الهرمي للعرض، مع تحديد قيمتَي height وwidth:

var body: some View {
  Spacer()
  // Request an anchored adaptive banner with a width of 375.
  let adSize = currentOrientationAnchoredAdaptiveBanner(width: 375)
  BannerViewContainer(adSize)
    .frame(width: adSize.size.width, height: adSize.size.height)
}

Objective-C

// Initialize the GADBannerView.
self.bannerView = [[GADBannerView alloc] init];

self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.bannerView];

// This example doesn't give width or height constraints, as the ad size gives the banner an
// intrinsic content size to size the view.
[NSLayoutConstraint activateConstraints:@[
    // Align the banner's bottom edge with the safe area's bottom edge
    [self.bannerView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
    // Center the banner horizontally in the view
    [self.bannerView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
]];

Interface Builder

يمكنك إضافة GAMBannerView إلى لوحة عرض أو ملف xib. عند استخدام هذه الطريقة، احرص على إضافة قيود الموضع فقط إلى البانر. على سبيل المثال، عند عرض إعلان بانر تكيُّفي في أسفل الشاشة، اضبط الجزء السفلي من عرض البانر ليكون مساويًا للجزء العلوي من "دليل التنسيق السفلي"، واضبط قيد centerX ليكون مساويًا centerX للعرض الفائق.

ضبط حجم الإعلان

اضبط بنية GADSize على نوع "إعلان بانر تكيُّفي ثابت" بعرض محدّد:

Swift

// Request an anchored adaptive banner with a width of 375.
bannerView.adSize = currentOrientationAnchoredAdaptiveBanner(width: 375)

Objective-C

// Request an anchored adaptive banner with a width of 375.
self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(375);

تحميل إعلان

بعد إعداد GAMBannerView وخصائصه، مثل adUnitID، يحين وقت تحميل إعلان. يتم ذلك من خلال استدعاء loadRequest: على كائن GAMRequest:

Swift

bannerView.load(AdManagerRequest())

SwiftUI

banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(Request())

Objective-C

[self.bannerView loadRequest:[GAMRequest request]];

تمثّل عناصر GAMRequest طلب إعلان واحدًا، وتحتوي على سمات خاصة بمعلومات الاستهداف وغيرها.

إعادة تحميل إعلان

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

أحداث الإعلانات

من خلال استخدام GADBannerViewDelegate، يمكنك الاستماع إلى أحداث مراحل النشاط، مثل وقت إغلاق الإعلان أو مغادرة المستخدم للتطبيق.

التسجيل في أحداث البانر

لتسجيل أحداث الإعلانات الصورية، اضبط السمة delegate في GAMBannerView على عنصر ينفّذ البروتوكول GADBannerViewDelegate. بشكل عام، تعمل الفئة التي تنفّذ الإعلانات الصورية أيضًا كفئة مفوَّضة، وفي هذه الحالة، يمكن ضبط السمة delegate على self.

Swift

bannerView.delegate = self

SwiftUI

banner.delegate = context.coordinator

Objective-C

self.bannerView.delegate = self;

تنفيذ أحداث البانر

تم وضع علامة "اختياري" على كل طريقة في GADBannerViewDelegate، لذا عليك تنفيذ الطرق التي تريدها فقط. ينفّذ هذا المثال كل طريقة ويسجّل رسالة في وحدة التحكّم:

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  print(#function)
}

func bannerView(_ bannerView: BannerView, didFailToReceiveAdWithError error: Error) {
  print(#function + ": " + error.localizedDescription)
}

func bannerViewDidRecordClick(_ bannerView: BannerView) {
  print(#function)
}

func bannerViewDidRecordImpression(_ bannerView: BannerView) {
  print(#function)
}

func bannerViewWillPresentScreen(_ bannerView: BannerView) {
  print(#function)
}

func bannerViewWillDismissScreen(_ bannerView: BannerView) {
  print(#function)
}

func bannerViewDidDismissScreen(_ bannerView: BannerView) {
  print(#function)
}

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 API Demo.

Swift Objective-C

حالات الاستخدام

في ما يلي بعض الأمثلة على حالات استخدام طرق أحداث الإعلانات هذه.

إضافة بانر إلى بنية العرض الهرمية بعد تلقّي إعلان

قد تحتاج إلى تأخير إضافة GAMBannerView إلى بنية العرض الهرمية إلى ما بعد تلقّي الإعلان. يمكنك إجراء ذلك من خلال الاستماع إلى حدث bannerViewDidReceiveAd::

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  // Add banner to view and add constraints.
  addBannerViewToView(bannerView)
}

Objective-C

- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
  // Add bannerView to view and add constraints as above.
  [self addBannerViewToView:self.bannerView];
}

إنشاء بانر متحرك

يمكنك أيضًا استخدام الحدث bannerViewDidReceiveAd: لتحريك إعلان بانر مرة واحدة بعد عرضه، كما هو موضّح في المثال التالي:

Swift

func bannerViewDidReceiveAd(_ bannerView: BannerView) {
  bannerView.alpha = 0
  UIView.animate(withDuration: 1, animations: {
    bannerView.alpha = 1
  })
}

Objective-C

- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
  bannerView.alpha = 0;
  [UIView animateWithDuration:1.0 animations:^{
    bannerView.alpha = 1;
  }];
}

إيقاف التطبيق مؤقتًا واستئنافه

يتضمّن بروتوكول GADBannerViewDelegate طرقًا لإعلامك بالأحداث، مثل عندما يؤدي النقر إلى عرض تراكب أو إغلاقه. إذا أردت تتبُّع ما إذا كانت هذه الأحداث ناتجة عن إعلانات، عليك التسجيل في هذه الطرق GADBannerViewDelegate.

للتصدّي لجميع أنواع العروض التراكبية أو عمليات استدعاء المتصفّح الخارجي، وليس فقط تلك التي تأتي من النقرات على الإعلانات، من الأفضل أن يستمع تطبيقك إلى الطرق المكافئة في UIViewController أو UIApplication. في ما يلي جدول يعرض طرق iOS المكافئة التي يتم استدعاؤها في الوقت نفسه الذي يتم فيه استدعاء طرق GADBannerViewDelegate:

طريقة GADBannerViewDelegate طريقة iOS
bannerViewWillPresentScreen: ‫UIViewController‏ viewWillDisappear:
bannerViewWillDismissScreen: ‫UIViewController‏ viewWillAppear:
bannerViewDidDismissScreen: ‫UIViewController‏ viewDidAppear:

احتساب عدد مرات الظهور يدويًا

يمكنك إرسال إشارات ping لمرّات الظهور يدويًا إلى "مدير إعلانات Google" إذا كانت لديك شروط خاصة لتسجيل مرّة الظهور. يمكن إجراء ذلك من خلال تفعيل GAMBannerView للظهورات اليدوية قبل تحميل الإعلان:

Swift

bannerView.enableManualImpressions = true

Objective-C

self.bannerView.enableManualImpressions = YES;

عند التأكّد من أنّه تم عرض الإعلان بنجاح على الشاشة، يمكنك تسجيل مرّة ظهور يدويًا باتّباع الخطوات التالية:

Swift

bannerView.recordImpression()

Objective-C

[self.bannerView recordImpression];

أحداث التطبيقات

تتيح لك أحداث التطبيق إنشاء إعلانات يمكنها إرسال رسائل إلى رمز التطبيق. يمكن للتطبيق بعد ذلك اتّخاذ إجراءات استنادًا إلى هذه الرسائل.

يمكنك الاستماع إلى أحداث التطبيق الخاصة بـ "مدير إعلانات Google" باستخدام GADAppEventDelegate. قد تحدث هذه الأحداث في أي وقت خلال دورة حياة الإعلان، حتى قبل استدعاء bannerViewDidReceiveAd: الخاص بالكائن GADBannerViewDelegate.

Swift

// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.

// Called when the banner receives an app event.
optional public func bannerView(_ banner: AdManagerBannerView,
    didReceiveAppEvent name: String, withInfo info: String?)

Objective-C

// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.

@optional
// Called when the banner receives an app event.
-   (void)bannerView:(GAMBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info;

يمكن تنفيذ طرق أحداث تطبيقك في وحدة التحكّم في العرض:

Swift

import GoogleMobileAds

class ViewController: UIViewController, AppEventDelegate {}

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController <GADAppEventDelegate> {}

@end

تذكَّر ضبط المفوض باستخدام السمة appEventDelegate قبل تقديم طلب الإعلان.

Swift

bannerView.appEventDelegate = self

Objective-C

self.bannerView.appEventDelegate = self;

في ما يلي مثال يوضّح كيفية تغيير لون خلفية تطبيقك من خلال تحديد اللون من خلال حدث في التطبيق:

Swift

func bannerView(_ banner: AdManagerBannerView, didReceiveAppEvent name: String,
    withInfo info: String?) {
  if name == "color" {
    guard let info = info else { return }
    switch info {
    case "green":
      // Set background color to green.
      view.backgroundColor = UIColor.green
    case "blue":
      // Set background color to blue.
      view.backgroundColor = UIColor.blue
    default:
      // Set background color to black.
      view.backgroundColor = UIColor.black
    }
  }
}

Objective-C

- (void)bannerView:(GAMBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info {
  if ([name isEqual:@"color"]) {
    if ([info isEqual:@"green"]) {
      // Set background color to green.
      self.view.backgroundColor = [UIColor greenColor];
    } else if ([info isEqual:@"blue"]) {
      // Set background color to blue.
      self.view.backgroundColor = [UIColor blueColor];
    } else {
      // Set background color to black.
      self.view.backgroundColor = [UIColor blackColor];
    }
  }
}

في ما يلي تصميم الإعلان المقابل الذي يرسل رسائل أحداث تطبيق التلوين إلى appEventDelegate:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

يمكنك الاطّلاع على مثال "أحداث تطبيق مدير الإعلانات" لمعرفة كيفية تنفيذ أحداث التطبيق في تطبيق iOS API Demo.

Swift Objective-C

مراجع إضافية

أمثلة على GitHub

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

إعلانات البانر القابلة للتصغير

إعلانات البانر القابلة للتصغير هي إعلانات بانر تظهر في البداية كتراكب أكبر، مع زر لتصغير الإعلان. ننصحك باستخدامها لتحسين أدائك بشكل أكبر. يمكنك الاطّلاع على إعلانات البانر القابلة للتصغير لمزيد من التفاصيل.

إعلانات البانر التكيّفية المضمّنة

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

استكشاف مواضيع أخرى