Annunci banner

Gli annunci banner sono annunci rettangolari che occupano una parte del layout dell'app. Rimangono sullo schermo durante l'interazione degli utenti con l'app, ancorati nella parte superiore o inferiore dello schermo o in linea con i contenuti mentre l'utente scorre. Gli annunci banner possono aggiornarsi automaticamente dopo un determinato periodo di tempo. Per saperne di più, consulta Panoramica degli annunci banner.

Questa guida illustra come iniziare a utilizzare gli annunci banner adattivi ancorati, che massimizzano il rendimento ottimizzando le dimensioni dell'annuncio per ogni dispositivo utilizzando una larghezza dell'annuncio da te specificata.

Banner adattivo ancorato

Gli annunci banner adattivi ancorati sono annunci con proporzioni fisse anziché i normali annunci a dimensione fissa. Le proporzioni sono simili a quelle dello standard di settore 320 x 50. Una volta specificata la larghezza massima disponibile, ti verrà restituito un annuncio con l'altezza ottimale per quella larghezza. L'altezza ottimale non cambia tra le richieste dello stesso dispositivo e le visualizzazioni circostanti non devono cambiare quando l'annuncio viene aggiornato.

Prerequisiti

Effettua sempre test con annunci di prova

Quando crei e testi le tue app, assicurati di utilizzare annunci di prova anziché annunci di produzione pubblicati. In caso contrario, l'account verrà sospeso.

Il modo più semplice per caricare annunci di prova è utilizzare il nostro ID unità pubblicitaria di prova dedicato per i banner iOS: /6499/example/adaptive-banner

È stato appositamente configurato per restituire annunci di prova per ogni richiesta e puoi utilizzarlo nelle tue app durante la programmazione, i test e il debug. Assicurati di sostituirlo con il tuo ID unità pubblicitaria prima di pubblicare l'app.

Per ulteriori informazioni sul funzionamento degli annunci di prova dell'SDK Mobile Ads, consulta la pagina Annunci di prova.

Crea una GAMBannerView

Gli annunci banner vengono visualizzati negli oggetti GAMBannerView, perciò il primo passaggio per integrarli consiste nell'includere un GAMBannerView nella gerarchia delle visualizzazioni. Di solito questo viene fatto in modo programmatico o mediante Interface Builder.

In modo programmatico

È anche possibile creare un'istanza direttamente di un'istanza GAMBannerView. Ecco un esempio di come creare un elemento GAMBannerView, allineato in basso al centro dell'area di sicurezza dello schermo:

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

Tieni presente che in questo caso non vengono assegnati vincoli di larghezza o altezza, perché le dimensioni dell'annuncio fornite daranno al banner una dimensione dei contenuti intrinseca per ridimensionare la visualizzazione.

Builder di interfacce

Un GAMBannerView può essere aggiunto a uno storyboard o a un file xib. Quando utilizzi questo metodo, assicurati di aggiungere vincoli di posizione solo sul banner. Ad esempio, quando visualizzi un banner adattivo nella parte inferiore dello schermo, imposta la parte inferiore della visualizzazione banner uguale a quella della parte superiore della guida al layout in basso e imposta la X centrale sullo stesso valore della X centrale della superview.

Le dimensioni dell'annuncio del banner sono ancora impostate in modo programmatico:

Swift

  bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)

Objective-C

  self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);

Carica un annuncio

Una volta impostato GAMBannerView e configurate le proprietà, è il momento di caricare un annuncio. Per farlo, devi chiamare loadRequest: su un oggetto 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]];
}

Gli oggetti GAMRequest rappresentano una singola richiesta di annuncio e contengono proprietà per elementi come le informazioni di targeting.

Se l'annuncio non viene caricato, non è necessario richiederne un altro se hai configurato l'aggiornamento dell'unità pubblicitaria; l'SDK Google Mobile Ads rispetterà qualsiasi frequenza di aggiornamento specificata nell'interfaccia utente di Ad Manager. Se non hai abilitato l'aggiornamento, dovrai inviare una nuova richiesta.

Eventi annuncio

Utilizzando GADBannerViewDelegate, puoi ascoltare gli eventi del ciclo di vita, ad esempio quando un annuncio viene chiuso o l'utente esce dall'app.

Registrazione per gli eventi banner

Per registrarti agli eventi di annunci banner, imposta la proprietà delegate su GAMBannerView su un oggetto che implementa il protocollo GADBannerViewDelegate. In genere, la classe che implementa gli annunci banner agisce anche come classe delegato. In questo caso, la proprietà delegate può essere impostata su 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;
}

Implementazione di eventi banner

Ogni metodo in GADBannerViewDelegate è contrassegnato come facoltativo, quindi devi implementare solo i metodi che preferisci. Questo esempio implementa ciascun metodo e registra un messaggio nella console:

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

