Quảng cáo khi mở ứng dụng

Tài liệu hướng dẫn này dành cho các nhà xuất bản muố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 từ 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ể hiển thị 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 tin thương hiệu để người dùng biết họ đang mở ứng dụng của bạn. Dưới đây là một ví dụ về giao diện của quảng cáo khi mở ứng dụng:

Cụ thể hơn, dưới đây là các bước bắt buộc để triển khai quảng cáo khi mở ứng dụng:

  1. Thêm các phương thức vào AppDelegate của bạn để tải và hiển thị một GADAppOpenAd.
  2. Phát hiện các sự kiện đưa ứng dụng lên nền trước
  3. Xử lý lệnh gọi lại trong bản trình bày.

Điều kiện tiên quyết

Luôn kiểm tra bằng quảng cáo thử nghiệm

Khi tạo và thử nghiệm ứng dụng, hãy đảm bảo rằng bạn sử dụng quảng cáo thử nghiệm thay vì quảng cáo đang chạy thực tế. Chúng tôi sẽ tạm ngưng tài khoản của bạn nếu bạn không tuân thủ yêu cầu này.

Cách dễ nhất để tải quảng cáo thử nghiệm là dùng mã đơn vị quảng cáo thử nghiệm chúng tôi dành riêng cho quảng cáo khi mở ứng dụng:

ca-app-pub-3940256099942544/5662855259

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 có thể thoải mái dùng mã này trong khi viết mã, thử nghiệm và gỡ lỗi cho ứng dụng của mình. Bạn chỉ cần nhớ thay thế mã này bằng mã đơn vị quảng cáo của 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 Quảng cáo thử nghiệm.

Sửa đổi đại biểu ứng dụng của bạn

Quảng cáo khi mở ứng dụng hiển thị khi ứng dụng của bạn khởi chạy hoặc khi người dùng đưa ứng dụng của bạn lên nền trước. Để đảm bảo bạn có quảng cáo sẵn sàng hiển thị khi người dùng mở ứng dụng của bạn, bạn cần có tệp tham chiếu đến một quảng cáo sẵn sàng sử dụng.

Điều đó có nghĩa là bạn phải tải trước GADAppOpenAd trước khi cần hiển thị quảng cáo. Bằng cách đó, quảng cáo khi mở ứng dụng của bạn sẵn sàng hiển thị vào lần tiếp theo khi ứng dụng được mở. Để có một tệp tham chiếu duy nhất đến quảng cáo, hãy thêm thuộc tính và phương thức sau vào AppDelegate.h của bạn:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(nonatomic) GADAppOpenAd* appOpenAd;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

Lưu ý rằng bạn nên đưa ra yêu cầu và các phương pháp trình bày bên ngoài lớp AppDelegate để bạn có thể gọi các yêu cầu đó từ UISceneDelegate cho các thiết bị chạy iOS 13 trở lên. Điều này sẽ được mô tả chi tiết hơn ở phần sau.

Trong AppDelegate.m, hãy thêm phương thức requestAppOpenAd:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
               }];
}

Phương thức này sẽ yêu cầu tải một GADAppOpenAd mới. Nếu thành công, phương thức này sẽ đặt thuộc tính trên AppDelegate để quảng cáo sẵn sàng sử dụng khi người dùng đưa ứng dụng lên nền trước.

Bạn phải đặt hướng thiết bị. Nếu bạn đặt hướng UIInterfaceOrientationUnknown, thì GADAppOpenAd sẽ giả định hướng dọc. Nếu bạn muốn thiết kế bố cục ngang, hãy nhớ nêu rõ rằng bạn yêu cầu hướng ngang bằng cách chuyển UIInterfaceOrientationLandscapeLeft hoặc UIInterfaceOrientationLandscapeRight vào phương thức yêu cầu.

Tiếp theo, hãy thêm phương thức để hiển thị quảng cáo từ AppDelegate.

- (void)tryToPresentAd {
  GADAppOpenAd *ad = self.appOpenAd;
  self.appOpenAd = nil;

  if (ad) {
    UIViewController *rootController = self.window.rootViewController;
    [ad presentFromRootViewController:rootController];

  } else {
    // If you don't have an ad ready, request one.
    [self requestAppOpenAd];
  }
}

Phương thức này kiểm tra sự hiện diện của quảng cáo. Nếu quảng cáo có sẵn và có thể hiển thị từ bộ điều khiển chế độ xem gốc, thì phương thức này sẽ hiển thị quảng cáo trên nội dung hiện tại của bạn. Nếu không có sẵn quảng cáo, phương thức này sẽ đưa ra yêu cầu mới.

Phát hiện các sự kiện trong nền trước của ứng dụng

Khi người dùng đăng nhập vào ứng dụng của bạn lần đầu tiên, rất ít khả năng bạn sẽ có sẵn tệp tham chiếu quảng cáo để sử dụng. Thay vào đó, bạn nên dựa vào phương thức tryToPresentAd đã xác định ở trên, phương thức này sẽ hiển thị quảng cáo nếu quảng cáo có sẵn hoặc yêu cầu một quảng cáo mới. Phương thức này sẽ được gọi mỗi khi ứng dụng của bạn xuất hiện trong nền trước. Bạn có thể thực hiện việc này bằng cách ghi đè phương thức applicationDidBecomeActive: trong AppDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [self tryToPresentAd];
}

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ý các sự kiện bản trình bày nhất định. Đặc biệt, bạn sẽ muốn yêu cầu quảng cáo khi mở ứng dụng tiếp theo khi quảng cáo đầu tiên hiển thị xong.

