تبلیغات باز برنامه

این راهنما برای ناشرانی در نظر گرفته شده است که تبلیغات باز برنامه را ادغام می‌کنند.

تبلیغات باز برنامه، فرمت تبلیغاتی ویژه‌ای است که برای ناشرانی که مایل به کسب درآمد از صفحات بارگذاری برنامه خود هستند، در نظر گرفته شده است. تبلیغات باز برنامه می‌تواند توسط کاربران شما در هر زمانی بسته شود. تبلیغات باز برنامه می‌تواند زمانی نمایش داده شود که کاربران برنامه شما را به پیش‌زمینه می‌آورند.

تبلیغات باز شدن اپلیکیشن به طور خودکار یک ناحیه کوچک از برند را نشان می‌دهند تا کاربران متوجه شوند که در اپلیکیشن شما هستند. در اینجا مثالی از ظاهر یک تبلیغ باز شدن اپلیکیشن آورده شده است:

در سطح بالا، مراحل مورد نیاز برای اجرای تبلیغات باز برنامه به شرح زیر است:

  1. یک کلاس مدیریت ایجاد کنید که قبل از نمایش تبلیغ، آن را بارگذاری کند.
  2. نمایش آگهی در طول رویدادهای برجسته‌سازی برنامه.
  3. مدیریت فراخوانی‌های مجدد ارائه.

پیش‌نیازها

همیشه با تبلیغات آزمایشی تست کنید

هنگام ساخت و آزمایش برنامه‌های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می‌کنید. عدم انجام این کار می‌تواند منجر به مسدود شدن حساب شما شود.

ساده‌ترین راه برای بارگذاری تبلیغات آزمایشی، استفاده از شناسه واحد تبلیغات آزمایشی اختصاصی ما برای تبلیغات باز برنامه است:

/21775744923/example/app-open

این ابزار به طور ویژه پیکربندی شده است تا برای هر درخواست، تبلیغات آزمایشی را برگرداند و شما می‌توانید در برنامه‌های خود هنگام کدنویسی، آزمایش و اشکال‌زدایی از آن استفاده کنید. فقط قبل از انتشار برنامه، مطمئن شوید که آن را با شناسه واحد تبلیغاتی خود جایگزین می‌کنید.

برای اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK تبلیغات موبایل، به بخش تبلیغات آزمایشی مراجعه کنید.

پیاده‌سازی یک کلاس مدیر

تبلیغ شما باید به سرعت نمایش داده شود، بنابراین بهتر است قبل از نیاز به نمایش، آن را بارگذاری کنید. به این ترتیب، به محض ورود کاربر به برنامه، یک تبلیغ آماده خواهید داشت. یک کلاس مدیر پیاده‌سازی کنید تا درخواست‌های تبلیغ را قبل از زمانی که نیاز به نمایش تبلیغ دارید، ارسال کند.

یک کلاس سینگلتون جدید به نام AppOpenAdManager ایجاد کنید:

سویفت

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/admanager/answer/9351867
  let timeoutInterval: TimeInterval = 4 * 3_600

  static let shared = AppOpenAdManager()

هدف-سی

@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/admanager/answer/9351867
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 آن را پیاده‌سازی کنید:

سویفت

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)
}

هدف-سی

@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

بارگذاری یک تبلیغ

مرحله بعدی بارگذاری یک تبلیغ باز برنامه است:

سویفت

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

هدف-سی

- (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:@"/21775744923/example/app-open"
                         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];
  }];
}

نمایش یک تبلیغ

مرحله بعدی نمایش یک تبلیغ باز در برنامه است. اگر هیچ تبلیغی در دسترس نیست، سعی کنید یک تبلیغ جدید بارگذاری کنید.

سویفت

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 {
    print("App open ad will be displayed.")
    appOpenAd.present(from: nil)
    isShowingAd = true
  }
}

هدف-سی

