الإعلانات على شاشة فتح التطبيق

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

هذا الدليل مخصّص للناشرين الذين يدمجون "الإعلانات على شاشة فتح التطبيق".

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

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

في ما يلي الخطوات المطلوبة لتنفيذ "الإعلانات على شاشة فتح التطبيق":

  1. أنشئ فئة مدير تحمّل إعلانًا قبل أن تحتاج إلى عرضه.
  2. عرض الإعلان أثناء أحداث تشغيل التطبيق في المقدّمة
  3. التعامل مع عمليات معاودة الاتصال الخاصة بالعرض التقديمي

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

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

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

أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام المعرّف المخصّص لوحدة الإعلانات الاختبارية من أجل "الإعلانات عند فتح التطبيق":

ca-app-pub-3940256099942544/5575463023

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

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

تنفيذ فئة مدير

يجب أن يظهر إعلانك بسرعة، لذا من الأفضل تحميله قبل الحاجة إلى عرضه. بهذه الطريقة، سيكون لديك إعلان جاهز للعرض فور دخول المستخدم إلى تطبيقك. نفِّذ فئة مدير لتقديم طلبات الإعلان قبل الوقت الذي تحتاج فيه إلى عرض الإعلان.

أنشئ فئة جديدة ذات مثيل واحد باسم AppOpenAdManager:

Swift

class AppOpenAdManager: NSObject {
  /// The app open ad.
  var appOpenAd: AppOpenAd?
  /// Maintains a reference to the delegate.
  weak var appOpenAdManagerDelegate: AppOpenAdManagerDelegate?
  /// Keeps track of if an app open ad is loading.
  var isLoadingAd = false
  /// Keeps track of if an app open ad is showing.
  var isShowingAd = false
  /// Keeps track of the time when an app open ad was loaded to discard expired ad.
  var loadTime: Date?
  /// For more interval details, see https://support.google.com/admob/answer/9341964
  let timeoutInterval: TimeInterval = 4 * 3_600

  static let shared = AppOpenAdManager()

Objective-C

@interface AppOpenAdManager ()

/// The app open ad.
@property(nonatomic, strong, nullable) GADAppOpenAd *appOpenAd;
/// Keeps track of if an app open ad is loading.
@property(nonatomic, assign) BOOL isLoadingAd;
/// Keeps track of if an app open ad is showing.
@property(nonatomic, assign) BOOL isShowingAd;
/// Keeps track of the time when an app open ad was loaded to discard expired ad.
@property(nonatomic, strong, nullable) NSDate *loadTime;

@end

/// For more interval details, see https://support.google.com/admob/answer/9341964
static const NSInteger kTimeoutInterval = 4;

@implementation AppOpenAdManager

+ (nonnull AppOpenAdManager *)sharedInstance {
  static AppOpenAdManager *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[AppOpenAdManager alloc] init];
  });
  return instance;
}

وتنفيذ بروتوكول AppOpenAdManagerDelegate الخاص به:

Swift

protocol AppOpenAdManagerDelegate: AnyObject {
  /// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
  /// show).
  func appOpenAdManagerAdDidComplete(_ appOpenAdManager: AppOpenAdManager)
}

Objective-C

@protocol AppOpenAdManagerDelegate <NSObject>
/// Method to be invoked when an app open ad life cycle is complete (i.e. dismissed or fails to
/// show).
- (void)adDidComplete;
@end

تحميل إعلان

الخطوة التالية هي تحميل إعلان على شاشة فتح التطبيق:

Swift

func loadAd() async {
  // Do not load ad if there is an unused ad or one is already loading.
  if isLoadingAd || isAdAvailable() {
    return
  }
  isLoadingAd = true

  do {
    appOpenAd = try await AppOpenAd.load(
      with: "ca-app-pub-3940256099942544/5575463023", request: Request())
    appOpenAd?.fullScreenContentDelegate = self
    loadTime = Date()
  } catch {
    print("App open ad failed to load with error: \(error.localizedDescription)")
    appOpenAd = nil
    loadTime = nil
  }
  isLoadingAd = false
}

Objective-C

- (void)loadAd {
  // Do not load ad if there is an unused ad or one is already loading.
  if ([self isAdAvailable] || self.isLoadingAd) {
    return;
  }
  self.isLoadingAd = YES;

  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5575463023"
                         request:[GADRequest request]
               completionHandler:^(GADAppOpenAd * _Nullable appOpenAd, NSError * _Nullable error) {
    self.isLoadingAd = NO;
    if (error) {
      NSLog(@"App open ad failed to load with error: %@", error);
      self.appOpenAd = nil;
      self.loadTime = nil;
      return;
    }
    self.appOpenAd = appOpenAd;
    self.appOpenAd.fullScreenContentDelegate = self;
    self.loadTime = [NSDate date];
  }];
}

عرض إعلان

الخطوة التالية هي عرض إعلان على شاشة فتح التطبيق. في حال عدم توفّر أي إعلان، حاوِل تحميل إعلان جديد.