Vedi l'esempio del delegato annunci per l'implementazione dei metodi di delega banner nell'app demo dell'API iOS.

Swift Objective-C

Casi d'uso

Di seguito sono riportati alcuni casi d'uso di esempio per questi metodi degli eventi annuncio.

L'aggiunta di un banner alla gerarchia di visualizzazione dopo la ricezione di un annuncio

Ti consigliamo di ritardare l'aggiunta di un GAMBannerView alla gerarchia delle visualizzazioni fino a quando non viene ricevuto un annuncio. Puoi farlo ascoltando l'evento 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];
}

Animazione di un annuncio banner

Puoi utilizzare l'evento bannerViewDidReceiveAd: anche per animare un annuncio banner dopo che viene restituito, come illustrato nell'esempio seguente:

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;
  }];
}

Mettere in pausa e riprendere l'app

Il protocollo GADBannerViewDelegate prevede metodi per inviarti notifiche sugli eventi, ad esempio quando un clic determina la presentazione o la chiusura di un overlay. Se vuoi verificare se questi eventi sono dovuti ad annunci, registrati per questi metodi GADBannerViewDelegate.

Per rilevare tutti i tipi di presentazioni overlay o chiamate esterne al browser, non solo quelle provenienti dai clic sugli annunci, è preferibile che la tua app ascolti i metodi equivalenti su UIViewController o UIApplication. Ecco una tabella che mostra i metodi iOS equivalenti che vengono richiamati contemporaneamente ai metodi GADBannerViewDelegate:

Metodo GADBannerViewDelegate Metodo iOS
bannerViewWillPresentScreen: viewWillDisappear: di UIViewController
bannerViewWillDismissScreen: viewWillAppear: di UIViewController
bannerViewDidDismissScreen: viewDidAppear: di UIViewController

Conteggio manuale delle impressioni

Puoi inviare manualmente ping delle impressioni ad Ad Manager se esistono condizioni speciali per quando un'impressione deve essere registrata. A tale scopo, abilita GAMBannerView per le impressioni manuali prima di caricare un annuncio:

Swift

bannerView.enableManualImpressions = true

Objective-C

self.bannerView.enableManualImpressions = YES;

Quando stabilisci che un annuncio è stato restituito correttamente e viene visualizzato sullo schermo, puoi attivare manualmente un'impressione:

Swift

bannerView.recordImpression()

Objective-C

[self.bannerView recordImpression];

Eventi app

Gli eventi app ti consentono di creare annunci che possono inviare messaggi al loro codice dell'app. L'app può quindi eseguire azioni in base a questi messaggi.

Puoi ascoltare gli eventi delle app specifici di Ad Manager utilizzando GADAppEventDelegate. Questi eventi possono verificarsi in qualsiasi momento durante il ciclo di vita dell'annuncio, anche prima della chiamata all'elemento bannerViewDidReceiveAd: dell'oggetto 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;

I metodi degli eventi app possono essere implementati in un controller di visualizzazione:

Swift

import GoogleMobileAds

class ViewController: UIViewController, GADAppEventDelegate {
}

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController <GADAppEventDelegate> {
}

@end

Ricordati di impostare il delegato utilizzando la proprietà appEventDelegate prima di effettuare la richiesta di un annuncio.

Swift

bannerView.appEventDelegate = self

Objective-C

self.bannerView.appEventDelegate = self;

Ecco un esempio che mostra come modificare il colore di sfondo dell'app specificando il colore tramite un evento app:

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];
    }
  }
}

Ed ecco la creatività corrispondente che invia messaggi di evento dell'app dei colori a appEventDelegate:

<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>

Guarda l'esempio di eventi app di Ad Manager per un'implementazione di eventi app nell'app demo dell'API iOS.

Swift Objective-C

Risorse aggiuntive

Esempi su GitHub

Passaggi successivi

Banner comprimibili

Gli annunci banner comprimibili sono annunci banner che vengono inizialmente presentati come overlay più grande, con un pulsante per comprimere l'annuncio in modo da ridurne la dimensione. Valuta la possibilità di utilizzarlo per ottimizzare ulteriormente il tuo rendimento. Per ulteriori dettagli, consulta la sezione sugli annunci banner comprimibili.

Banner adattivi in linea

I banner adattivi in linea sono banner più grandi e più alti rispetto ai banner adattivi ancorati. Sono di altezza variabile e possono essere alti quanto lo schermo del dispositivo. I banner adattivi in linea sono consigliati rispetto agli annunci banner adattivi ancorati per le app che inseriscono annunci banner in contenuti scorrevoli. Per ulteriori dettagli, vedi Banner adattivi in linea.

Esplora altri argomenti