Quảng cáo gốc nâng cao (Hợp nhất)

Quảng cáo gốc là các nội dung quảng cáo hiển thị cho người dùng thông qua các thành phần giao diện người dùng vốn có của nền tảng. Các quảng cáo này hiển thị bằng cách sử dụng chính các lớp mà bạn đã dùng trong bảng thiết kế (storyboard) và có thể được định dạng để phù hợp với thiết kế trực quan của ứng dụng. Khi một quảng cáo tải, ứng dụng của bạn sẽ nhận được một đối tượng quảng cáo chứa các nội dung của quảng cáo đó và ứng dụng (thay vì SDK) sẽ chịu trách nhiệm hiển thị các nội dung đó.

Hướng dẫn này sẽ chỉ cho bạn biết cách sử dụng SDK quảng cáo trên thiết bị di động của Google để triển khai quảng cáo gốc trong một ứng dụng iOS, cũng như một số điều quan trọng cần lưu ý trong quá trình thực hiện.

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

Để xem nội dung bài viết hướng dẫn này, bạn cần có một số kiến thức về cách SDK quảng cáo trên thiết bị di động của Google hoạt động. Do đó, nếu bạn chưa biết, hãy cân nhắc xem qua bài viết Hướng dẫn bắt đầu.

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

Trước khi bắt đầu, hãy nhớ rằng khi tạo và thử nghiệm các ứng dụng, bạn nên sử dụng quảng cáo thử nghiệm thay vì quảng cáo thực tế. Lý do là vì nếu sử dụng quảng cáo thực tế, 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 ID đơn vị quảng cáo thử nghiệm chuyên biệt cho tất cả quảng cáo gốc nâng cao trên iOS:

ca-app-pub-3940256099942544/3986624511

ID 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 sử dụng ID này trong ứng dụng của mình khi viết mã, thử nghiệm và gỡ lỗi. Bạn chỉ cần thay thế ID này bằng ID đơ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 quảng cáo thử nghiệm của SDK quảng cáo trên thiết bị di động hoạt động, hãy xem Quảng cáo thử nghiệm.

Tải quảng cáo

Có hai định dạng do hệ thống xác định đối với quảng cáo gốc: định dạng nội dung và định dạng lượt cài đặt ứng dụng.

Cả hai loại quảng cáo này đều do một lớp biểu thị: GADUnifiedNativeAd. Một bản sao của lớp này chứa nội dung cho quảng cáo gốc. Lưu ý rằng tùy thuộc vào loại quảng cáo do GADUnifiedNativeAd biểu thị, một số trường sẽ không được điền (nghĩa là trường đó sẽ có giá trị là nil).

Quảng cáo gốc được tải thông qua đối tượng GADAdLoader sẽ gửi thông báo tới các đại biểu theo giao thức GADAdLoaderDelegate.

Khởi chạy trình tải quảng cáo

Trước khi tải quảng cáo, bạn phải khởi chạy trình tải quảng cáo. Mã sau đây minh họa cách khởi chạy GADAdLoader:

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeUnifiedNative ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

Bạn cần có một ID đơn vị quảng cáo (có thể dùng ID thử nghiệm), các hằng số để chuyển vào mảng adTypes nhằm chỉ định các định dạng gốc mà bạn muốn yêu cầu và bất kỳ tùy chọn nào mà bạn muốn đặt trong thông số options. Bạn có thể tham khảo danh sách các giá trị có thể sử dụng cho thông số options trong phần Cài đặt tùy chọn quảng cáo gốc.

Mảng adTypes phải chứa hằng số sau:

Triển khai đại biểu của trình tải quảng cáo

Đại biểu của trình tải quảng cáo cần triển khai các giao thức dành riêng cho loại quảng cáo của bạn. Đối với quảng cáo gốc unified:

  • GADUnifiedNativeAdLoaderDelegate Giao thức này bao gồm một thông báo được gửi tới đại biểu khi quảng cáo gốc hợp nhất đã tải xong:

    Swift

    public func adLoader(_ adLoader: GADAdLoader,
        didReceive nativeAd: GADUnifiedNativeAd)
    

    Objective-C

    - (void)adLoader:(GADAdLoader *)adLoader
        didReceiveNativeAd:(GADUnifiedNativeAd *)nativeAd;
    

