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

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

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

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

قصص النجاح

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