橫幅廣告

橫幅廣告是佔用部分應用程式版面的矩形廣告。使用者與應用程式互動時,這類廣告會顯示在畫面頂端或底部,或是在使用者捲動畫面時且內嵌於內容中顯示。橫幅 廣告會在一段時間後自動重新整理查看橫幅廣告總覽 瞭解詳情

本指南將說明如何開始使用錨定自動調整橫幅廣告,這種廣告會根據您指定的廣告寬度,為每部裝置最佳化廣告大小,進而提升成效。

錨定自動調整橫幅廣告

錨定自動調整橫幅廣告是固定顯示比例的廣告,而非一般固定大小的廣告。長寬比與 320x50 的業界標準相似。指定可用的完整寬度後,系統會傳回廣告,並以該寬度為準,傳回最佳高度。同一部裝置的不同要求不會影響最佳高度,廣告重新整理時也不需要移動周圍的檢視畫面。

必要條件

請務必使用測試廣告進行測試

建構及測試應用程式時,請務必使用測試廣告,而非 現場及正式環境廣告否則帳戶可能會遭到停權。

要載入測試廣告,最簡單的方法就是使用我們專屬的 iOS 測試廣告單元 ID 橫幅廣告:

ca-app-pub-3940256099942544/2435281174

這項機制經過特別設定,可針對每個請求傳回測試廣告 在您的程式設計、測試和偵錯時,可以免費使用應用程式。只要在發布應用程式前,將其替換為自己的廣告單元 ID 即可。

若要進一步瞭解 Mobile Ads SDK 測試廣告的運作方式,請參閱「測試 Google Ads

建立 GADBannerView

橫幅廣告會以GADBannerView顯示 物件,因此整合橫幅廣告的第一步就是加入 GADBannerView 位於檢視區塊階層中這通常會透過程式設計或透過 Interface Builder 完成。

程式輔助方式

GADBannerView 也可以直接例項化。 以下範例會建立 GADBannerView

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var bannerView: GADBannerView!

  override func viewDidLoad() {
    super.viewDidLoad()

    let viewWidth = view.frame.inset(by: view.safeAreaInsets).width

    // Here the current interface orientation is used. Use
    // GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth or
    // GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth if you prefer to load an ad of a
    // particular orientation,
    let adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)
    bannerView = GADBannerView(adSize: adaptiveSize)

    addBannerViewToView(bannerView)
  }

  func addBannerViewToView(_ bannerView: GADBannerView) {
    bannerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(bannerView)
    // This example doesn't give width or height constraints, as the provided
    // ad size gives the banner an intrinsic content size to size the view.
    view.addConstraints(
      [NSLayoutConstraint(item: bannerView,
                          attribute: .bottom,
                          relatedBy: .equal,
                          toItem: view.safeAreaLayoutGuide,
                          attribute: .bottom,
                          multiplier: 1,
                          constant: 0),
      NSLayoutConstraint(item: bannerView,
                          attribute: .centerX,
                          relatedBy: .equal,
                          toItem: view,
                          attribute: .centerX,
                          multiplier: 1,
                          constant: 0)
      ])
  }
}

SwiftUI

如要使用 GADBannerView,請建立 UIViewRepresentable

private struct BannerView: UIViewRepresentable {
  let adSize: GADAdSize

  init(_ adSize: GADAdSize) {
    self.adSize = adSize
  }

  func makeUIView(context: Context) -> UIView {
    // Wrap the GADBannerView in a UIView. GADBannerView automatically reloads a new ad when its
    // frame size changes; wrapping in a UIView container insulates the GADBannerView from size
    // changes that impact the view returned from makeUIView.
    let view = UIView()
    view.addSubview(context.coordinator.bannerView)
    return view
  }

  func updateUIView(_ uiView: UIView, context: Context) {
    context.coordinator.bannerView.adSize = adSize
  }

  func makeCoordinator() -> BannerCoordinator {
    return BannerCoordinator(self)
  }

如要管理 GADBannerView 的初始化和行為,請建立 Coordinator

class BannerCoordinator: NSObject, GADBannerViewDelegate {

  private(set) lazy var bannerView: GADBannerView = {
    let banner = GADBannerView(adSize: parent.adSize)
    banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
    banner.load(GADRequest())
    banner.delegate = self
    return banner
  }()

