คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณาที่ผสานรวมโฆษณาเปิดแอป
โฆษณาเปิดแอปเป็นรูปแบบโฆษณาพิเศษที่ออกแบบมาสำหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้จากหน้าจอโหลดของแอป ผู้ใช้สามารถปิดโฆษณาเปิดแอปได้ทุกเมื่อ โฆษณาเปิดแอปจะแสดงได้เมื่อผู้ใช้นำแอปของคุณมาไว้เบื้องหน้า
โฆษณาเปิดแอปจะแสดงองค์ประกอบแบรนด์ขนาดเล็กๆ โดยอัตโนมัติเพื่อให้ผู้ใช้รู้ว่ากำลังอยู่ในแอปของคุณ ตัวอย่างโฆษณาเปิดแอปมีลักษณะดังนี้

โดยภาพรวมระดับสูงของขั้นตอนที่ต้องใช้ในการติดตั้งใช้งานโฆษณาเปิดแอปมีดังนี้
- สร้างคลาสตัวจัดการที่โหลดโฆษณาก่อนที่คุณจะแสดงโฆษณา
- แสดงโฆษณาในระหว่างเหตุการณ์ที่แอปมาอยู่เบื้องหน้า
- จัดการการเรียกกลับของการแสดงผล
ข้อกำหนดเบื้องต้น
- ตั้งค่า Google Mobile Ads SDK
- ทราบวิธีกำหนดค่าอุปกรณ์เป็นอุปกรณ์ทดสอบ อุปกรณ์
ทดสอบด้วยโฆษณาทดสอบเสมอ
เมื่อสร้างและทดสอบแอป โปรดใช้โฆษณาทดสอบแทนโฆษณาจริง หากไม่ปฏิบัติตาม อาจทำให้บัญชีของคุณถูกระงับ
วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสำหรับโฆษณาเปิดแอป
/21775744923/example/app-open
ซึ่งได้รับการกำหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบสำหรับทุกคำขอ และคุณสามารถใช้รหัสนี้ในแอปของคุณเองได้อย่างอิสระขณะเขียนโค้ด ทดสอบ และแก้ไขข้อบกพร่อง เพียงตรวจสอบว่าคุณได้แทนที่รหัสนี้ด้วยรหัสหน่วยโฆษณาของคุณเองก่อนที่จะเผยแพร่แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบ Google Mobile Ads SDK ได้ที่ โฆษณาทดสอบ
ติดตั้งใช้งานคลาสตัวจัดการ
โฆษณาควรแสดงอย่างรวดเร็ว ดังนั้นจึงควรโหลดโฆษณาก่อนที่คุณจะแสดงโฆษณา วิธีนี้จะช่วยให้คุณมีโฆษณาพร้อมแสดงทันทีที่ผู้ใช้เข้าแอป ให้ติดตั้งใช้งานคลาสตัวจัดการเพื่อส่งคำขอโฆษณาล่วงหน้าก่อนที่คุณจะแสดงโฆษณา
สร้างคลาส Singleton ใหม่ชื่อ 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/admanager/answer/9351867
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/admanager/answer/9351867
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;
}
และติดตั้งใช้งานโปรโตคอล AppOpenAdManagerDelegate ดังนี้
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
โหลดโฆษณา
ขั้นตอนถัดไปคือการโหลดโฆษณาเปิดแอป ดังนี้
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: "/21775744923/example/app-open", request: AdManagerRequest())
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:@"/21775744923/example/app-open"
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];
}];
}
แสดงโฆษณา
ขั้นตอนถัดไปคือการแสดงโฆษณาเปิดแอป หากไม่มีโฆษณาที่พร้อมแสดง ให้ลองโหลดโฆษณาใหม่
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 {
print("App open ad will be displayed.")
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;
}
แสดงโฆษณาในระหว่างเหตุการณ์ที่แอปมาอยู่เบื้องหน้า
เมื่อแอปพลิเคชันทำงานอยู่ ให้เรียกใช้ showAdIfAvailable() เพื่อแสดงโฆษณาหากมี หรือโหลดโฆษณาใหม่
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];
}
จัดการการเรียกกลับของการแสดงผล
หากต้องการรับการแจ้งเตือนสำหรับเหตุการณ์การแสดงโฆษณา คุณต้องกำหนด GADFullScreenContentDelegate ให้กับพร็อพเพอร์ตี้ `fullScreenContentDelegate` ของโฆษณาที่แสดงผล
Swift
appOpenAd?.fullScreenContentDelegate = self
Objective-C
self.appOpenAd.fullScreenContentDelegate = self;
โดยเฉพาะอย่างยิ่ง คุณจะต้องส่งคำขอโฆษณาเปิดแอปรายการถัดไปเมื่อโฆษณาแรกแสดงจบแล้ว โค้ดต่อไปนี้แสดงวิธีติดตั้งใช้งานโปรโตคอลในไฟล์ AppOpenAdManager
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];
}
พิจารณาการหมดอายุของโฆษณา
หากต้องการให้แน่ใจว่าคุณจะไม่แสดงโฆษณาที่หมดอายุแล้ว คุณสามารถเพิ่มเมธอดลงใน App Delegate ที่ตรวจสอบเวลาที่ผ่านไปนับตั้งแต่โหลดข้อมูลอ้างอิงโฆษณา
ใน AppOpenAdManager ให้เพิ่มพร็อพเพอร์ตี้ Date ชื่อ loadTime และตั้งค่าพร็อพเพอร์ตี้เมื่อโหลดโฆษณา จากนั้นคุณสามารถเพิ่มเมธอดที่แสดงผล true หากเวลาผ่านไปไม่ถึงจำนวนชั่วโมงที่กำหนดนับตั้งแต่โหลดโฆษณา ตรวจสอบว่าข้อมูลอ้างอิงโฆษณายังคงมีผลอยู่ก่อนที่จะพยายามแสดงโฆษณา
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 self.appOpenAd && [self wasLoadTimeLessThanNHoursAgo:kTimeoutInterval];
}
Cold Start และหน้าจอโหลด
เอกสารนี้ถือว่าคุณจะแสดงโฆษณาเปิดแอปก็ต่อเมื่อผู้ใช้นำแอปของคุณมาไว้เบื้องหน้าขณะที่แอปถูกระงับในหน่วยความจำ "Cold Start" จะเกิดขึ้นเมื่อมีการเปิดแอปแต่แอปไม่ได้ถูกระงับในหน่วยความจำก่อนหน้านี้
ตัวอย่างของ Cold Start คือเมื่อผู้ใช้เปิดแอปเป็นครั้งแรก ในกรณีของ Cold Start คุณจะไม่มีโฆษณาเปิดแอปที่โหลดไว้ก่อนหน้านี้ซึ่งพร้อมแสดงทันที ความล่าช้าระหว่างเวลาที่คุณส่งคำขอโฆษณาและเวลาที่คุณได้รับโฆษณาคืนมาอาจทำให้เกิดสถานการณ์ที่ผู้ใช้สามารถใช้แอปของคุณได้ชั่วครู่ก่อนที่จะเห็นโฆษณาที่ไม่เกี่ยวข้อง คุณควรหลีกเลี่ยงสถานการณ์นี้เนื่องจากจะทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี
วิธีที่แนะนำในการใช้โฆษณาเปิดแอปในกรณีของ Cold Start คือการใช้หน้าจอโหลดเพื่อโหลดชิ้นงานของเกมหรือแอป และแสดงโฆษณาจากหน้าจอโหลดเท่านั้น หากแอปโหลดเสร็จแล้วและส่งผู้ใช้ไปยังเนื้อหาหลักของแอปแล้ว ก็ไม่ควรแสดงโฆษณา
แนวทางปฏิบัติแนะนำ
Google สร้างโฆษณาเปิดแอปขึ้นมาเพื่อช่วยให้คุณสร้างรายได้จากหน้าจอโหลดของแอป แต่คุณควรคำนึงถึงแนวทางปฏิบัติแนะนำเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานแอปที่ดี โดยคุณควรทำดังนี้
- รอแสดงโฆษณาเปิดแอปรายการแรกหลังจากที่ผู้ใช้ได้ใช้แอปของคุณไปแล้ว 2-3 ครั้ง
- แสดงโฆษณาเปิดแอปในช่วงเวลาที่ผู้ใช้ต้องรอให้แอปโหลด
- หากคุณมีหน้าจอโหลดอยู่ใต้โฆษณาเปิดแอป และหน้าจอโหลดโหลดเสร็จก่อนที่จะปิดโฆษณา คุณอาจต้องการปิดหน้าจอโหลดในเมธอด
adDidDismissFullScreenContent
ตัวอย่างที่สมบูรณ์ใน GitHub
ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้