- (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() را فراخوانی کنید تا در صورت موجود بودن، تبلیغی نمایش داده شود یا تبلیغ جدیدی بارگذاری شود.

سویفت

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

هدف-سی

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

مدیریت فراخوانی‌های مجدد ارائه

برای دریافت اعلان‌ها برای رویدادهای ارائه، باید GADFullScreenContentDelegate را به ویژگی fullScreenContentDelegate مربوط به تبلیغ برگردانده شده اختصاص دهید:

سویفت

appOpenAd?.fullScreenContentDelegate = self

هدف-سی

self.appOpenAd.fullScreenContentDelegate = self;

به طور خاص، شما می‌خواهید پس از اتمام نمایش اولین تبلیغ، درخواست نمایش تبلیغ بعدی را بدهید. کد زیر نحوه پیاده‌سازی پروتکل را در فایل AppOpenAdManager شما نشان می‌دهد:

سویفت

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()
  }
}

هدف-سی

- (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 را برگرداند. قبل از تلاش برای نمایش تبلیغ، حتماً اعتبار مرجع تبلیغ خود را بررسی کنید.

سویفت

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)
}

هدف-سی

- (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 self.appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}

صفحه‌های شروع سرد و بارگیری

مستندات فرض می‌کنند که شما فقط زمانی تبلیغات باز بودن برنامه را نشان می‌دهید که کاربران برنامه شما را در حالت تعلیق در حافظه، در پیش‌زمینه قرار می‌دهند. «شروع سرد» زمانی اتفاق می‌افتد که برنامه شما راه‌اندازی می‌شود اما قبلاً در حافظه معلق نبوده است.

یک نمونه از شروع سرد زمانی است که کاربر برای اولین بار برنامه شما را باز می‌کند. با شروع سرد، شما یک تبلیغ باز شده از قبل بارگذاری شده در برنامه نخواهید داشت که بلافاصله آماده نمایش باشد. تأخیر بین درخواست تبلیغ و دریافت پاسخ تبلیغ می‌تواند وضعیتی را ایجاد کند که کاربران بتوانند قبل از اینکه با یک تبلیغ خارج از متن غافلگیر شوند، به طور خلاصه از برنامه شما استفاده کنند. باید از این امر اجتناب شود زیرا یک تجربه کاربری بد است.

روش ترجیحی برای استفاده از تبلیغات باز برنامه در شروع سرد، استفاده از یک صفحه بارگذاری برای بارگذاری محتوای بازی یا برنامه شما و نمایش تبلیغ فقط از صفحه بارگذاری است. اگر بارگیری برنامه شما کامل شده و کاربر را به محتوای اصلی برنامه هدایت کرده است، تبلیغ را نشان ندهید.

بهترین شیوه‌ها

گوگل تبلیغات باز برنامه را برای کمک به کسب درآمد از صفحه بارگذاری برنامه شما ساخته است، اما مهم است که بهترین شیوه‌ها را در نظر داشته باشید تا کاربران شما از استفاده از برنامه شما لذت ببرند. حتماً:

  • برای نمایش اولین تبلیغ باز اپلیکیشن خود، تا زمانی که کاربرانتان چند بار از اپلیکیشن شما استفاده نکرده‌اند، صبر کنید.
  • تبلیغات باز شدن برنامه را در زمان‌هایی نمایش دهید که کاربران شما در غیر این صورت منتظر بارگذاری برنامه شما هستند.
  • اگر زیر تبلیغ باز برنامه، صفحه بارگذاری دارید و صفحه بارگذاری شما قبل از بسته شدن تبلیغ، بارگذاری را کامل می‌کند، می‌توانید صفحه بارگذاری خود را با استفاده از متد adDidDismissFullScreenContent بسته کنید.

مثال کامل در گیت‌هاب

سوئیفت آبجکتیو-سی

مراحل بعدی

درباره حریم خصوصی کاربران بیشتر بدانید.