Quảng cáo xen kẽ

Quảng cáo xen kẽ là quảng cáo toàn màn hình, che phủ giao diện của một ứng dụng cho đến khi người dùng đóng quảng cáo. Quảng cáo này thường xuất hiện ở các điểm chuyển tiếp tự nhiên trong quy trình hoạt động của ứng dụng, chẳng hạn như giữa các hoạt động hoặc trong thời gian tạm dừng giữa các cấp độ trong trò chơi. Khi một ứng dụng hiển thị quảng cáo xen kẽ, người dùng có thể chọn nhấn vào quảng cáo và tiếp tục chuyển đến trang đích của quảng cáo đó hoặc đóng quảng cáo và quay lại ứng dụng. Nghiên cứu điển hình.

Tài liệu hướng dẫn này trình bày cách tích hợp quảng cáo xen kẽ vào một ứng dụng iOS.

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

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 đang chạy trong thực tế. Nếu không làm như vậy, tài khoản của bạn có thể bị tạm ngưng.

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 quảng cáo xen kẽ trên iOS:
ca-app-pub-3940256099942544/4411468910

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ể sử dụng mã này trong ứng dụng của mình khi lập trình, chạy thử nghiệm và gỡ lỗi. 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 bài viết Quảng cáo thử nghiệm.

Triển khai

Các bước chính để tích hợp quảng cáo xen kẽ là:

  1. Tải một quảng cáo.
  2. Đăng ký các lệnh gọi lại.
  3. Hiển thị quảng cáo.

Tải quảng cáo

