Panduan ini ditujukan bagi penayang yang mengintegrasikan iklan di layar pembuka aplikasi.
Iklan di layar pembuka aplikasi adalah format iklan khusus yang ditujukan bagi penayang yang ingin memonetisasi layar pemuatan aplikasi mereka. Iklan di layar pembuka aplikasi dapat ditutup oleh pengguna Anda kapan saja. Iklan di layar pembuka aplikasi dapat ditampilkan saat pengguna menampilkan aplikasi Anda ke latar depan.
Iklan di layar pembuka aplikasi otomatis menampilkan area branding kecil sehingga pengguna tahu bahwa mereka berada di aplikasi Anda. Berikut adalah contoh tampilan iklan di layar pembuka aplikasi:
Berikut adalah langkah-langkah yang diperlukan untuk menerapkan iklan di layar pembuka aplikasi:
- Buat class pengelola yang memuat iklan sebelum Anda perlu menayangkannya.
- Tampilkan iklan selama peristiwa pengaktifan aplikasi di latar depan.
- Menangani callback presentasi.
Prasyarat
- Ikuti petunjuk penyiapan di panduan Memulai kami.
- Ketahui cara mengonfigurasi perangkat Anda sebagai perangkat pengujian.
Selalu lakukan pengujian dengan iklan percobaan
Saat membuat dan menguji aplikasi, pastikan Anda menggunakan iklan percobaan, bukan iklan produksi langsung. Jika Anda tidak melakukannya, akun Anda dapat ditangguhkan.
Cara termudah untuk memuat iklan percobaan adalah dengan menggunakan ID unit iklan percobaan khusus kami untuk iklan pembuka aplikasi:
ca-app-pub-3940256099942544/5575463023
ID ini telah dikonfigurasi secara khusus untuk menampilkan iklan pengujian untuk setiap permintaan, dan Anda bebas menggunakannya di aplikasi Anda sendiri saat melakukan coding, pengujian, dan pen-debugan. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.
Untuk mengetahui informasi selengkapnya tentang cara kerja iklan percobaan Mobile Ads SDK, lihat Iklan Percobaan.
Mengimplementasikan class pengelola
Iklan Anda akan ditampilkan dengan cepat, jadi sebaiknya muat iklan sebelum Anda perlu menayangkannya. Dengan begitu, Anda akan memiliki iklan yang siap ditayangkan segera setelah pengguna masuk ke aplikasi Anda. Terapkan class pengelola untuk membuat permintaan iklan sebelum Anda perlu menampilkan iklan.
Buat class singleton baru bernama AppOpenAdManager
:
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;
}
Dan terapkan protokol AppOpenAdManagerDelegate
-nya:
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
Memuat iklan
Langkah berikutnya adalah memuat iklan di layar pembuka aplikasi:
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];
}];
}
Menampilkan iklan
Langkah selanjutnya adalah menampilkan iklan pembuka aplikasi. Jika tidak ada iklan yang tersedia, coba muat iklan baru.
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;
}
Menampilkan iklan selama peristiwa latar depan aplikasi
Saat aplikasi menjadi aktif, panggil showAdIfAvailable()
untuk menampilkan iklan jika
tersedia, atau memuat iklan baru.
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];
}
Menangani callback presentasi
Untuk menerima notifikasi untuk peristiwa presentasi, Anda harus menetapkan
GADFullScreenContentDelegate
ke properti fullScreenContentDelegate`s dari
iklan yang ditampilkan:
Swift
appOpenAd?.fullScreenContentDelegate = self
Objective-C
self.appOpenAd.fullScreenContentDelegate = self;
Secara khusus, Anda harus meminta iklan pembuka aplikasi berikutnya setelah iklan pertama selesai ditampilkan. Kode berikut menunjukkan cara menerapkan protokol
dalam file AppOpenAdManager
Anda:
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];
}
Pertimbangkan waktu berakhir iklan
Untuk memastikan Anda tidak menampilkan iklan yang masa berlakunya sudah habis, Anda dapat menambahkan metode ke delegasi aplikasi yang memeriksa waktu yang telah berlalu sejak referensi iklan Anda dimuat.
Di AppOpenAdManager
, tambahkan properti Date
bernama loadTime
dan tetapkan properti saat iklan Anda dimuat. Kemudian, Anda dapat menambahkan metode yang menampilkan true
jika
kurang dari sejumlah jam tertentu telah berlalu sejak iklan Anda dimuat. Pastikan Anda memeriksa validitas referensi iklan sebelum mencoba menampilkan iklan.
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];
}
Cold start dan layar pemuatan
Dokumentasi ini mengasumsikan bahwa Anda hanya menampilkan iklan di layar pembuka aplikasi saat pengguna memunculkan aplikasi Anda di latar depan saat aplikasi ditangguhkan dalam memori. "Start cold" terjadi saat aplikasi Anda diluncurkan, tetapi sebelumnya tidak ditangguhkan dalam memori.
Contoh start dingin adalah saat pengguna membuka aplikasi Anda untuk pertama kalinya. Dengan start dingin, Anda tidak akan memiliki iklan buka aplikasi yang dimuat sebelumnya yang siap ditampilkan dengan segera. Penundaan antara saat Anda meminta iklan dan menerima iklan kembali dapat menciptakan situasi di mana pengguna dapat menggunakan aplikasi Anda secara singkat sebelum terkejut dengan iklan di luar konteks. Hal ini harus dihindari karena merupakan pengalaman pengguna yang buruk.
Cara terbaik untuk menggunakan iklan di layar pembuka aplikasi pada cold start adalah dengan menggunakan layar pemuatan untuk memuat aset game atau aplikasi Anda, dan hanya menampilkan iklan dari layar pemuatan. Jika aplikasi Anda telah selesai dimuat dan telah mengarahkan pengguna ke konten utama aplikasi Anda, jangan tampilkan iklan.
Praktik terbaik
Google membuat iklan pembuka aplikasi untuk membantu Anda memonetisasi layar pemuatan aplikasi, tetapi Anda harus mengingat praktik terbaik agar pengguna menikmati penggunaan aplikasi Anda. Pastikan untuk:
- Tunggu hingga pengguna menggunakan aplikasi Anda beberapa kali sebelum menampilkan iklan di layar pembuka aplikasi pertama.
- Tampilkan iklan di layar pembuka aplikasi selama waktu saat pengguna Anda biasanya menunggu aplikasi Anda dimuat.
- Jika Anda memiliki layar pemuatan di belakang iklan di layar pembuka aplikasi, dan layar pemuatan selesai dimuat sebelum iklan ditutup, sebaiknya hapus layar pemuatan dalam metode
adDidDismissFullScreenContent
.
Contoh lengkap di GitHub
Langkah berikutnya
Pelajari lebih lanjut privasi pengguna.