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

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

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

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

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

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

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

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

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

لمزيد من المعلومات عن طريقة عمل الإعلانات الاختبارية في حزمة تطوير البرامج (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 to thefullScreenContentDelegate` للإعلان الذي تم عرضه على النحو التالي:

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

قصص النجاح

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