Rendering dell'annuncio per iPhone X

Questa guida illustra le best practice su come programmare le tue app per il rendering corretto degli annunci su iPhone X.

Prerequisiti

  • Completa la procedura Inizia.

Gli annunci banner devono essere posizionati nell'"Area di sicurezza" per evitare di essere oscurati da angoli arrotondati, dall'alloggiamento del sensore e dall'indicatore Home. In questa pagina troverai esempi di come aggiungere vincoli per posizionare un banner nella parte superiore o inferiore dell'area di sicurezza. I vincoli dello storyboard e della pubblicità programmatica sono mostrati in un ambiente che supporta iOS 9 e versioni successive e Xcode 9 e versioni successive. Vengono inoltre indicate soluzioni alternative per le versioni precedenti di iOS e Xcode.

Storyboard/Interface Builder

Se la tua app utilizza Interface Builder, assicurati innanzitutto di aver attivato le guide per il layout area di sicurezza. A tale scopo, devi eseguire Xcode 9 o versioni successive e avere come target iOS 9 o versioni successive.

Apri il file Interface Builder e fai clic sulla scena del controller di visualizzazione. A destra vedrai le opzioni Documento di Interface Builder. Consulta le Guide per il layout Safe Area e assicurati di progettare per iOS 9.0 e versioni successive come minimo.

Ti consigliamo di limitare il banner alle dimensioni richieste utilizzando i vincoli di larghezza e altezza.

Ora puoi allineare il banner in cima all'area di sicurezza vincolando la proprietà Top di GAMBannerView alla parte superiore dell'area di sicurezza:

Allo stesso modo, puoi allineare il banner nella parte inferiore dell'area di sicurezza vincolando la proprietà Bottom di GAMBannerView alla parte inferiore dell'area di sicurezza:

I vincoli ora dovrebbero avere un aspetto simile allo screenshot riportato di seguito (le dimensioni e il posizionamento possono variare):

ViewController

Di seguito è riportato un semplice snippet di codice del controller di visualizzazione che soddisfa il requisito minimo necessario per mostrare un banner in un elemento GAMBannerView come configurato nello storyboard precedente:

Swift

class ViewController: UIViewController {

  /// The banner view.
  @IBOutlet var bannerView: GAMBannerView!

  override func viewDidLoad() {
    super.viewDidLoad()
    // Replace this ad unit ID with your own ad unit ID.
    bannerView.adUnitID = "/6499/example/banner"
    bannerView.rootViewController = self
    bannerView.load(GAMRequest())
  }

}

Objective-C

@interface ViewController()

@property(nonatomic, strong) IBOutlet GAMBannerView *bannerView;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // Replace this ad unit ID with your own ad unit ID.
  self.bannerView.adUnitID = @"/6499/example/banner";
  self.bannerView.rootViewController = self;
  GAMRequest *request = [GAMRequest request];
  [self.bannerView loadRequest:request];
}

Allineamento dei banner al bordo dell'area di sicurezza

Se vuoi avere un banner a larghezza intera, allineato a sinistra o a destra, vincola il bordo sinistro/destro del banner al bordo sinistro/destro dell'area di sicurezza e non al bordo sinistro/destro della superview.

Se è abilitata l'opzione Usa le guide al layout dell'area di sicurezza, lo strumento di creazione di interfacce utilizzerà per impostazione predefinita i bordi dell'area di sicurezza quando aggiunge vincoli alla vista.

Supporto di iOS 8 e versioni precedenti

Se vuoi supportare iOS 8 o versioni precedenti utilizzando Interface Builder, devi deselezionare Use Safe Area Layout Guides (Usa guide del layout di area di sicurezza) per i file e gli storyboard di Interface Builder.