Bạn có thể tải một quảng cáo bằng cách sử dụng phương thức load(adUnitID:request) trên lớp GADInterstitialAd.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GADInterstitialAd.load(
          withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
  private var interstitialAd: GADInterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
      request:request
      completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

Đăng ký lệnh gọi lại

Để nhận thông báo cho các sự kiện trình bày, bạn phải triển khai giao thức GADFullScreenContentDelegate và chỉ định giao thức đó cho thuộc tính fullScreenContentDelegate của quảng cáo được trả về. Giao thức GADFullScreenContentDelegate xử lý các lệnh gọi lại khi quảng cáo hiển thị thành công hoặc không thành công và khi quảng cáo bị loại bỏ. Đoạn mã sau đây cho biết cách triển khai giao thức và chỉ định giao thức đó cho quảng cáo:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GADInterstitialAd.load(
          withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
        interstitial?.fullScreenContentDelegate = self
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

Chỉ định thuộc tính fullScreenContentDelegate cho quảng cáo được trả về:

interstitialAd?.fullScreenContentDelegate = self

Triển khai giao thức:

func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: GADFullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
      request:request
      completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

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

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

GADInterstitialAd là đối tượng dùng một lần. Điều này có nghĩa là sau khi một quảng cáo xen kẽ xuất hiện, quảng cáo đó không thể xuất hiện lại. Bạn nên tải một quảng cáo xen kẽ khác trong phương thức adDidDismissFullScreenContent: trên GADFullScreenContentDelegate để quảng cáo xen kẽ tiếp theo bắt đầu tải ngay khi quảng cáo trước đó bị đóng.

Hiển thị quảng cáo

Quảng cáo xen kẽ nên xuất hiện tại các điểm tạm dừng tự nhiên trong quy trình hoạt động của ứng dụng. Bạn nên thiết lập để quảng cáo xuất hiện xen kẽ giữa các cấp độ của trò chơi hoặc sau khi người dùng hoàn thành một nhiệm vụ.

Swift

guard let interstitial = interstitial else {
  return print("Ad wasn't ready.")
}

// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)

SwiftUI

Theo dõi các sự kiện trên giao diện người dùng trong thành phần hiển thị để xác định thời điểm hiển thị quảng cáo.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

Trình bày quảng cáo xen kẽ từ mô hình xem:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(fromRootViewController: nil)
}

Objective-C

if (self.interstitial) {
  // The UIViewController parameter is nullable.
  [self.interstitial presentFromRootViewController:nil];
} else {
  NSLog(@"Ad wasn't ready");
}

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

Cân nhắc xem quảng cáo xen kẽ có phải là loại quảng cáo phù hợp với ứng dụng của bạn hay không.
Quảng cáo xen kẽ hoạt động hiệu quả nhất trong những ứng dụng có các điểm chuyển tiếp tự nhiên. Hãy tạo ra một điểm chuyển tiếp khi kết thúc một thao tác trong ứng dụng, chẳng hạn như thao tác chia sẻ một hình ảnh hoặc hoàn tất một cấp độ trong trò chơi. Vì người dùng sẽ có một khoảng nghỉ tạm thời, nên bạn có thể hiển thị một quảng cáo xen kẽ mà không làm gián đoạn trải nghiệm của họ. Hãy nhớ cân nhắc thời điểm mà bạn muốn hiển thị quảng cáo xen kẽ trong quy trình hoạt động của ứng dụng và khả năng phản hồi của người dùng.
Nhớ tạm dừng hành động trong trò chơi/ứng dụng khi hiển thị quảng cáo xen kẽ.
Có nhiều loại quảng cáo xen kẽ: văn bản, hình ảnh, video và các loại khác. Bạn phải đảm bảo rằng khi ứng dụng của bạn hiển thị quảng cáo xen kẽ, ứng dụng đó cũng sẽ tạm ngừng sử dụng một số tài nguyên để cho phép quảng cáo tận dụng các tài nguyên đó. Ví dụ: khi bạn thực hiện lệnh gọi để hiển thị một quảng cáo xen kẽ, hãy nhớ tạm dừng phát mọi âm thanh trên ứng dụng của mình. Bạn có thể tiếp tục phát âm thanh trong trình xử lý sự kiện adDidDismissFullScreenContent:. Trình xử lý này sẽ được gọi khi người dùng hoàn tất lượt tương tác với quảng cáo. Ngoài ra, hãy cân nhắc việc tạm dừng mọi công việc tính toán cường độ cao (chẳng hạn như vòng lặp trò chơi) trong khi hiển thị quảng cáo. Việc này sẽ giúp người dùng không thấy hình ảnh chậm hiển thị hoặc không phản hồi hay video bị giật.
Cho phép đủ thời gian tải.
Bạn phải đảm bảo hiển thị quảng cáo xen kẽ tại thời điểm phù hợp, nhưng cũng phải đảm bảo rằng người dùng không phải đợi quảng cáo tải. Việc tải quảng cáo trước thời điểm bạn dự định hiển thị quảng cáo có thể đảm bảo rằng ứng dụng của bạn có quảng cáo xen kẽ đã tải đầy đủ và sẵn sàng hiển thị tại thời điểm thích hợp.
Đừng hiển thị quá nhiều quảng cáo cho người dùng.
Mặc dù việc tăng tần suất hiển thị quảng cáo xen kẽ trong ứng dụng có thể là một cách hay để tăng doanh thu, nhưng việc đó cũng có thể làm suy giảm trải nghiệm người dùng và làm giảm tỷ lệ nhấp. Hãy đảm bảo rằng người dùng không bị gián đoạn thường xuyên đến mức họ không còn hứng thú khi sử dụng ứng dụng của bạn nữa.
Không sử dụng lệnh gọi lại tải hoàn tất để hiển thị quảng cáo xen kẽ.
Việc này có thể dẫn đến trải nghiệm người dùng kém. Thay vào đó, hãy tải trước quảng cáo rồi mới hiển thị quảng cáo đó. Sau đó, bạn hãy kiểm tra phương thức canPresentFromRootViewController:error: trên GADInterstitialAd để tìm hiểu xem quảng cáo đã sẵn sàng hiển thị hay chưa.

Tài nguyên khác

Ví dụ trên GitHub

Xem ví dụ đầy đủ về quảng cáo xen kẽ bằng ngôn ngữ bạn muốn:

Video hướng dẫn về Trung tâm quảng cáo trên thiết bị di động

Câu chuyện thành công

Các bước tiếp theo