Banery reklamowe

Banery reklamowe to prostokątne reklamy, które zajmują część układu aplikacji. Pozostają na ekranie, gdy użytkownicy wchodzą w interakcję z aplikacją – są zakotwiczone u góry lub u dołu ekranu albo pozostają w tekście podczas przewijania strony. Banery reklamowe mogą odświeżać się automatycznie po upływie określonego czasu. Więcej informacji znajdziesz w artykule Omówienie banerów reklamowych.

Z tego przewodnika dowiesz się, jak zacząć korzystać z zakotwiczonych adaptacyjnych banerów reklamowych, które maksymalizują skuteczność przez optymalizację rozmiaru reklamy na każdym urządzeniu na podstawie określonej przez Ciebie szerokości reklamy.

Zakotwiczony baner adaptacyjny

Zakotwiczone banery adaptacyjne to reklamy o stałym współczynniku proporcji zamiast standardowych reklam o stałym rozmiarze. Format obrazu jest podobny do standardu branżowego 320 x 50. Gdy określisz pełną szerokość, wyświetli się reklama o optymalnej wysokości dla tej szerokości. Optymalna wysokość nie zmienia się w przypadku żądań z tego samego urządzenia, a otaczające je widoki nie muszą przesuwać się, gdy reklama jest odświeżana.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie produkcyjnych reklam. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytania reklam testowych jest użycie naszego dedykowanego testowego identyfikatora jednostki reklamowej do banerów na iOS: /6499/example/adaptive-banner

Został on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Tworzenie obiektu GAMBannerView

Banery reklamowe są wyświetlane w obiektach GAMBannerView, więc pierwszym krokiem do integracji banerów reklamowych jest umieszczenie elementu GAMBannerView w hierarchii widoków. Zwykle można to zrobić automatycznie lub za pomocą Kreatora interfejsów.

Automatyzacja

Wystąpienie GAMBannerView można też utworzyć bezpośrednio. Oto przykład tworzenia elementu GAMBannerView wyrównanego do dołu pośrodku bezpiecznego obszaru ekranu:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var bannerView: GAMBannerView!

  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 = GAMBannerView(adSize: adaptiveSize)

    addBannerViewToView(bannerView)
  }

  func addBannerViewToView(_ bannerView: GAMBannerView) {
    bannerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(bannerView)
    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)
      ])
   }
   
}

Objective-C

@import GoogleMobileAds;

@interface ViewController ()

@property(nonatomic, strong) GAMBannerView *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 = [[GAMBannerView alloc] initWithAdSize:adaptiveSize];

  [self addBannerViewToView:self.bannerView];
}

- (void)addBannerViewToView:(UIView *)bannerView {
  bannerView.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview:bannerView];
  [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

Pamiętaj, że w tym przypadku nie ma ograniczeń szerokości ani wysokości, ponieważ podany rozmiar reklamy nada banerowi rozmiar treści niezbędny do określenia rozmiaru widoku.

Kreator interfejsów

Element GAMBannerView można dodać do scenorysu lub pliku XIB. Jeśli korzystasz z tej metody, pamiętaj, aby ograniczenia pozycji dodawać tylko do banera. Jeśli na przykład chcesz wyświetlać baner adaptacyjny na dole ekranu, ustaw dolną część widoku banera tak, by znajdowała się u góry dolnego przewodnika po układzie, a środek X – środek widoku superwidoku.

Rozmiar reklamy banera jest ustalany automatycznie:

Swift

  bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)

Objective-C

  self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);

Wczytywanie reklamy

Po skonfigurowaniu obiektu GAMBannerView i skonfigurowaniu jego właściwości czas wczytać reklamę. Aby to zrobić, wywołaj funkcję loadRequest: w obiekcie GAMRequest:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  ...
  
  //  Set the ad unit ID and view controller that contains the GAMBannerView.
  bannerView.adUnitID = "/6499/example/adaptive-banner"
  bannerView.rootViewController = self

  bannerView.load(GAMRequest())
}

Objective-C

