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ılar için tasarlanmış özel bir reklam biçimidir. Uygulama açılış reklamları, kullanıcılarınız tarafından dilediği zaman 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. Uygulama açılış reklamlarının görünümüyle ilgili örneği aşağıda bulabilirsiniz:
Uygulama açılış reklamlarını uygulamak için gereken adımlar genel olarak şunlardır:
- Reklamı göstermeniz gerekmeden önce yükleyen bir yönetici sınıfı oluşturun.
- Uygulama ön plana getirme etkinlikleri sırasında reklamı gösterin.
- Sunu geri çağırmalarını işleyin.
Ön koşullar
- Başlangıç kılavuzumuzdaki kurulum talimatlarını uygulayın.
- Cihazınızı test cihazı olarak nasıl yapılandıracağınızı öğrenin.
Her zaman test reklamlarıyla test yapın
Uygulamalarınızı oluşturup test ederken canlı yayınlanan üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Bu işlemi yapmazsanız hesabınız askıya alınabilir.
Test reklamlarını yüklemenin en kolay yolu, uygulama açılış reklamları için özel test reklam birimi kimliğimizi kullanmaktır:
ca-app-pub-3940256099942544/5575463023
Bu kimlik, her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır ve kodlama, test etme ve hata ayıklama sırasında kendi uygulamalarınızda kullanabilirsiniz. Uygulamanızı yayınlamadan önce bu kimliği kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.
Mobile Ads SDK'sının test reklamlarının çalışma şekli hakkında daha fazla bilgi için Test Reklamları başlıklı makaleyi inceleyin.
Yönetici sınıfı uygulama
Reklamınız hızlı bir şekilde gösterilmelidir. Bu nedenle, reklamınızı göstermeniz gerekmeden önce yüklemeniz en iyisidir. Bu sayede, kullanıcı uygulamanıza girer girmez hazır bir reklamınız olur. Reklam isteklerini reklamı göstermeniz gerekmeden önce yapmak için bir yönetici sınıfı uygulayın.
AppOpenAdManager
adlı yeni bir tekil sınıf oluşturun:
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;
}
Ve AppOpenAdManagerDelegate
protokolünü uygulayın:
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
Reklam yükleme
Bir sonraki adım, uygulama açılışı reklamı yüklemektir:
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];
}];
}
Reklam gösterme
Bir sonraki adım, uygulama açılış reklamı göstermektir. Reklam yoksa yeni bir reklam yüklemeyi deneyin.
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;
}
Uygulama ön plana getirme etkinlikleri sırasında reklamı gösterme
Uygulama etkin hale geldiğinde, varsa reklam göstermek veya yeni bir reklam yüklemek için showAdIfAvailable()
işlevini çağırın.
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];
}
Sunum geri çağırmalarını işleme
Sunum etkinlikleriyle ilgili bildirim almak için döndürülen reklamın fullScreenContentDelegate özelliğine GADFullScreenContentDelegate
değerini atamanız gerekir:
Swift
appOpenAd?.fullScreenContentDelegate = self
Objective-C
self.appOpenAd.fullScreenContentDelegate = self;
Özellikle, ilk uygulama açılış reklamı gösterimi tamamlandıktan sonra bir sonraki uygulama açılış reklamını istemeniz gerekir. Aşağıdaki kodda, protokolün AppOpenAdManager
dosyanızda nasıl uygulanacağı gösterilmektedir:
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];
}
Reklam geçerlilik süresini göz önünde bulundurma
Geçerlilik süresi dolan bir reklamı göstermediğinizden emin olmak için, reklam referansınız yüklendikten sonra geçen süreyi kontrol eden bir yöntem ekleyebilirsiniz.
AppOpenAdManager
öğenize Date
adlı bir özellik ekleyin ve reklamınız yüklendiğinde özelliği ayarlayın.loadTime
Ardından, reklamınız yüklendikten sonra belirli bir saatten daha kısa bir süre geçtiyse true
değerini döndüren bir yöntem ekleyebilirsiniz. Reklamı göstermeyi denemeden önce reklam referansınızın geçerliliğini kontrol ettiğinizden emin olun.
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];
}
Soğuk başlatmalar ve yükleme ekranları
Dokümanlarda, yalnızca kullanıcılar uygulamayı bellekte askıya alındığında ön plana getirdiğinde uygulama açılış reklamları gösterdiğiniz varsayılır. "Soğuk başlatmalar", uygulamanız başlatıldığında ancak daha önce bellekte askıya alınmadığında gerçekleşir.
Sıfırdan başlatmaya örnek olarak, kullanıcının uygulamanızı ilk kez açması verilebilir. Sıfırdan başlatma durumunda, daha önce yüklenmiş ve hemen gösterilmeye hazır bir uygulama açılış reklamınız olmaz. Reklam isteğinde bulunmanız ile reklam yanıtı almanız arasındaki gecikme, kullanıcıların bağlam dışı bir reklamla karşılaşmadan önce uygulamanızı kısa bir süre kullanabildiği bir durum yaratabilir. Bu durum kötü bir kullanıcı deneyimi olduğundan kaçınılmalıdır.
Uygulama açılış reklamlarını baştan başlatma sırasında kullanmanın tercih edilen yolu, oyununuzu veya uygulama öğelerinizi yüklemek için bir yükleme ekranı kullanmak ve reklamı yalnızca yükleme ekranında göstermektir. Uygulamanızın yüklenmesi tamamlandıysa ve kullanıcı uygulamanızın ana içeriğine yönlendirildiyse 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ını geliştirdi. Ancak kullanıcılarınızın uygulamanızı keyifle kullanabilmesi için en iyi uygulamaları göz önünde bulundurmanız önemlidir. Şunları yaptığınızdan emin olun:
- Kullanıcılarınız uygulamanızı birkaç kez kullandıktan sonra ilk uygulama açılış reklamınızı gösterin.
- Kullanıcılarınızın uygulamanızın yüklenmesini bekleyeceği zamanlarda uygulama açılış reklamları gösterin.
- Uygulama açılış reklamının altında yükleme ekranınız varsa ve reklam kapatılmadan önce yükleme ekranınızın yüklenmesi tamamlanırsa, yükleme ekranınızı
adDidDismissFullScreenContent
yönteminde kapatmayı deneyebilirsiniz.
GitHub'daki tam örnek
Sonraki adımlar
Kullanıcı gizliliği hakkında daha fazla bilgi edinin.