Yêu cầu quảng cáo

Sau khi khởi chạy GADAdLoader, hãy gọi phương thức loadRequest: để yêu cầu quảng cáo:

Swift

adLoader.load(GADRequest())

Objective-C

[self.adLoader loadRequest:[GADRequest request]];

Phương thức loadRequest: trong GADAdLoader chấp nhận các đối tượng GADRequest tương tự như biểu ngữ và quảng cáo xen kẽ. Bạn có thể sử dụng các đối tượng yêu cầu để thêm thông tin nhắm mục tiêu, giống như cách bạn thực hiện với các loại quảng cáo khác.

Thời điểm yêu cầu quảng cáo

Các ứng dụng hiển thị quảng cáo gốc có thể yêu cầu quảng cáo trước khi quảng cáo thực sự hiển thị. Trong nhiều trường hợp, đây là phương pháp đề xuất. Ví dụ: một ứng dụng hiển thị danh sách các mục kết hợp quảng cáo gốc có thể tải quảng cáo gốc cho toàn bộ danh sách, biết rằng một số quảng cáo chỉ hiển thị sau khi người dùng cuộn chế độ xem và một số quảng cáo hoàn toàn không hiển thị.

Mặc dù việc tìm nạp trước quảng cáo là một kỹ thuật hay, nhưng điều quan trọng là nhà xuất bản không được giữ mãi những quảng cáo cũ mà không hiển thị. Bất kỳ đối tượng quảng cáo gốc nào bị giữ quá 1 giờ mà không hiển thị đều sẽ bị hủy và được thay thế bằng quảng cáo mới từ một yêu cầu mới.

Xác định khi quá trình tải hoàn tất

Sau khi gọi loadRequest:, một ứng dụng có thể nhận được kết quả của yêu cầu đó thông qua các lệnh gọi tới:

Yêu cầu cho một quảng cáo sẽ dẫn đến một lệnh gọi đến một trong những phương thức đó.

Yêu cầu cho nhiều quảng cáo sẽ dẫn đến ít nhất một lệnh gọi ngược đến các phương thức trên, nhưng không nhiều hơn số lượng quảng cáo tối đa đã yêu cầu.

Ngoài ra, GADAdLoaderDelegate cũng đưa ra lệnh gọi ngược adLoaderDidFinishLoading. Phương thức đại biểu này cho biết rằng một trình tải quảng cáo đã hoàn tất quá trình tải quảng cáo và không có lỗi hoặc quảng cáo nào khác được báo cáo cho yêu cầu. Dưới đây là ví dụ về cách sử dụng phương thức này khi tải nhiều quảng cáo gốc cùng một lúc:

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdsOptions.numberOfAds = 5

    adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self,
        adTypes: [GADAdLoaderAdType.unifiedNative],
        options: [multipleAdsOptions])
    adLoader.delegate = self
    adLoader.load(GADRequest())
  }
 
  func adLoader(_ adLoader: GADAdLoader,
                didReceive nativeAd: GADUnifiedNativeAd) {
    // A unified native ad has loaded, and can be displayed.
  }
 
  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
      // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Objective-C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;

  self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
          rootViewController:self
                     adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

 
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified native ad has loaded, and can be displayed.
}
 
- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

Xử lý các yêu cầu không thành công

Các giao thức trên mở rộng giao thức GADAdLoaderDelegate, để xác định một thông báo được gửi khi quảng cáo tải không thành công. Bạn có thể sử dụng đối tượng GADRequestError để xác định nguyên nhân lỗi.

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: GADRequestError)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(GADRequestError *)error;

Nhận thông báo về các sự kiện quảng cáo gốc

Để được thông báo về những sự kiện có liên quan đến các lượt tương tác với quảng cáo gốc, hãy đặt thuộc tính đại biểu của quảng cáo gốc:

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

Sau đó, triển khai GADUnifiedNativeAdDelegate để nhận các lệnh gọi đại biểu sau:

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Objective-C

- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Tùy chọn quảng cáo gốc

Thông số cuối cùng đã bao gồm trong quá trình tạo GADAdLoader ở trên là một mảng các đối tượng tùy chọn.

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];

Mảng tùy chọn này chứa một hoặc nhiều bản sao của một lớp con GADAdLoaderOptions (GADNativeAdImageAdLoaderOptions), là các đối tượng mà một ứng dụng có thể dùng để cho biết các tùy chọn về cách tải và hoạt động của quảng cáo gốc.

GADNativeAdImageAdLoaderOptions chứa các thuộc tính liên quan đến hình ảnh trong Quảng cáo gốc nâng cao. Ứng dụng có thể kiểm soát cách GADAdLoader xử lý nội dung hình ảnh của Quảng cáo gốc nâng cao bằng cách tạo đối tượng GADNativeAdImageAdLoaderOptions, thiết lập thuộc tính của đối tượng đó (disableImageLoading, preferredImageOrientationshouldRequestMultipleImages) và chuyển đối tượng đó vào trong khi khởi chạy.

GADNativeAdImageAdLoaderOptions có các thuộc tính sau:

disableImageLoading
Nội dung hình ảnh dành cho quảng cáo gốc được trả về thông qua các bản sao của GADNativeAdImage, chứa thuộc tính imageimageURL. Nếu disableImageLoading được đặt thành false (đây là giá trị mặc định và giá trị này là NO trong Objective-C), SDK sẽ tự động tìm nạp nội dung hình ảnh, cũng như điền cả thuộc tính imageimageURL cho bạn. Nếu được đặt thành true (hoặc YES trong Objective-C), SDK sẽ chỉ điền imageURL, cho phép bạn tải các hình ảnh thực xuống nếu muốn.
preferredImageOrientation

Một số quảng cáo có sẵn nhiều hình ảnh để khớp với các hướng khác nhau của thiết bị. Các ứng dụng có thể yêu cầu hình ảnh cho một hướng cụ thể bằng cách đặt thuộc tính này thành một trong các hằng số quy định hướng:

  • GADNativeAdImageAdLoaderOptionsOrientationAny
  • GADNativeAdImageAdLoaderOptionsOrientationLandscape
  • GADNativeAdImageAdLoaderOptionsOrientationPortrait

    Nếu bạn sử dụng preferredImageOrientation để chỉ định một tùy chọn cho hướng hình ảnh ngang hoặc dọc thì SDK sẽ đặt các hình ảnh phù hợp với hướng đó ở đầu trong mảng nội dung hình ảnh và đặt các hình ảnh không phù hợp tiếp theo sau. Vì một số quảng cáo chỉ có một hướng duy nhất, nên nhà xuất bản cần đảm bảo rằng các ứng dụng có thể xử lý được cả hình ảnh ngang và hình ảnh dọc.

    Nếu phương thức này không được gọi, hệ thống sẽ sử dụng giá trị mặc định của GADNativeAdImageAdLoaderOptionsOrientationAny.

shouldRequestMultipleImages

Một số nội dung hình ảnh chứa loạt hình ảnh thay vì chỉ một hình ảnh. Khi đặt giá trị này thành true, ứng dụng của bạn cho biết rằng ứng dụng đã sẵn sàng để hiển thị tất cả hình ảnh cho mọi nội dung có nhiều hình ảnh. Khi đặt giá trị này thành false (mặc định), ứng dụng của bạn chỉ thị cho SDK chỉ cung cấp hình ảnh đầu tiên cho mọi nội dung có chứa loạt hình ảnh.

Nếu không có đối tượng GADAdLoaderOptions nào được chuyển vào khi khởi chạy một GADAdLoader, hệ thống sẽ sử dụng giá trị mặc định cho mỗi tùy chọn.

GADNativeAdViewOptions

