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:
- Bir reklamı göstermeniz gerekmeden yükleyen bir yönetici sınıfı oluşturun.
- Uygulamayı ön plana alma etkinlikleri sırasında reklamı göster.
- 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ı öğrenebilirsiniz.
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
Sonraki adımlar
Kullanıcı gizliliği hakkında daha fazla bilgi edinin.