  let parent: BannerView

  init(_ parent: BannerView) {
    self.parent = parent
  }

如要取得檢視區塊的寬度,請使用 GeometryReader。本課程 針對目前裝置螢幕方向計算適當的廣告大小。frame 會設為根據廣告大小計算的高度。

var body: some View {
  GeometryReader { geometry in
    let adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(geometry.size.width)

    VStack {
      Spacer()
      BannerView(adSize)
        .frame(height: adSize.size.height)
    }
  }

Objective-C

請注意,在這種情況下,我們並未提供寬度或高度限制, 提供的廣告大小可提高橫幅廣告的內建內容大小 檢視畫面。

@import GoogleMobileAds;

@interface ViewController ()

@property(nonatomic, strong) GADBannerView *bannerView;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // Here safe area is taken into account, hence the view frame is used after the
  // view has been laid out.
  CGRect frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets);
  CGFloat viewWidth = frame.size.width;

  // Here the current interface orientation is used. If the ad is being preloaded
  // for a future orientation change or different orientation, the function for the
  // relevant orientation should be used.
  GADAdSize adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);
  // In this case, we instantiate the banner with desired ad size.
  self.bannerView = [[GADBannerView alloc] initWithAdSize:adaptiveSize];

  [self addBannerViewToView:self.bannerView];
}

- (void)addBannerViewToView:(UIView *)bannerView {
  bannerView.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview:bannerView];
  // This example doesn't give width or height constraints, as the provided
  // ad size gives the banner an intrinsic content size to size the view.
  [self.view addConstraints:@[
    [NSLayoutConstraint constraintWithItem:bannerView
                              attribute:NSLayoutAttributeBottom
                              relatedBy:NSLayoutRelationEqual
                                  toItem:self.view.safeAreaLayoutGuide
                              attribute:NSLayoutAttributeBottom
                              multiplier:1
                                constant:0],
    [NSLayoutConstraint constraintWithItem:bannerView
                              attribute:NSLayoutAttributeCenterX
                              relatedBy:NSLayoutRelationEqual
                                  toItem:self.view
                              attribute:NSLayoutAttributeCenterX
                              multiplier:1
                                constant:0]
                                ]];
}
@end

介面設計工具

您可以將 GADBannerView 新增至分鏡腳本或 xib 檔案。使用時 方法,請務必只在橫幅中加入位置限制。舉例來說,如果要在螢幕底部顯示自動調整橫幅,請將橫幅檢視畫面的底部設為等於底部版面配置指南的頂端,並將 centerX 約束條件設為等於超級檢視畫面的 centerX

橫幅廣告的大小仍會以程式輔助方式設定:

Swift

bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)

Objective-C

self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);

載入廣告

GADBannerView 就位並完成屬性設定後,即可載入廣告。方法是在loadRequest: GADRequest 物件:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  // Set the ad unit ID and view controller that contains the GADBannerView.
  bannerView.adUnitID = "ca-app-pub-3940256099942544/2435281174"
  bannerView.rootViewController = self

  bannerView.load(GADRequest())
}

SwiftUI

banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(GADRequest())

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  // Set the ad unit ID and view controller that contains the GADBannerView.
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2435281174";
  self.bannerView.rootViewController = self;

  [self.bannerView loadRequest:[GADRequest request]];
}

GADRequest 物件代表單一廣告請求 包含指定目標資訊這類屬性

如果廣告無法載入,您不需要明確請求其他廣告 前提是廣告單元已經設定重新整理Google Mobile Ads SDK 採用您在 AdMob 中指定的任何重新整理頻率 第一種是使用無代碼解決方案 AutoML 透過使用者介面建立機器學習模型如果尚未啟用重新整理功能,就必須重新提出要求。

廣告事件

使用 GADBannerViewDelegate 即可監聽生命週期事件、 例如廣告關閉或使用者離開應用程式時,就會觸發這些事件。

註冊橫幅廣告事件

如要註冊橫幅廣告事件,請將 GADBannerViewdelegate 屬性設為實作 GADBannerViewDelegate 通訊協定的物件。一般來說,會導入橫幅廣告的類別 廣告也是委派類別,在這種情況下,delegate 屬性 設為 self

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADBannerViewDelegate {

  var bannerView: GADBannerView!

  override func viewDidLoad() {
    super.viewDidLoad()
    // ...
    bannerView.delegate = self
  }
}