Đối tượng GADNativeAdViewAdOptions được sử dụng để cho biết các tùy chọn về cách chế độ xem quảng cáo gốc sẽ biểu thị quảng cáo. Các đối tượng này có một thuộc tính duy nhất: preferredAdChoicesPosition, mà bạn có thể sử dụng để chỉ định vị trí đặt biểu tượng Lựa chọn quảng cáo. Biểu tượng này có thể xuất hiện ở bất kỳ góc nào của quảng cáo và mặc định là GADAdChoicesPositionTopRightCorner. Thuộc tính này có thể có các giá trị sau:

  • GADAdChoicesPositionTopRightCorner
  • GADAdChoicesPositionTopLeftCorner
  • GADAdChoicesPositionBottomRightCorner
  • GADAdChoicesPositionBottomLeftCorner

Dưới đây là ví dụ cho thấy cách đặt biểu tượng Lựa chọn quảng cáo ở góc trên cùng bên trái của quảng cáo:

Swift

let adViewOptions = GADNativeAdViewAdOptions()
adViewOptions.preferredAdChoicesPosition = .topLeftCorner
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])

Objective-C

GADNativeAdViewAdOptions *adViewOptions = [[GADNativeAdViewAdOptions alloc] init];
adViewOptions.preferredAdChoicesPosition = GADAdChoicesPositionTopLeftCorner;
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:self
               adTypes:@[ ... ad type constants ...  ]
               options:@[ ... ad loader options objects ... ]];

GADVideoOptions

Các đối tượng GADVideoOptions được dùng để cho biết cách hiển thị của các nội dung của video gốc. Các đối tượng này cung cấp một thuộc tính duy nhất: startMuted.

Boolean này cho biết liệu nội dung video có nên bắt đầu phát lại ở trạng thái tắt tiếng hay không. Giá trị mặc định là true.

GADMultipleAdsAdLoaderOptions

Các đối tượng GADMultipleAdsAdLoaderOptions cho phép nhà xuất bản ra chỉ thị cho trình tải quảng cáo tải nhiều quảng cáo trong một yêu cầu. Các quảng cáo đã tải theo cách này sẽ được đảm bảo không bị trùng lặp. GADMultipleAdsAdLoaderOptions có một thuộc tính duy nhất, numberOfAds, biểu thị số lượng quảng cáo mà trình tải quảng cáo nên cố gắng trả về cho yêu cầu. Theo mặc định, giá trị này là 1 và giới hạn tối đa là 5 quảng cáo (ngay cả khi một ứng dụng yêu cầu nhiều quảng cáo, thì cũng chỉ có tối đa 5 quảng cáo được trả về). Số lượng quảng cáo thực tế được trả về sẽ không được đảm bảo, nhưng sẽ nằm trong khoảng từ 0 đến numberOfAds.

Hiển thị định dạng quảng cáo gốc do hệ thống xác định

Khi một quảng cáo gốc tải, ứng dụng của bạn sẽ nhận được một đối tượng quảng cáo gốc thông qua một trong các thông báo giao thức GADAdLoaderDelegate. Sau đó, ứng dụng sẽ chịu trách nhiệm hiển thị quảng cáo (mặc dù ứng dụng không nhất thiết phải làm việc đó ngay lập tức). Để làm cho việc hiển thị định dạng quảng cáo do hệ thống xác định dễ dàng hơn, SDK sẽ cung cấp một số tài nguyên hữu ích.

GADUnifiedNativeAdView

Đối với GADUnifiedNativeAd, có một lớp "chế độ xem quảng cáo" tương ứng: GADUnifiedNativeAdView. Lớp chế độ xem quảng cáo này là UIView mà nhà xuất bản nên sử dụng để hiển thị quảng cáo. Ví dụ: một GADUnifiedNativeAdView duy nhất có thể hiển thị một bản sao của GADUnifiedNativeAd. Mỗi đối tượng UIView được dùng để hiển thị nội dung của quảng cáo đó phải là chế độ xem phụ của đối tượng GADUnifiedNativeAdView đó.

Ví dụ: nếu bạn đang hiển thị một quảng cáo trong UITableView, cấu trúc phân cấp chế độ xem cho một trong các ô có thể trông như sau:

Lớp GADUnifiedNativeAdView cũng cung cấp các IBOutlets dùng để đăng ký chế độ xem được sử dụng cho mỗi nội dung riêng lẻ và một phương thức để đăng ký chính đối tượng GADUnifiedNativeAd. Việc đăng ký các chế độ xem theo cách này cho phép SDK tự động xử lý các công việc như:

  • Ghi lại các lần nhấp.
  • Ghi lại các lần hiển thị (khi pixel đầu tiên hiển thị trên màn hình).
  • Hiển thị lớp phủ Lựa chọn quảng cáo.

Lớp phủ Lựa chọn quảng cáo

Đối với quảng cáo gốc gián tiếp (phân phát qua tính năng chèn lấp AdMob hoặc thông qua Ad Exchange hay AdSense), SDK sẽ thêm một lớp phủ Lựa chọn quảng cáo. Vui lòng kiểm tra khoảng trống ở góc ưu tiên của chế độ xem quảng cáo gốc để tự động chèn biểu trưng Lựa chọn quảng cáo. Đồng thời, hãy chắc chắn rằng lớp phủ Lựa chọn quảng cáo được đặt trên nội dung cho phép người dùng dễ dàng nhìn thấy biểu tượng đó. Để biết thêm thông tin về giao diện và chức năng của lớp phủ, hãy xem nguyên tắc triển khai quảng cáo gốc có lập trình.

Thuộc tính quảng cáo

Khi hiển thị quảng cáo gốc có lập trình, bạn phải hiển thị một thuộc tính quảng cáo để biểu thị rằng chế độ xem đó là một quảng cáo.

Ví dụ về mã

Hãy cùng tìm hiểu cách hiển thị quảng cáo gốc sử dụng các chế độ xem được tải động từ các tệp xib. Đây có thể là một phương pháp rất hữu ích khi sử dụng GADAdLoaders được định cấu hình để yêu cầu nhiều định dạng.

Sắp xếp bố cục cho UIViews

Bước đầu tiên cần làm là sắp xếp bố cục cho UIViews, chế độ xem này sẽ hiển thị nội dung quảng cáo gốc. Bạn có thể thực hiện việc này trong Trình tạo giao diện như khi tạo bất kỳ tệp xib nào khác. Bố cục cho một quảng cáo gốc có thể trông như sau:

Hãy chú ý tới giá trị Lớp tùy chỉnh ở góc bên phải trên cùng của hình. Giá trị này được đặt thành GADUnifiedNativeAdView. Đây là lớp chế độ xem quảng cáo được được dùng để hiển thị một GADUnifiedNativeAd.

Ngoài ra, bạn cũng cần đặt lớp tùy chỉnh cho GADMediaView, lớp này được dùng để hiển thị video hoặc hình ảnh cho quảng cáo.

Liên kết các đầu ra với chế độ xem

Sau khi các chế độ xem đã sẵn sàng và bạn đã chỉ định đúng lớp chế độ xem quảng cáo cho bố cục, hãy liên kết đầu ra nội dung của chế độ xem quảng cáo với UIViews đã tạo. Dưới đây là cách liên kết đầu ra nội dung của chế độ xem quảng cáo với UIViews đã tạo cho một quảng cáo: Trong bảng đầu ra, các đầu ra trong GADUnifiedNativeAdView đã được liên kết với bố cục UIViews trong Trình tạo giao diện. Điều này cho phép SDK biết được UIView nào sẽ hiển thị nội dung nào. Ngoài ra, bạn cũng nên nhớ rằng các đầu ra này đại diện cho các chế độ xem có thể nhấp vào trong quảng cáo.

Hiển thị quảng cáo

Khi bố cục đã hoàn chỉnh và các đầu ra đã được liên kết, bước cuối cùng là thêm mã vào ứng dụng sẽ hiển thị quảng cáo sau khi quảng cáo tải. Dưới đây là một phương thức hiển thị quảng cáo trong chế độ xem đã được xác định ở trên:

Swift

