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 kapan saja. Iklan di layar pembuka aplikasi dapat ditampilkan saat pengguna menampilkan aplikasi di latar depan.
Iklan di layar pembuka aplikasi secara otomatis menampilkan area branding kecil sehingga pengguna tahu bahwa mereka berada di aplikasi Anda. Berikut contoh tampilan iklan di layar pembuka aplikasi:
Secara umum, berikut langkah-langkah yang diperlukan untuk menerapkan iklan di layar pembuka aplikasi:
- Buat kelas pengelola yang memuat iklan sebelum Anda perlu menampilkannya.
- Menampilkan iklan selama peristiwa latar depan aplikasi.
- Menangani callback presentasi.
Prasyarat
- Ikuti petunjuk penyiapan di Panduan Memulai.
- Mengetahui cara mengonfigurasi perangkat Anda sebagai perangkat pengujian.
Selalu uji 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 pengujian khusus kami untuk iklan di layar pembuka aplikasi:
/21775744923/example/app-open
Layanan ini telah dikonfigurasi secara khusus untuk menampilkan iklan percobaan untuk setiap permintaan, dan Anda dapat menggunakannya di aplikasi Anda sendiri saat melakukan coding, menguji, dan melakukan proses debug. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.
Untuk informasi selengkapnya tentang cara kerja iklan percobaan Mobile Ads SDK, lihat Iklan Percobaan.
Mengimplementasikan class pengelola
Iklan Anda harus ditampilkan dengan cepat, jadi sebaiknya muat iklan sebelum Anda perlu menampilkannya. Dengan begitu, iklan Anda akan siap ditayangkan segera setelah pengguna memasuki aplikasi Anda. Terapkan class pengelola untuk membuat permintaan iklan lebih awal saat Anda perlu menampilkan iklan.
Buat class singleton baru bernama AppOpenAdManager
dan isi sebagai
berikut:
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
Memuat iklan
Langkah berikutnya adalah mengisi metode loadAd()
.
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;
}];
}
Menampilkan iklan
Langkah berikutnya adalah mengisi metode showAdIfAvailable()
. Jika tidak ada iklan yang tersedia, metode ini akan mencoba memuat iklan.
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];
}
Menampilkan iklan selama peristiwa latar depan aplikasi
Saat aplikasi menjadi aktif, panggil showAdIfAvailable()
untuk menampilkan iklan jika
tersedia, atau memuat iklan baru.
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
Menangani callback presentasi
Saat aplikasi menampilkan iklan di layar pembuka aplikasi, Anda harus mengandalkan
GADFullScreenContentDelegate
untuk menangani peristiwa presentasi tertentu. Secara
khusus, sebaiknya Anda meminta iklan di layar pembuka aplikasi berikutnya setelah iklan yang pertama
selesai ditampilkan.
Di class AppOpenAdManager
Anda, tambahkan kode berikut:
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
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 berlalu sejak referensi iklan dimuat.
Di AppOpenAdManager
, tambahkan properti Date
bernama loadTime
dan tetapkan properti saat iklan Anda dimuat. Selanjutnya, Anda dapat menambahkan metode yang menampilkan true
jika
kurang dari jumlah jam tertentu sejak iklan dimuat. Pastikan Anda memeriksa validitas referensi iklan sebelum mencoba menampilkan iklan.
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
Cold start dan layar pemuatan
Dokumentasi ini mengasumsikan bahwa Anda hanya menampilkan iklan di layar pembuka aplikasi saat pengguna menampilkan aplikasi Anda di latar depan saat aplikasi ditangguhkan di memori. "Cold start" terjadi saat aplikasi diluncurkan, tetapi sebelumnya tidak ditangguhkan di memori.
Contoh cold start adalah saat pengguna membuka aplikasi Anda untuk pertama kalinya. Dengan cold start, Anda tidak akan memiliki iklan di layar pembuka aplikasi yang dimuat sebelumnya yang siap langsung ditampilkan. Keterlambatan antara saat Anda meminta iklan dan menerima kembali iklan dapat menciptakan situasi saat pengguna dapat menggunakan aplikasi Anda sebentar sebelum dikejutkan oleh iklan di luar konteks. Hal ini harus dihindari karena ini adalah pengalaman pengguna yang buruk.
Cara yang lebih disukai untuk menggunakan iklan di layar pembuka aplikasi saat cold start adalah dengan menggunakan layar pemuatan untuk memuat aset game atau aplikasi Anda, dan hanya menampilkan iklan dari layar pemuatan. Jika aplikasi telah selesai dimuat dan telah mengarahkan pengguna ke konten utama aplikasi Anda, jangan tampilkan iklan.
Praktik terbaik
Google membuat iklan di layar pembuka aplikasi untuk membantu Anda memonetisasi layar pemuatan aplikasi, tetapi Anda harus memperhatikan praktik terbaik agar pengguna senang menggunakan aplikasi Anda. Pastikan untuk:
- Tunggu hingga iklan di layar pembuka aplikasi pertama Anda ditampilkan hingga pengguna menggunakan aplikasi Anda beberapa kali.
- Menampilkan iklan di layar pembuka aplikasi ketika pengguna harus menunggu aplikasi Anda dimuat.
- Jika Anda memiliki layar pemuatan di bawah iklan di layar pembuka aplikasi, dan layar pemuatan
selesai sebelum iklan ditutup, sebaiknya tutup
layar pemuatan dalam metode
adDidDismissFullScreenContent
.
Contoh lengkap di GitHub
Langkah berikutnya
Pelajari privasi pengguna lebih lanjut.