Uygulama Açılış Reklamları

Bu kılavuz, uygulama açılış reklamlarını entegre eden yayıncılar için hazırlanmıştır.

Uygulama açılış reklamları, uygulama yükleme ekranlarından para kazanmak isteyen yayıncılara yönelik özel bir reklam biçimidir. Uygulama açılış reklamları, kullanıcılarınız tarafından herhangi bir zamanda kapatılabilir. Uygulama açılış reklamları, kullanıcılar uygulamanızı ön plana getirdiğinde gösterilebilir.

Uygulama açılış reklamları, kullanıcılara uygulamanızda olduklarını hatırlatmak için otomatik olarak küçük bir marka alanı gösterir. Aşağıda, uygulama açılış reklamının nasıl göründüğüne dair bir örnek verilmiştir:

Genel olarak, uygulama açılış reklamlarını uygulamak için gereken adımlar şunlardır:

  1. Bir reklamı göstermeniz gerekmeden yükleyen bir yönetici sınıfı oluşturun.
  2. Uygulamayı ön plana alma etkinlikleri sırasında reklamı göster.
  3. Sunu geri çağırmalarını işleyin.

Ön koşullar

Her zaman test reklamlarıyla test etme

Uygulamalarınızı oluştururken ve test ederken canlı, üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Aksi takdirde hesabınız askıya alınabilir.

Test reklamlarını yüklemenin en kolay yolu, uygulama açılış reklamlarına özel test reklam birimi kimliğimizi kullanmaktır:

/21775744923/example/app-open

Bu kod, her istek için test reklamı döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test etme ve hata ayıklama sırasında bu reklam öğesini kendi uygulamalarınızda kullanabilirsiniz. Uygulamanızı yayınlamadan önce bu kimliği kendi reklam birimi kimliğinizle değiştirdiğinizden emin olmanız yeterlidir.

Mobile Ads SDK'sının test reklamlarının nasıl çalıştığı hakkında daha fazla bilgi için Reklamları Test Etme bölümüne bakın.

Yönetici sınıfını uygulama

Reklamınız hızlıca gösterileceğinden, gösterilmeden önce yüklenmesi en iyi seçenektir. Böylece, kullanıcı uygulamanıza girer girmez bir reklamınız yayınlanmaya hazır olur. Reklamı göstermeniz gereken zamandan önce reklam isteklerinde bulunmak için bir yönetici sınıfı uygulayın.

AppOpenAdManager adında yeni bir singleton sınıfı oluşturun ve sınıfı aşağıdaki gibi doldurun:

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

Reklam yükle

Bir sonraki adım, loadAd() yöntemini doldurmaktır.

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

Reklam gösterme

Bir sonraki adım, showAdIfAvailable() yöntemini doldurmaktır. Hiç reklam yoksa yöntem bir reklam yüklemeyi dener.

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

Uygulamayı ön plana alma etkinlikleri sırasında reklam göster

Uygulama etkin hale geldiğinde, varsa reklam göstermek için showAdIfAvailable() yöntemini çağırın veya yeni bir reklam yükleyin.

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

Sunu geri çağırmalarını işleme

Uygulamanız bir uygulama açılış reklamı görüntülediğinde, belirli sunu etkinliklerini işlemek için GADFullScreenContentDelegate kullanmanız gerekir. Özellikle, ilk reklam sunumu tamamlandıktan sonra bir sonraki uygulama açılış reklamını istemeniz gerekir.

AppOpenAdManager sınıfınıza aşağıdakileri ekleyin:

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

Reklam geçerlilik süresini göz önünde bulundurma

Süresi dolmuş bir reklam göstermediğinizden emin olmak için uygulama temsilcisine, reklam referansınızın yüklenmesinden itibaren geçen süreyi kontrol eden bir yöntem ekleyebilirsiniz.

AppOpenAdManager öğenizde loadTime adlı bir Date özelliği ekleyin ve bu özelliği reklamınız yüklendiğinde ayarlayın. Daha sonra, reklamınızın yüklenmesinin üzerinden belirli bir süre geçtikten sonra true değerini döndüren bir yöntem ekleyebilirsiniz. Reklamı göstermeye çalışmadan önce reklam referansınızın geçerliliğini kontrol edin.

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

Sıfırdan başlatma ve ekranlar yükleme

Bu dokümanlarda, uygulama açılış reklamlarının yalnızca kullanıcılar uygulamanız bellekte askıya alındığında ön planda kaldığında gösterdiğiniz varsayılmaktadır. "Sıfırdan başlatmalar", uygulamanız başlatıldığında ancak daha önce bellekte askıya alınmadığında gerçekleşir.

Soğuk başlatmaya örnek olarak, kullanıcının uygulamanızı ilk kez açması gösterilebilir. Sıfırdan başlatma sayesinde, önceden yüklenmiş ve hemen gösterilmeye hazır bir uygulama açılış reklamınız olmaz. Bir reklam isteğinde bulunmanız ile reklamı geri almanız arasındaki gecikme, kullanıcıların bağlam dışı bir reklam karşısında şaşırmadan önce uygulamanızı kısa bir süreliğine kullanmalarına neden olabilir. Kötü bir kullanıcı deneyimi olduğu için bundan kaçınılmalıdır.

Sıfırdan başlatmalarda uygulama açılış reklamlarını kullanmanın tercih edilen yolu, oyun veya uygulama öğelerinizi yüklemek için yükleme ekranı kullanmak ve reklamı yalnızca yükleme ekranından göstermektir. Uygulamanızın yüklenmesi tamamlandıysa ve kullanıcıyı uygulamanızın ana içeriğine yönlendirdiyse reklamı göstermeyin.

En iyi uygulamalar

Google, uygulamanızın yükleme ekranından para kazanmanıza yardımcı olmak için uygulama açılış reklamları oluşturmuştur. Ancak, kullanıcılarınızın uygulamanızı kullanmaktan keyif almaları için en iyi uygulamaları aklınızda bulundurmanız önemlidir. Aşağıdakileri yaptığınızdan emin olun:

  • İlk uygulama açılış reklamınızı göstermek için, kullanıcılarınız uygulamanızı birkaç kez kullanana kadar bekleyin.
  • Kullanıcılarınızın uygulamanızın yüklenmesini bekleyebileceği zamanlarda uygulama açılış reklamları gösterin.
  • Uygulama açılış reklamının altında yükleme ekranınız varsa ve yükleme ekranınızın yüklenmesi reklam kapatılmadan önce tamamlanırsa, adDidDismissFullScreenContent yöntemini kullanarak yükleme ekranınızı kapatmak isteyebilirsiniz.

GitHub'daki örneği tamamlayın

Swift Objective-C

Sonraki adımlar

Kullanıcı gizliliği hakkında daha fazla bilgi edinin.