Swift

func showAdIfAvailable() {
  // If the app open ad is already showing, do not show the ad again.
  if isShowingAd {
    return print("App open ad is already showing.")
  }

  // If the app open ad is not available yet but is supposed to show, load
  // a new ad.
  if !isAdAvailable() {
    print("App open ad is not ready yet.")
    // The app open ad is considered to be complete in this example.
    appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
    // Load a new ad.
    return
  }

  if let appOpenAd {
    appOpenAd.present(from: nil)
    isShowingAd = true
  }
}

Objective-C

- (void)showAdIfAvailable {
  // If the app open ad is already showing, do not show the ad again.
  if (self.isShowingAd) {
    NSLog(@"App open ad is already showing.");
    return;
  }

  // If the app open ad is not available yet but is supposed to show, load
  // a new ad.
  if (![self isAdAvailable]) {
    NSLog(@"App open ad is not ready yet.");
    // The app open ad is considered to be complete in this example.
    [self adDidComplete];
    // Load a new ad.
    return;
  }

  [self.appOpenAd presentFromRootViewController:nil];
  self.isShowingAd = YES;
}

عرض الإعلان أثناء أحداث تقديم التطبيق في المقدّمة

عندما يصبح التطبيق نشطًا، اتّصِل بالدالة showAdIfAvailable() لعرض إعلان إذا كان متوفّرًا، أو حمِّل إعلانًا جديدًا.

Swift

func applicationDidBecomeActive(_ application: UIApplication) {
  // Show the app open ad when the app is foregrounded.
  AppOpenAdManager.shared.showAdIfAvailable()
}

Objective-C

- (void) applicationDidBecomeActive:(UIApplication *)application {
  // Show the app open ad when the app is foregrounded.
  [AppOpenAdManager.sharedInstance showAdIfAvailable];
}

التعامل مع عمليات معاودة الاتصال الخاصة بالعرض التقديمي

لتلقّي إشعارات عن أحداث العرض التقديمي، يجب تعيين GADFullScreenContentDelegate إلى السمة fullScreenContentDelegate الخاصة بالإعلان المعروض:

Swift

appOpenAd?.fullScreenContentDelegate = self

Objective-C

self.appOpenAd.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("App open ad recorded an impression.")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("App open ad recorded a click.")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("App open ad will be dismissed.")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("App open ad will be presented.")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("App open ad was dismissed.")
  appOpenAd = nil
  isShowingAd = false
  appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
  Task {
    await loadAd()
  }
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("App open ad failed to present with error: \(error.localizedDescription)")
  appOpenAd = nil
  isShowingAd = false
  appOpenAdManagerDelegate?.appOpenAdManagerAdDidComplete(self)
  Task {
    await loadAd()
  }
}

Objective-C

- (void)adDidRecordImpression:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad recorded an impression.");
}

- (void)adDidRecordClick:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad recorded a click.");
}

- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad will be presented.");
}

- (void)adWillDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad will be dismissed.");
}

- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"App open ad was dismissed.");
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  [self adDidComplete];
  [self loadAd];
}

- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  NSLog(@"App open ad failed to present with error: %@", error.localizedDescription);
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  [self adDidComplete];
  [self loadAd];
}

مراعاة مدة صلاحية الإعلان

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

في AppOpenAdManager، أضِف السمة Date المسماة loadTime واضبط السمة عند تحميل إعلانك. يمكنك بعد ذلك إضافة طريقة تعرض القيمة true إذا لم يمرّ عدد معيّن من الساعات منذ تحميل إعلانك. احرص على التحقّق من صحة مرجع الإعلان قبل محاولة عرضه.

Swift

private func wasLoadTimeLessThanNHoursAgo(timeoutInterval: TimeInterval) -> Bool {
  // Check if ad was loaded more than n hours ago.
  if let loadTime = loadTime {
    return Date().timeIntervalSince(loadTime) < timeoutInterval
  }
  return false
}

private func isAdAvailable() -> Bool {
  // Check if ad exists and can be shown.
  return appOpenAd != nil && wasLoadTimeLessThanNHoursAgo(timeoutInterval: timeoutInterval)
}

Objective-C

- (BOOL)wasLoadTimeLessThanNHoursAgo:(int)n {
  // Check if ad was loaded more than n hours ago.
  NSDate *now = [NSDate date];
  NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
  double secondsPerHour = 3600.0;
  double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
  return intervalInHours < n;
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return _appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}

عمليات التشغيل الباردة وشاشات التحميل

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

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

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

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

صمّمت Google &quot;الإعلانات على شاشة فتح التطبيق&quot; لمساعدتك في تحقيق الربح من شاشة تحميل تطبيقك، ولكن من المهم مراعاة أفضل الممارسات لكي يستمتع المستخدمون باستخدام تطبيقك. احرص على ما يلي:

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

مثال كامل على GitHub

Swift Objective-C

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

مزيد من المعلومات حول خصوصية المستخدم