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

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

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

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

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

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

پیش نیازها

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

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

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

/21775744923/example/app-open

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

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

یک کلاس مدیر اجرا کنید

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

یک کلاس singleton جدید به نام AppOpenAdManager ایجاد کنید و آن را به صورت زیر پر کنید:

سویفت

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

هدف-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() است.

سویفت

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
}

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

سویفت

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

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

سویفت

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

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

هدف-C

@implementation AppDelegate
// ...

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

@end

رسیدگی به تماس های ارائه

هنگامی که برنامه شما یک تبلیغ باز برنامه نمایش می دهد، باید به GADFullScreenContentDelegate برای مدیریت برخی رویدادهای ارائه تکیه کنید. به‌ویژه، می‌خواهید پس از پایان ارائه آگهی، آگهی باز بعدی برنامه را درخواست کنید.

در کلاس AppOpenAdManager ، موارد زیر را اضافه کنید:

سویفت

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

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

سویفت

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

هدف-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

مراحل بعدی

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