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

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

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

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

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

قبل المتابعة، عليك إعداد Google Mobile Ads SDK.

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

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

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

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

لمعرفة تفاصيل عن الإعلانات الاختبارية في Google Mobile Ads SDK، يُرجى الاطّلاع على مقالة تفعيل الإعلانات الاختبارية.

التنفيذ

في ما يلي الخطوات الرئيسية لدمج "الإعلانات البينية":

  1. حمِّل إعلانًا.
  2. التسجيل لتلقّي عمليات معاودة الاتصال
  3. عرض الإعلان

تحميل إعلان

يتم تحميل الإعلان باستخدام طريقة load(adUnitID:request) في الفئة GADInterstitialAd.

Swift

fileprivate func loadInterstitial() async {
  do {
    interstitial = try await InterstitialAd.load(
      with: "ca-app-pub-3940256099942544/4411468910", request: Request())
    interstitial?.fullScreenContentDelegate = self
  } catch {
    print("Failed to load interstitial ad with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, FullScreenContentDelegate {
  private var interstitialAd: InterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await InterstitialAd.load(
        with: "ca-app-pub-3940256099942544/4411468910", request: Request())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

[GADInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
              request:[GADRequest 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;
    }];

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

لتلقّي إشعارات بشأن أحداث العرض، عليك ضبط السمة GADFullScreenContentDelegate على القيمة fullScreenContentDelegate للإعلان الذي تم عرضه:

Swift

interstitial?.fullScreenContentDelegate = self

SwiftUI

interstitialAd?.fullScreenContentDelegate = self

Objective-C

self.interstitial.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
  print("\(#function) called with error: \(error.localizedDescription)")
  // Clear the interstitial ad.
  interstitial = nil
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitial = nil
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)ad:(id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

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

عرض الإعلان

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

Swift

ad.present(from: self!)

SwiftUI

استمِع إلى أحداث واجهة المستخدم في العرض لتحديد وقت عرض الإعلان.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

اعرض الإعلان البيني من نموذج العرض:

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

  interstitialAd.present(from: nil)
}

Objective-C

[self.interstitial presentFromRootViewController:self];

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

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

مراجع إضافية

أمثلة على GitHub

يمكنك الاطّلاع على الأمثلة الكاملة لـ "الإعلانات البينية" بلغتك المفضّلة:

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

قصص النجاح

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