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

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

يوضح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيق 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 | Purpose-C

برامج تعليمية للفيديو في "إعلانات Google" على الأجهزة الجوّالة

قصص النجاح

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