-   (void)viewDidLoad {
  [super viewDidLoad];
  ...
  
  //  Set the ad unit ID and view controller that contains the GAMBannerView.
  self.bannerView.adUnitID = @"/6499/example/adaptive-banner";
  self.bannerView.rootViewController = self;

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

Obiekty GAMRequest reprezentują pojedyncze żądanie reklamy i zawierają właściwości takie jak informacje o kierowaniu.

Jeśli reklama nie zostanie wczytana, nie musisz prosić o coś innego, o ile tylko masz skonfigurowane odświeżanie jednostki reklamowej. Pakiet SDK do reklam mobilnych Google respektuje każdą częstotliwość odświeżania określoną w interfejsie Ad Managera. Jeśli odświeżanie nie jest włączone, musisz przesłać nową prośbę.

Zdarzenia reklamowe

Dzięki funkcji GADBannerViewDelegate możesz nasłuchiwać zdarzeń cyklu życia, takich jak zamknięcie reklamy lub opuszczenie aplikacji przez użytkownika.

Rejestrowanie zdarzeń dotyczących banera

Aby rejestrować zdarzenia banerów reklamowych, ustaw właściwość delegate dla GAMBannerView na obiekt, który implementuje protokół GADBannerViewDelegate. Ogólnie rzecz biorąc, klasa implementująca banery reklamowe działa też jako klasa przedstawiciela. W takim przypadku właściwość delegate może mieć wartość self.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADBannerViewDelegate {

  var bannerView: GAMBannerView!

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

Objective-C

@import GoogleMobileAds;

@interface ViewController () <GADBannerViewDelegate>

@property(nonatomic, strong) GAMBannerView *bannerView;

@end

@implementation ViewController

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

Implementowanie zdarzeń banerów

Każda z metod w metodzie GADBannerViewDelegate jest oznaczona jako opcjonalna, więc musisz wdrożyć tylko te, które chcesz. Ten przykład implementuje każdą metodę i rejestruje komunikat w konsoli:

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");
}

W przykładzie Ad Delegate znajdziesz metodę delegowania banerów w aplikacji demonstracyjnej na iOS API.

Swift Objective-C

Przykłady zastosowań

Oto kilka przykładów ich użycia.

dodawanie banera do hierarchii wyświetleń po otrzymaniu reklamy;

Możesz dodać pole GAMBannerView do hierarchii widoków z opóźnieniem do momentu otrzymania reklamy. Aby to zrobić, nasłuchuj zdarzenia bannerViewDidReceiveAd::

Swift

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

Objective-C

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

Animowanie banera reklamowego

Możesz też użyć zdarzenia bannerViewDidReceiveAd:, aby animować baner reklamowy po jego zwróceniu, jak w tym przykładzie:

Swift

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

Objective-C

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

Wstrzymywanie i wznawianie aplikacji

Protokół GADBannerViewDelegate udostępnia metody powiadamiania o zdarzeniach, na przykład gdy kliknięcie powoduje wyświetlenie lub zamknięcie nakładki. Jeśli chcesz sprawdzić, czy te zdarzenia były następstwem reklam, zarejestruj się za pomocą tych metod GADBannerViewDelegate.

Aby wychwytywać wszystkie typy prezentacji w formie nakładki lub wywołania zewnętrznych przeglądarek, a nie tylko te, które pochodzą z kliknięć reklam, lepiej korzystać z odpowiednich metod w UIViewController lub UIApplication. W tej tabeli znajdują się równoważne metody na iOS, które są wywoływane jednocześnie z metodami GADBannerViewDelegate:

Metoda GADBannerViewDelegate Metoda na iOS
bannerViewWillPresentScreen: viewWillDisappear: UIViewController
bannerViewWillDismissScreen: viewWillAppear: UIViewController
bannerViewDidDismissScreen: viewDidAppear: UIViewController

Ręczne liczenie wyświetleń

Jeśli masz szczególne warunki określające, kiedy wyświetlenia powinny być rejestrowane, możesz ręcznie wysyłać do Ad Managera pingi wyświetleń. Możesz to zrobić, włącz GAMBannerView w przypadku wyświetleń ręcznych przed wczytaniem reklamy:

Swift

bannerView.enableManualImpressions = true

Objective-C

self.bannerView.enableManualImpressions = YES;

Gdy ustalisz, że reklama została zwrócona i jest widoczna na ekranie, możesz ręcznie uruchomić wyświetlenie:

Swift

bannerView.recordImpression()

Objective-C

[self.bannerView recordImpression];

Zdarzenia w aplikacjach

Zdarzenia w aplikacji umożliwiają tworzenie reklam, które mogą wysyłać komunikaty do kodu aplikacji. Aplikacja może podejmować działania na podstawie tych komunikatów.

Możesz nasłuchiwać zdarzeń w aplikacji związanych z Ad Managerem za pomocą parametru GADAppEventDelegate. Te zdarzenia mogą wystąpić w dowolnym momencie cyklu życia reklamy, nawet przed wywołaniem bannerViewDidReceiveAd: obiektu GADBannerViewDelegate.

Swift

// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.

// Called when the banner receives an app event.
optional public func bannerView(_ banner: GAMBannerView,
    didReceiveAppEvent name: String, withInfo info: String?)

Objective-C

// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.

@optional
// Called when the banner receives an app event.
-   (void)bannerView:(GAMBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info;

Metody zdarzeń w aplikacji można wdrożyć w kontrolerze widoku:

Swift

import GoogleMobileAds

class ViewController: UIViewController, GADAppEventDelegate {
}

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController <GADAppEventDelegate> {
}

@end

Pamiętaj, aby przed wysłaniem żądania reklamy ustawić przedstawiciela za pomocą właściwości appEventDelegate.

Swift

bannerView.appEventDelegate = self

Objective-C

self.bannerView.appEventDelegate = self;

Oto przykład, który pokazuje, jak zmienić kolor tła aplikacji przez określenie koloru za pomocą zdarzenia w aplikacji:

Swift

func bannerView(_ banner: GAMBannerView, didReceiveAppEvent name: String,
    withInfo info: String?) {
  if name == "color" {
    guard let info = info else { return }
    switch info {
    case "green":
      // Set background color to green.
      view.backgroundColor = UIColor.green
    case "blue":
      // Set background color to blue.
      view.backgroundColor = UIColor.blue
    default:
      // Set background color to black.
      view.backgroundColor = UIColor.black
    }
  }
}

Objective-C

-   (void)bannerView:(GAMBannerView *)banner
    didReceiveAppEvent:(NSString *)name
              withInfo:(NSString *)info {
  if ([name isEqual:@"color"]) {
    if ([info isEqual:@"green"]) {
      // Set background color to green.
      self.view.backgroundColor = [UIColor greenColor];
    } else if ([info isEqual:@"blue"]) {
      // Set background color to blue.
      self.view.backgroundColor = [UIColor blueColor];
    } else
      // Set background color to black.
      self.view.backgroundColor = [UIColor blackColor];
    }
  }
}

A oto odpowiednia kreacja, która wysyła do appEventDelegate komunikaty o zdarzeniach w aplikacji oznaczonej kolorami:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

W przykładzie zdarzeń w aplikacji z Ad Managera znajdziesz przykład implementacji zdarzeń w aplikacji w wersji demonstracyjnej interfejsu iOS API.

Swift Objective-C

Dodatkowe materiały

Przykłady w GitHubie

Dalsze kroki

Banery zwijane

Zwijane banery reklamowe to banery reklamowe, które początkowo wyświetlają się jako większa nakładka oraz przycisk, który zwija reklamę do mniejszego rozmiaru. Warto go używać do dalszej optymalizacji skuteczności. Więcej informacji znajdziesz w artykule o zwijanych banerach reklamowych.

Wbudowane banery adaptacyjne

Banery adaptacyjne śródtekstowe są większe i wyższe niż zakotwiczone banery adaptacyjne. Mają zmienną wysokość i równą wysokość ekranu urządzenia. Śródtekstowe banery adaptacyjne sprawdzają się zamiast zakotwiczonych banerów adaptacyjnych w aplikacjach, które umieszczają banery reklamowe w treściach przewijanych. Więcej informacji znajdziesz w artykule o wbudowanych banerach adaptacyjnych.

Przeglądaj inne tematy