SwiftUI

banner.delegate = self

Objective-C

@import GoogleMobileAds;

@interface ViewController () <GADBannerViewDelegate>

@property(nonatomic, strong) GADBannerView *bannerView;

@end

@implementation ViewController

-   (void)viewDidLoad {
  [super viewDidLoad];
  // ...
  self.bannerView.delegate = self;
}

導入橫幅廣告事件

GADBannerViewDelegate 中的每個方法都標示為選用,因此您只需實作所需的方法。本範例將實作每個方法 並將訊息記錄到控制台:

Swift

func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
  print("bannerViewDidReceiveAd")
}

func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
  print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
  print("bannerViewDidRecordImpression")
}

func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillPresentScreen")
}

func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewWillDIsmissScreen")
}

func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
  print("bannerViewDidDismissScreen")
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidReceiveAd");
}

- (void)bannerView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(NSError *)error {
  NSLog(@"bannerView:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}

- (void)bannerViewDidRecordImpression:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidRecordImpression");
}

- (void)bannerViewWillPresentScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewWillPresentScreen");
}

- (void)bannerViewWillDismissScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewWillDismissScreen");
}

- (void)bannerViewDidDismissScreen:(GADBannerView *)bannerView {
  NSLog(@"bannerViewDidDismissScreen");
}

請參閱廣告委派程式範例,瞭解如何在 iOS API 示範應用程式中實作橫幅委派程式方法。

Swift Objective-C

用途

以下是這些廣告事件方法的幾個使用範例。

在收到廣告後,將橫幅廣告新增至檢視階層

GADBannerView 新增至 整個畫面的階層結構 (直到接收廣告為止)您可以監聽 bannerViewDidReceiveAd: 事件來執行此操作:

Swift

func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
  // Add banner to view and add constraints.
  addBannerViewToView(bannerView)
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  // Add bannerView to view and add constraints as above.
  [self addBannerViewToView:self.bannerView];
}

為橫幅廣告製作動畫

您也可以在橫幅廣告傳回後使用 bannerViewDidReceiveAd: 事件為其製作動畫,如以下範例所示:

Swift

func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
  bannerView.alpha = 0
  UIView.animate(withDuration: 1, animations: {
    bannerView.alpha = 1
  })
}

Objective-C

- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
  bannerView.alpha = 0;
  [UIView animateWithDuration:1.0 animations:^{
    bannerView.alpha = 1;
  }];
}

暫停及繼續播放應用程式

GADBannerViewDelegate 通訊協定提供方法,可通知您事件,例如點擊導致重疊顯示或關閉時。如果您想 追蹤這些事件是否源自於廣告,註冊 GADBannerViewDelegate 方法。

如要擷取所有類型的重疊簡報或外部瀏覽器叫用,請勿擷取 只有來自廣告點擊的流量 所以您的應用程式更有辦法監聽 UIViewControllerUIApplication 上的對等方法。以下表格列出與 GADBannerViewDelegate 方法同時叫用的等效 iOS 方法:

GADBannerViewDelegate 方法 iOS 方法
bannerViewWillPresentScreen: UIViewController 的 viewWillDisappear:
bannerViewWillDismissScreen: UIViewController 的 viewWillAppear:
bannerViewDidDismissScreen: UIViewController 的 viewDidAppear:

其他資源

GitHub 上的範例

後續步驟

可收合橫幅廣告

可收合橫幅廣告是一開始會以較大重疊廣告顯示的橫幅廣告,並提供按鈕將廣告收合為較小的尺寸。建議採用 進一步提升成效詳情請參閱「可收合橫幅廣告」一文。

內嵌自動調整橫幅廣告

與錨定自動調整橫幅廣告相比,內嵌自動調整橫幅廣告較大、尺寸更加大 橫幅廣告可調整高度,甚至可與裝置螢幕一樣高。建議內嵌自動調整橫幅廣告,而非錨定式自動調整橫幅廣告。 應用程式會在可捲動內容中顯示橫幅廣告。詳情請參閱「內嵌式自適應橫幅」。

探索其他主題