// Mark: - GADUnifiedNativeAdLoaderDelegate
func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADUnifiedNativeAd) {
  print("Received unified native ad: \(nativeAd)")
  refreshAdButton.isEnabled = true
  // Create and place ad in view hierarchy.
  let nibView = Bundle.main.loadNibNamed("UnifiedNativeAdView", owner: nil, options: nil)?.first
  guard let nativeAdView = nibView as? GADUnifiedNativeAdView else {
    return
  }
  setAdView(nativeAdView)

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable as well as populate the media view.
  nativeAdView.nativeAd = nativeAd

  // Populate the native ad view with the native ad assets.
  // The headline is guaranteed to be present in every native ad.
  (nativeAdView.headlineView as? UILabel)?.text = nativeAd.headline

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  (nativeAdView.bodyView as? UILabel)?.text = nativeAd.body
  nativeAdView.bodyView?.isHidden = nativeAd.body == nil

  (nativeAdView.callToActionView as? UIButton)?.setTitle(nativeAd.callToAction, for: .normal)
  nativeAdView.callToActionView?.isHidden = nativeAd.callToAction == nil

  (nativeAdView.iconView as? UIImageView)?.image = nativeAd.icon?.image
  nativeAdView.iconView?.isHidden = nativeAd.icon == nil

  (nativeAdView.starRatingView as? UIImageView)?.image = imageOfStars(fromStarRating:nativeAd.starRating)
  nativeAdView.starRatingView?.isHidden = nativeAd.starRating == nil

  (nativeAdView.storeView as? UILabel)?.text = nativeAd.store
  nativeAdView.storeView?.isHidden = nativeAd.store == nil

  (nativeAdView.priceView as? UILabel)?.text = nativeAd.price
  nativeAdView.priceView?.isHidden = nativeAd.price == nil

  (nativeAdView.advertiserView as? UILabel)?.text = nativeAd.advertiser
  nativeAdView.advertiserView?.isHidden = nativeAd.advertiser == nil

  // In order for the SDK to process touch events properly, user interaction
  // should be disabled.
  nativeAdView.callToActionView?.isUserInteractionEnabled = false
}

Objective-C

#pragma mark GADUnifiedNativeAdLoaderDelegate implementation

- (void)adLoader:(GADAdLoader *)adLoader didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
  NSLog(@"Received unified native ad: %@", nativeAd);
  self.refreshButton.enabled = YES;

  // Create and place ad in view hierarchy.
  GADUnifiedNativeAdView *nativeAdView =
      [[NSBundle mainBundle] loadNibNamed:@"UnifiedNativeAdView" owner:nil options:nil].firstObject;
  [self setAdView:nativeAdView];

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable as well as populate the media view.
  nativeAdView.nativeAd = nativeAd;

  // Populate the native ad view with the native ad assets.
  // The headline is guaranteed to be present in every native ad.
  ((UILabel *)nativeAdView.headlineView).text = nativeAd.headline;

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  ((UILabel *)nativeAdView.bodyView).text = nativeAd.body;
  nativeAdView.bodyView.hidden = nativeAd.body ? NO : YES;

  [((UIButton *)nativeAdView.callToActionView)setTitle:nativeAd.callToAction
                                              forState:UIControlStateNormal];
  nativeAdView.callToActionView.hidden = nativeAd.callToAction ? NO : YES;

    ((UIImageView *)nativeAdView.iconView).image = nativeAd.icon.image;
  nativeAdView.iconView.hidden = nativeAd.icon ? NO : YES;

  ((UIImageView *)nativeAdView.starRatingView).image = [self imageForStars:nativeAd.starRating];
  nativeAdView.starRatingView.hidden = nativeAd.starRating ? NO : YES;

  ((UILabel *)nativeAdView.storeView).text = nativeAd.store;
  nativeAdView.storeView.hidden = nativeAd.store ? NO : YES;

  ((UILabel *)nativeAdView.priceView).text = nativeAd.price;
  nativeAdView.priceView.hidden = nativeAd.price ? NO : YES;

  ((UILabel *)nativeAdView.advertiserView).text = nativeAd.advertiser;
  nativeAdView.advertiserView.hidden = nativeAd.advertiser ? NO : YES;

  // In order for the SDK to process touch events properly, user interaction
  // should be disabled.
  nativeAdView.callToActionView.userInteractionEnabled = NO;
}

