الإعلانات البينية

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

يوضِّح لك هذا الدليل كيفية دمج الإعلانات البينية في أحد تطبيقات iOS.

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

  • حزمة SDK لإعلانات Google على الأجهزة الجوّالة 8.0.0 أو إصدار أحدث.
  • أكمل دليل البدء.

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

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

تتمثل أسهل طريقة لتحميل الإعلانات الاختبارية في استخدام رقم تعريف الوحدة الإعلانية التجريبية المخصص للإعلانات البينية على iOS:
ca-app-pub-3940256099942544/4411468910

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

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

التنفيذ

الخطوات الأساسية لدمج الإعلانات البينية هي:

  1. تحميل إعلان.
  2. التسجيل لمعاودة الاتصال.
  3. اعرض الإعلان وتعامل مع حدث المكافأة.

تحميل إعلان

يتم تحميل الإعلان باستخدام طريقة loadWithAdUnitID:request:completionHandler: الثابتة للفئة GADInterstitialAd. تتطلّب طريقة التحميل رقم تعريف الوحدة الإعلانية وكائن GADRequest ومعالج إكمال يتم استدعاؤه عند نجاح تحميل الإعلان أو تعذُّر تحميله. يتم توفير عنصر GADInterstitialAd الذي تم تحميله كمعلَمة في معالج الإكمال. يوضّح المثال أدناه كيفية تحميل GADInterstitialAd في صفك في ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                      }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

التسجيل لمعاودة الاتصال

لتلقّي إشعارات بشأن أحداث العروض التقديمية، يجب تنفيذ بروتوكول GADFullScreenContentDelegate وتخصيصه للسمة fullScreenContentDelegate للإعلان المعروض. يتعامل بروتوكول GADFullScreenContentDelegate مع عمليات معاودة الاتصال في حال عرض الإعلان بنجاح أو عدم نجاحه وعند إغلاقه. ويوضّح الرمز التالي كيفية تنفيذ البروتوكول وتعيينه للإعلان:

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                        interstitial?.fullScreenContentDelegate = self
                      }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
   NSLog(@"Ad did dismiss full screen content.");
}

GADInterstitialAd هو عنصر يُستخدم لمرة واحدة. وهذا يعني أنه بعد عرض الإعلان البيني، لا يمكن عرضه مرة أخرى. من أفضل الممارسات تحميل إعلان بيني آخر في طريقة adDidDismissFullScreenContent: على GADFullScreenContentDelegate بحيث يبدأ تحميل الإعلان البيني التالي فور إغلاق الإعلان البيني التالي.

عرض الإعلان

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

Swift

@IBAction func doSomething(_ sender: Any) {
  if interstitial != nil {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (IBAction)doSomething:(id)sender {
  ...
  if (self.interstitial) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

أفضل الممارسات

فكِّر في ما إذا كانت الإعلانات البينية هي نوع الإعلان المناسب لتطبيقك.
تعمل الإعلانات البينية على أفضل نحو في التطبيقات التي تتضمّن نقاط انتقال طبيعية. تعمل خاتمة المهمة داخل التطبيق، مثل مشاركة صورة أو إكمال مستوى من لعبة، على إنشاء هذه النقطة. وبما أنّ المستخدم يتوقع استراحة في الإجراء، فمن السهل عرض إعلان بيني بدون التأثير سلبًا في تجربته. احرص على التفكير في المراحل التي ستعرض فيها إعلانات بينية ضمن سير عمل تطبيقك وطريقة استجابة المستخدم المحتمَلة لذلك.
احرص على إيقاف الإجراء مؤقتًا عند عرض إعلان بيني.
هناك عدد من أنواع الإعلانات البينية المختلفة: الإعلانات النصية والمصوّرة وإعلانات الفيديو وغيرها. من المهم التأكد من أنه عندما يعرض تطبيقك إعلانًا بينيًا، يتم أيضًا تعليق استخدامه لبعض الموارد للسماح للإعلان بالاستفادة منها. على سبيل المثال، عند إجراء المكالمة لعرض إعلان بيني، يُرجى التأكُّد من إيقاف أي إخراج صوتي يصدره تطبيقك مؤقتًا. يمكنك استئناف تشغيل الأصوات في معالِج أحداث adDidDismissFullScreenContent:، الذي سيتم استدعاؤه عند انتهاء المستخدم من التفاعل مع الإعلان. إضافةً إلى ذلك، يمكن أن توقف مؤقتًا أي مهام حوسبة مكثفة (مثل حلقة الألعاب) أثناء عرض الإعلان. سيضمن ذلك عدم ظهور رسومات بطيئة أو غير مستجيبة أو فيديو متقطع لدى المستخدم.
يجب توفير مدة تحميل كافية.
وتمامًا الحرص على عرض الإعلانات البينية في الأوقات المناسبة، من المهم أيضًا التأكّد من عدم اضطرار المستخدم إلى انتظار التحميل. ومن خلال تحميل الإعلان مقدمًا قبل أن تنوي عرضه، يمكنك ضمان أن يكون تطبيقك يحتوي على إعلان بيني محمَّل بالكامل، عندما يحين وقت عرض الإعلان.
لا تزعج المستخدم بالإعلانات.
على الرغم من أنّ زيادة وتيرة الإعلانات البينية في تطبيقك قد تبدو طريقة رائعة لزيادة الأرباح، إلا أنّها قد تؤدي أيضًا إلى انخفاض مستوى تجربة المستخدم وانخفاض نسب النقر إلى الظهور. تأكَّد من عدم انقطاع الخدمة عن المستخدمين بشكل متكرّر بحيث لا يعود بإمكانهم الاستمتاع باستخدام تطبيقك.
عدم استخدام معاودة الاتصال بإكمال التحميل لعرض الإعلان البيني.
يمكن أن يؤدي ذلك إلى ترك انطباع سيئ لدى المستخدم. يمكنك بدلاً من ذلك تحميل الإعلان مسبقًا قبل أن تحتاج إلى عرضه. بعد ذلك، يمكنك التحقّق من طريقة canPresentFromRootViewController:error: على GADInterstitialAd لمعرفة ما إذا كانت جاهزة للعرض.

مراجع إضافية

أمثلة على GitHub

  • مثال على الإعلانات البينية: Swift | Goal-C

فيديوهات تعليمية من Mobile Ads Garage

قصص النجاح

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