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

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

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

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

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

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

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

أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم التعريف المخصّص للوحدة الإعلانية الاختبارية للإعلانات البينية على نظام التشغيل 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

guard let interstitial = interstitial else {
  return print("Ad wasn't ready.")
}

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

Objective-C

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

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

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

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

أمثلة على GitHub

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

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