GADMediaView

Nội dung hình ảnh và video được hiển thị cho người dùng thông qua GADMediaView. Đây là một UIView có thể được xác định trong tệp xib hoặc được thiết lập động. Bạn phải đặt chế độ xem này bên trong thứ bậc chế độ xem của GADNativeAdView, giống như mọi chế độ xem nội dung khác.

Tuy nhiên, không giống như các chế độ xem nội dung khác, ứng dụng không cần điền nội dung vào GADMediaView theo cách thủ công. SDK tự động xử lý việc này sau khi thuộc tính nativeAd được đặt:

  • Nếu có nội dung video, video đó sẽ được lưu vào vùng đệm và bắt đầu phát bên trong GADMediaView.
  • Nếu quảng cáo không chứa nội dung video, nội dung hình ảnh đầu tiên sẽ được tải xuống và đặt bên trong GADMediaView để thay thế.

    Dưới đây là một đoạn mã trích từ mẫu Quảng cáo gốc nâng cao: (Swift | Objective-C) cho thấy cách điền nội dung quảng cáo gốc vào GADMediaView bằng cách liên kết quảng cáo gốc với chế độ xem quảng cáo gốc:

Swift

nativeAdView.nativeAd = nativeAd

Objective-C

nativeAdView.nativeAd = nativeAd;

Hãy đảm bảo rằng trong tệp trình tạo giao diện cho chế độ xem quảng cáo gốc, bạn đã đặt lớp tùy chỉnh chế độ xem thành GADMediaView và bạn đã kết nối lớp đó với đầu ra mediaView.

Video gốc

Ngoài hình ảnh, văn bản và số, một số quảng cáo gốc còn chứa nội dung video. Không phải quảng cáo nào cũng chứa video và các ứng dụng không bắt buộc phải hiển thị video khi có video trong quảng cáo..

GADVideoController

Hệ thống sử dụng lớp GADVideoController để truy xuất thông tin về nội dung video. GADUnifiedNativeAd cung cấp một thuộc tính videoController hiển thị GADVideoController cho mỗi quảng cáo:

Swift

let videoController = myUnifiedNativeAd.videoController

Objective-C

GADVideoController *videoController = myUnifiedNativeAd.videoController

Thuộc tính này không bao giờ có giá trị nil, ngay cả khi quảng cáo không chứa nội dung video.

GADVideoController cung cấp các phương thức sau để truy vấn trạng thái video:

  • hasVideoContent - True nếu quảng cáo có chứa một nội dung video, false nếu không chứa.
  • aspectRatio - Tỷ lệ co của video (chiều rộng/chiều cao) hoặc 0 (zero) nếu không có nội dung video nào).

Ứng dụng cũng có thể đặt một GADVideoControllerDelegate cho GADVideoController để nhận thông báo về các sự kiện trong vòng đời của một nội dung video. GADVideoControllerDelegate đưa ra một thông báo tùy chọn duy nhất, videoControllerDidEndVideoPlayback, sẽ được gửi khi video phát lại xong.

Dưới đây là ví dụ về cách hoạt động của GADVideoControllerDelegate:

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate,
    GADVideoControllerDelegate {

  func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd:
                GADUnifiedNativeAd) {
    ...
    nativeAd.videoController.delegate = self
    ...
  }

  ...
  func videoControllerDidEndVideoPlayback(_ videoController: Any!) {
    // Here apps can take action knowing video playback is finished.
    // This is handy for things like unmuting audio, and so on.
  }
}

Objective-C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate,
        GADVideoControllerDelegate>

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADUnifiedNativeAd) *)nativeAd {
  ...
  nativeAd.videoController.delegate = self;
  ...
}

...

- (void)videoControllerDidEndVideoPlayback:(GADVideoController *)videoController {
  // Here apps can take action knowing video playback is finished.
  // This is handy for things like unmuting audio, and so on.
}

@end

Tài nguyên khác

Mẫu

Phòng thí nghiệm mã

Các bước tiếp theo

Gửi phản hồi về...

Bạn cần trợ giúp? Truy cập trang hỗ trợ của chúng tôi.