Ora puoi aggiungere vincoli nella parte inferiore della guida al layout in alto (anziché nella parte superiore dell'area di sicurezza):

Aggiungi vincoli anche nella parte superiore della guida al layout inferiore (anziché nella parte inferiore dell'area di sicurezza):

Per i banner a larghezza intera (interessati solo dall'area di sicurezza in orizzontale), queste guide di layout non esistono. L'opzione sicura in Interface Builder è creare i vincoli del bordo sinistro e destro rispetto ai margini:

In questo modo il bordo del banner verrà leggermente sfalsato dal bordo della supervisione/area di sicurezza, assicurando che il banner non venga oscurato con orientamento orizzontale su iPhone X. Puoi anche ottenere il risultato desiderato in modo programmatico.

Pubblicità programmatica

Se l'app crea annunci banner in modo programmatico, puoi definire vincoli e posizionare l'annuncio banner nel codice. Questo esempio (per iOS 7.0 e versioni successive) mostra come vincolare un banner affinché venga centrato orizzontalmente nella parte inferiore dell'area di sicurezza:

Swift

class ViewController: UIViewController {

  var bannerView: GAMBannerView!

  override func viewDidLoad() {
    super.viewDidLoad()

    // Instantiate the banner view with your desired banner size.
    bannerView = GAMBannerView(adSize: kGADAdSizeBanner)
    addBannerViewToView(bannerView)
    bannerView.rootViewController = self
    // Set the ad unit ID to your own ad unit ID here.
    bannerView.adUnitID = "/6499/example/banner"
    bannerView.load(GAMRequest())
  }

  func addBannerViewToView(_ bannerView: UIView) {
    bannerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(bannerView)
    if #available(iOS 11.0, *) {
      positionBannerAtBottomOfSafeArea(bannerView)
    }
    else {
      positionBannerAtBottomOfView(bannerView)
    }
  }

  @available (iOS 11, *)
  func positionBannerAtBottomOfSafeArea(_ bannerView: UIView) {
    // Position the banner. Stick it to the bottom of the Safe Area.
    // Centered horizontally.
    let guide: UILayoutGuide = view.safeAreaLayoutGuide

    NSLayoutConstraint.activate(
      [bannerView.centerXAnchor.constraint(equalTo: guide.centerXAnchor),
       bannerView.bottomAnchor.constraint(equalTo: guide.bottomAnchor)]
    )
  }

  func positionBannerAtBottomOfView(_ bannerView: UIView) {
    // Center the banner horizontally.
    view.addConstraint(NSLayoutConstraint(item: bannerView,
                                          attribute: .centerX,
                                          relatedBy: .equal,
                                          toItem: view,
                                          attribute: .centerX,
                                          multiplier: 1,
                                          constant: 0))
    // Lock the banner to the top of the bottom layout guide.
    view.addConstraint(NSLayoutConstraint(item: bannerView,
                                          attribute: .bottom,
                                          relatedBy: .equal,
                                          toItem: self.bottomLayoutGuide,
                                          attribute: .top,
                                          multiplier: 1,
                                          constant: 0))
  }

}

Objective-C

@interface ViewController()

@property(nonatomic, strong) GAMBannerView *bannerView;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // Instantiate the banner view with your desired banner size.
  self.bannerView = [[GAMBannerView alloc] initWithAdSize:kGADAdSizeBanner];
  [self addBannerViewToVIew:self.bannerView];

  // Replace this ad unit ID with your own ad unit ID.
  self.bannerView.adUnitID = @"/6499/example/banner";
  self.bannerView.rootViewController = self;
  GAMRequest *request = [GAMRequest request];
  [self.bannerView loadRequest:request];
}

#pragma mark - view positioning

-(void)addBannerViewToView:(UIView *_Nonnull)bannerView {
  self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview:self.bannerView];
  if (@available(ios 11.0, *)) {
    [self positionBannerViewAtBottomOfSafeArea:bannerView];
  } else {
    [self positionBannerViewAtBottomOfView:bannerView];
  }
}

- (void)positionBannerViewAtBottomOfSafeArea:(UIView *_Nonnull)bannerView NS_AVAILABLE_IOS(11.0) {
  // Position the banner. Stick it to the bottom of the Safe Area.
  // Centered horizontally.
  UILayoutGuide *guide = self.view.safeAreaLayoutGuide;
  [NSLayoutConstraint activateConstraints:@[
    [bannerView.centerXAnchor constraintEqualToAnchor:guide.centerXAnchor],
    [bannerView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor]
  ]];
}

- (void)positionBannerViewAtBottomOfView:(UIView *_Nonnull)bannerView {
  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:bannerView
                                                        attribute:NSLayoutAttributeCenterX
                                                        relatedBy:NSLayoutRelationEqual
                                                           toItem:self.view
                                                        attribute:NSLayoutAttributeCenterX
                                                       multiplier:1
                                                         constant:0]];
  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:bannerView
                                                        attribute:NSLayoutAttributeBottom
                                                        relatedBy:NSLayoutRelationEqual
                                                           toItem:self.bottomLayoutGuide
                                                        attribute:NSLayoutAttributeTop
                                                       multiplier:1
                                                         constant:0]];
}

@end

Le tecniche illustrate sopra possono essere facilmente utilizzate per vincolare la parte superiore dell'area di sicurezza modificando gli attributi e gli ancoraggi utilizzati.

Annunci nativi

Se la tua app blocca gli annunci nativi nella parte superiore o inferiore dello schermo, per gli annunci nativi si applicano gli stessi principi validi per gli annunci banner. La differenza principale è che, invece di aggiungere vincoli a un GAMBannerView, dovrai aggiungere vincoli a GADNativeAppInstallAdView e GADNativeContentAdView (o alla vista contenitore dell'annuncio) per rispettare le guide al layout dell'area di sicurezza. Per le visualizzazioni native consigliamo di fornire vincoli di dimensione più espliciti.

Annunci interstitial e con premio

Il rendering dei formati degli annunci a schermo intero, inclusi quelli interstitial e con premio, viene eseguito dall'SDK Google Mobile Ads. Ci sarà un aggiornamento dell'SDK Google Mobile Ads per garantire che gli elementi degli annunci, ad esempio il pulsante di chiusura, vengano visualizzati nel posto giusto. Aggiorneremo le note di rilascio e questa pagina della documentazione non appena questa modifica sarà disponibile.