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

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

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

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

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

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

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

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

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

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

/21775744923/example/app-open

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

لمزيد من المعلومات عن آلية عمل الإعلانات الاختبارية لحزمة تطوير البرامج (SDK) لعرض الإعلانات للأجهزة الجوّالة، راجع اختبار الإعلانات:

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

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

أنشِئ فئة فردية جديدة باسم "AppOpenAdManager" واملأها باسم التالي:

Swift

class AppOpenAdManager: NSObject {
  var appOpenAd: GADAppOpenAd?
  var isLoadingAd = false.
  var isShowingAd = false

  static let shared = AppOpenAdManager()

  private func loadAd() async {
    // TODO: Implement loading an ad.
  }

  func showAdIfAvailable() {
    // TODO: Implement showing an ad.
  }

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

Objective-C

@interface AppOpenAdManager ()
@property(nonatomic, strong) GADAppOpenAd *appOpenAd;
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;

@end

@implementation AppOpenAdManager

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

- (void)loadAd {
  // TODO: Implement loading an ad.
}

// Add this method to the .h file.
- (void)showAdIfAvailable {
  // TODO: Implement showing an ad.
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil;
}

@end

تحميل إعلان

الخطوة التالية هي ملء طريقة loadAd().

Swift

private 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 GADAppOpenAd.load(
      withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
  } catch {
    print("App open ad failed to load with error: \(error.localizedDescription)")
  }
  isLoadingAd = false
}

Objective-C

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

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
               self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
             }];
}

عرض إعلان

الخطوة التالية هي ملء طريقة showAdIfAvailable(). إذا لم يتم عرض إعلان المتوفرة، تحاول الطريقة تحميل إعلان.

Swift

func showAdIfAvailable() {
  // If the app open ad is already showing, do not show the ad again.
  guard !isShowingAd else { return }

  // If the app open ad is not available yet but is supposed to show, load
  // a new ad.
  if !isAdAvailable() {
    Task {
      await loadAd()
    }
    return
  }

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

Objective-C

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

  // If the app open ad is not available yet but is supposed to show, load a
  // new ad.
  if (![self isAdAvailable]) {
    [self loadAd];
    return;
  }

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

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

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

Swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  // ...

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

Objective-C

@implementation AppDelegate
// ...

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

@end

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

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

في فئة AppOpenAdManager، أضِف ما يلي:

Swift

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  // ...

  private 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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      appOpenAd?.fullScreenContentDelegate = self
    } catch {
      print("App open ad failed to load with error: \(error.localizedDescription)")
    }
    isLoadingAd = false
  }

  // ...

  // MARK: - GADFullScreenContentDelegate methods

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

  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    appOpenAd = nil
    isShowingAd = false
    // Reload an ad.
    Task {
      await loadAd()
    }
  }

  func ad(
    _ ad: GADFullScreenPresentingAd,
    didFailToPresentFullScreenContentWithError error: Error
  ) {
    appOpenAd = nil
    isShowingAd = false
    // Reload an ad.
    Task {
      await loadAd()
    }
  }
}

Objective-C

@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;

@end

@implementation AppOpenAdManager

// ...

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

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
              self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
               self.appOpenAd.fullScreenContentDelegate = self;
             }];
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil;
}

// ...

#pragma mark - GADFullScreenContentDelegate methods

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

- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  // Reload an ad.
  [self loadAd];
}

- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  self.appOpenAd = nil;
  self.isShowingAd = NO;
  // Reload an ad.
  [self loadAd];
}

@end

مراعاة انتهاء صلاحية الإعلان

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

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

Swift

class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
  var appOpenAd: GADAppOpenAd?
  var isLoadingAd = false.
  var isShowingAd = false
  var loadTime: Date?
  let fourHoursInSeconds = TimeInterval(3600 * 4)

  // ...

  private 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 GADAppOpenAd.load(
        withAdUnitID: "/21775744923/example/app-open", request: GAMRequest())
      appOpenAd?.fullScreenContentDelegate = self
      loadTime = Date()
    } catch {
      print("App open ad failed to load with error: \(error.localizedDescription)")
    }
    isLoadingAd = false
  }

  private func wasLoadTimeLessThanFourHoursAgo() -> Bool {
    guard let loadTime = loadTime else { return false }
    // Check if ad was loaded more than four hours ago.
    return Date().timeIntervalSince(loadTime) < fourHoursInSeconds
  }

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

Objective-C

static NSTimeInterval const fourHoursInSeconds = 3600 * 4;

@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@property(weak, nonatomic) NSDate *loadTime;

@end

@implementation AppOpenAdManager

// ...

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

  [GADAppOpenAd loadWithAdUnitID:@"/21775744923/example/app-open"
                       request:[GAMRequest request]
             completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
              self.isLoadingAd = NO;
               if (error) {
                 NSLog(@"Failed to load app open ad: %@", error);
                 return;
               }
               self.appOpenAd = appOpenAd;
               self.appOpenAd.fullScreenContentDelegate = self;
               self.loadTime = [NSDate date];
             }];
}

- (BOOL)wasLoadTimeLessThanFourHoursAgo {
  // Check if ad was loaded more than four hours ago.
  return [[NSDate Date] timeIntervalSinceDate:self.loadTime] < fourHoursInSeconds;
}

- (BOOL)isAdAvailable {
  // Check if ad exists and can be shown.
  return self.appOpenAd != nil && [self wasLoadTimeLessThanFourHoursAgo];
}

@end

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

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

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

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

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

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

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

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

Swift Objective-C

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

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