Hướng dẫn này dành cho các nhà xuất bản tích hợp quảng cáo khi mở ứng dụng.
Quảng cáo khi mở ứng dụng là một định dạng quảng cáo đặc biệt dành cho những nhà xuất bản muốn kiếm tiền màn hình tải ứng dụng của họ. Người dùng có thể đóng quảng cáo khi mở ứng dụng bất cứ lúc nào. Quảng cáo khi mở ứng dụng có thể xuất hiện khi người dùng chạy ứng dụng của bạn trên nền trước.
Quảng cáo khi mở ứng dụng tự động hiển thị một vùng nhỏ chứa thương hiệu để người dùng biết rằng họ đang ở ứng dụng của bạn. Sau đây là ví dụ về hình thức của quảng cáo khi mở ứng dụng:
Nhìn chung, bạn cần thực hiện các bước sau đây để triển khai quảng cáo khi mở ứng dụng:
- Tạo một lớp người quản lý sẽ tải quảng cáo trước khi bạn cần hiển thị quảng cáo đó.
- Hiện quảng cáo trong các sự kiện đưa ứng dụng lên nền trước.
- Xử lý lệnh gọi lại trong bản trình bày.
Điều kiện tiên quyết
- Hãy làm theo hướng dẫn thiết lập trong bài viết Bắt đầu sử dụng hướng dẫn.
- Tìm hiểu cách định cấu hình thiết bị của bạn làm kiểm thử thiết bị.
Luôn thử nghiệm bằng quảng cáo thử nghiệm
Khi tạo và thử nghiệm ứng dụng, hãy nhớ sử dụng quảng cáo thử nghiệm thay vì quảng cáo thực tế. Chúng tôi có thể tạm ngưng tài khoản của bạn nếu bạn không làm như vậy.
Cách dễ nhất để tải quảng cáo thử nghiệm là sử dụng mã đơn vị quảng cáo thử nghiệm dành riêng cho ứng dụng quảng cáo mở:
ca-app-pub-3940256099942544/5575463023
Mã này được định cấu hình đặc biệt để trả về quảng cáo thử nghiệm cho mọi yêu cầu và bạn sử dụng miễn phí mã này trong ứng dụng của riêng bạn khi lập trình, thử nghiệm và gỡ lỗi. Chỉ cần tạo bạn nhớ thay thế mã này bằng mã đơn vị quảng cáo của riêng mình trước khi xuất bản ứng dụng.
Để biết thêm thông tin về cách hoạt động của quảng cáo thử nghiệm của SDK quảng cáo trên thiết bị di động, hãy xem bài viết Thử nghiệm Google Ads.
Triển khai lớp trình quản lý
Quảng cáo của bạn phải nhanh chóng hiển thị, vì vậy, tốt nhất bạn nên tải quảng cáo trước khi cần hiển thị màn hình. Bằng cách đó, bạn sẽ có quảng cáo sẵn sàng chạy ngay khi người dùng nhập ứng dụng của bạn. Triển khai một lớp người quản lý để thực hiện các yêu cầu quảng cáo trước khi bạn cần hiện quảng cáo.
Tạo một lớp singleton mới có tên là AppOpenAdManager
rồi điền vào lớp đó dưới dạng
sau:
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
Tải một quảng cáo
Bước tiếp theo là điền vào phương thức 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: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
} 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:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest 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;
}];
}
Hiển thị quảng cáo
Bước tiếp theo là điền vào phương thức showAdIfAvailable()
. Nếu không có quảng cáo nào
phương thức này cố gắng tải một quảng cáo.
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];
}
Hiển thị quảng cáo trong các sự kiện đưa ứng dụng lên nền trước
Khi ứng dụng được kích hoạt, hãy gọi showAdIfAvailable()
để hiển thị quảng cáo nếu
có sẵn một tệp mới hoặc tải một tệp mới.
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
Xử lý lệnh gọi lại trong bản trình bày
Khi ứng dụng của bạn hiển thị quảng cáo khi mở ứng dụng, bạn nên dựa vào
GADFullScreenContentDelegate
để xử lý một số sự kiện trình bày nhất định. Ngang bằng
cụ thể, bạn sẽ muốn yêu cầu quảng cáo khi mở ứng dụng tiếp theo sau quảng cáo đầu tiên
kết thúc trình bày.
Trong lớp AppOpenAdManager
, hãy thêm nội dung sau:
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: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
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:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest 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
Xem xét thời hạn của quảng cáo
Để đảm bảo không hiển thị quảng cáo đã hết hạn, bạn có thể thêm một phương thức vào ứng dụng ủy quyền để kiểm tra thời gian đã trôi qua kể từ khi tệp tham chiếu quảng cáo của bạn được tải.
Trong AppOpenAdManager
, hãy thêm một thuộc tính Date
có tên là loadTime
rồi đặt giá trị cho thuộc tính này
khi quảng cáo của bạn tải. Sau đó, bạn có thể thêm một phương thức trả về true
nếu
chưa đầy một số giờ nhất định đã trôi qua kể từ khi quảng cáo của bạn được tải. Đảm bảo
bạn kiểm tra tính hợp lệ của tham chiếu quảng cáo trước khi cố gắng hiển thị quảng cáo.
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: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
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:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest 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
Khởi động nguội và màn hình tải
Tài liệu này giả định rằng bạn chỉ hiển thị quảng cáo khi mở ứng dụng khi người dùng chạy ứng dụng trên nền trước khi ứng dụng bị tạm ngưng trong bộ nhớ. "Khởi động nguội" xảy ra khi ứng dụng của bạn đã được khởi chạy nhưng trước đó không bị tạm ngưng trong bộ nhớ.
Một ví dụ về khởi động nguội là khi người dùng mở ứng dụng lần đầu tiên. Trong trường hợp khởi động nguội, bạn sẽ không có quảng cáo khi mở ứng dụng đã tải trước đó sẵn sàng được hiển thị ngay lập tức. Độ trễ giữa thời điểm bạn yêu cầu quảng cáo và nhận được quảng cáo có thể tạo ra một tình huống trong đó người dùng có thể sử dụng ngay ứng dụng của bạn trước khi bị bất ngờ bởi quảng cáo không phù hợp. Bạn nên tránh điều này vì đây là trải nghiệm người dùng kém.
Cách ưu tiên để sử dụng quảng cáo khi mở ứng dụng khi khởi động nguội là dùng màn hình tải để tải nội dung trò chơi hoặc ứng dụng của bạn và chỉ hiển thị quảng cáo khi tải màn hình. Nếu ứng dụng của bạn đã tải xong và đã đưa người dùng đến nội dung của ứng dụng thì đừng hiển thị quảng cáo.
Các phương pháp hay nhất
Google tạo quảng cáo khi mở ứng dụng để giúp bạn kiếm tiền từ màn hình tải của ứng dụng, nhưng bạn nên áp dụng các phương pháp hay nhất để người dùng hài lòng khi sử dụng ứng dụng của bạn. Hãy nhớ:
- Chờ người dùng sử dụng quảng cáo khi mở ứng dụng đầu tiên mới xuất hiện ứng dụng của bạn một vài lần.
- Hiển thị quảng cáo khi mở ứng dụng vào những thời điểm người dùng sẽ chờ để tải ứng dụng.
- Nếu bạn có màn hình tải trong quảng cáo khi mở ứng dụng và màn hình tải
tải xong trước khi quảng cáo bị đóng, bạn nên đóng
màn hình tải trong phương thức
adDidDismissFullScreenContent
.
Ví dụ đầy đủ trên GitHub
Các bước tiếp theo
Tìm hiểu thêm về quyền riêng tư của người dùng.