Thực hiện các thay đổi sau đối với tệp AppDelegate.h của bạn:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate
    : UIResponder <UIApplicationDelegate, GADFullScreenContentDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(nonatomic) GADAppOpenAd* appOpenAd;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

Sau đó, trong tệp AppDelegate.m, hãy thêm các dòng sau:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
                 self.appOpenAd.fullScreenContentDelegate = self;
               }];
}

#pragma mark - GADFullScreenContentDelegate

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
  NSLog(@"didFailToPresentFullSCreenCContentWithError");
  [self requestAppOpenAd];

}

/// Tells the delegate that the ad presented full screen content.
- (void)adDidPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adDidPresentFullScreenContent");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"adDidDismissFullScreenContent");
  [self requestAppOpenAd];
}
...

Các lệnh gọi lại này xử lý các sự kiện khác nhau trong vòng đời của Quảng cáo khi mở ứng dụng.

Xem xét thời hạn quảng cáo

Để đảm bảo bạn 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 cho đại biểu ứng dụng sẽ kiểm tra thời gian đã trôi qua kể từ khi tải tệp tham chiếu quảng cáo của bạn.

Trong AppDelegate.h, hãy thêm thuộc tính NSDate:

#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property(strong, nonatomic) UIWindow* window;
@property(nonatomic) GADAppOpenAd* appOpenAd;
@property(weak, nonatomic) NSDate *loadTime;

- (void)requestAppOpenAd;
- (void)tryToPresentAd;

@end

Sau đó, bạn có thể thêm phương thức trả về true nếu đã trôi qua ít hơn lượng giờ nhất định kể từ khi quảng cáo của bạn tải.

Trong AppDelegate.m, hãy thêm phương thức sau:

- (BOOL)wasLoadTimeLessThanNHoursAgo:(int)n {
  NSDate *now = [NSDate date];
  NSTimeInterval timeIntervalBetweenNowAndLoadTime = [now timeIntervalSinceDate:self.loadTime];
  double secondsPerHour = 3600.0;
  double intervalInHours = timeIntervalBetweenNowAndLoadTime / secondsPerHour;
  return intervalInHours < n;
}

Bước tiếp theo là đặt thuộc tính loadTime khi quảng cáo của bạn tải:

- (void)requestAppOpenAd {
  self.appOpenAd = nil;
  [GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5662855259"
                         request:[GADRequest request]
                     orientation:UIInterfaceOrientationPortrait
               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
                 if (error) {
                   NSLog(@"Failed to load app open ad: %@", error);
                   return;
                 }
                 self.appOpenAd = appOpenAd;
                 self.appOpenAd.fullScreenContentDelegate = self;
                 self.loadTime = [NSDate date];
               }];
}

Cuối cùng, hãy đảm bảo rằng bạn đã kiểm tra tính hợp lệ của tệp tham chiếu quảng cáo trước khi cố gắng hiển thị quảng cáo:

- (void)tryToPresentAd {
  GADAppOpenAd *ad = self.appOpenAd;
  self.appOpenAd = nil;
  if (ad && [self wasLoadTimeLessThanNHoursAgo:4]) {
    UIViewController *rootController = self.window.rootViewController;
    [ad presentFromRootViewController:rootController];

  } else {
    // If you don't have an ad ready, request one.
    [self requestAppOpenAd];
  }
}

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 tại thời điểm người dùng đưa ứng dụng của bạn lên nền trước khi ứng dụng đang tạm ngưng trong bộ nhớ. "Khởi động nguội" xảy ra khi người dùng chạy ứng dụng của bạn, nhưng ứng dụng chưa từ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 của bạn lần đầu tiên. Trong trường hợp khởi động nguội, quảng cáo khi mở ứng dụng chưa được tải trước lần nào nên chưa sẵn sàng để hiển thị ngay lập tức. Một tình huống có thể xảy ra trong khoảng thời gian từ khi bạn yêu cầu quảng cáo cho đến khi nhận được quảng cáo (gọi là độ trễ), đó là người dùng vừa mới sử dụng ứng dụng của bạn trong chốc lát thì một quảng cáo không phù hợp đột ngột xuất hiện khiến họ bị bất ngờ. Bạn nên tránh làm như vậy vì điều này sẽ tạo ra trải nghiệm kém cho người dùng.

Nếu dùng quảng cáo khi mở ứng dụng vào lúc khởi động nguội, thì bạn nên dùng màn hình tải để tải các tài sản của trò chơi hoặc ứng dụng đó. Đồng thời, bạn chỉ nên hiển thị quảng cáo từ màn hình tải. Bạn đừng hiển thị quảng cáo nếu ứng dụng đã tải xong và đã đưa người dùng đến nội dung chính của ứng dụng.

Các phương pháp hay nhất

Google đã tạo ra 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 điều quan trọng là bạn phải ghi nhớ các phương pháp hay nhất để người dùng thích sử dụng ứng dụng của bạn. Hãy nhớ:

  • Chờ người dùng sử dụng ứng dụng của bạn vài lần rồi mới hiển thị lần đầu tiên quảng cáo khi mở ứng dụng của bạn.
  • Hiển thị quảng cáo khi mở ứng dụng trong thời gian người dùng chờ ứng dụng của bạn tải.
  • 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, thì bạn có thể đóng màn hình tải theo phương thức adDidDismissFullScreenContent.