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

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

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

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

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

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

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

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

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

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

التنفيذ

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

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

تحميل إعلان

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

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

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
      interstitial?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

  /// 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

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *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.");
}

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

عرض الإعلان

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

Swift

@IBAction func doSomething(_ sender: Any) {
  guard let interstitial = interstitial else {
    return print("Ad wasn't ready.")
  }

  // The UIViewController parameter is an optional.
  interstitial.present(fromRootViewController: nil)
}

Objective-C

- (IBAction)doSomething:(id)sender {
  if (self.interstitial) {
    // The UIViewController parameter is nullable.
    [self.interstitial presentFromRootViewController:nil];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

إذا لم تحصل على أي إعلانات مجددًا، وكانت استجابة الخطأ "خطأ في الطلب: ما مِن إعلانات لعرضها"، تأكَّد من أنّ العنصر يحتوي على تصميم إعلان يستهدف الحجم المناسب. أحجام الإعلانات البينية هي 320×480 و 480×320 للهواتف و 1024×768 و 768×1024 للأجهزة اللوحية. إذا لم يكن الجهاز كبيرًا بما يكفي ليتناسب مع المقاس 1024×768 أو 768×1024، فسيعود إلى الحجم 320×480 أو 480×320.

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

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

أمثلة على GitHub

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

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