Condividi il tuo feedback e contribuisci a definire la roadmap di Google Mobile Ads SDK. Rispondi al sondaggio annuale per l'SDK Google Mobile Ads per il 2023 prima della sua chiusura il 5 maggio 2023.

Annunci premiati

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Gli annunci con premio sono annunci con cui gli utenti possono interagire con in cambio di premi in-app. Questa guida mostra come integrare gli annunci con premio AdMob in un'app per iOS. Leggi alcuni casi di successo dei clienti: case study 1, case study 2.

Prerequisiti

Eseguire sempre i test con gli annunci di prova

Durante la creazione e il test delle tue app, assicurati di utilizzare annunci di prova anziché annunci attivi di produzione. In caso contrario, l'account potrebbe essere sospeso.

Il modo più semplice per caricare gli annunci di prova è utilizzare il nostro ID unità pubblicitaria di prova dedicato per gli annunci con premio per iOS:

ca-app-pub-3940256099942544/1712485313

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

Per ulteriori informazioni su come funzionano gli annunci di prova dell'SDK Mobile Ads, consulta Annunci di prova.

Implementazione

I passaggi principali per l'integrazione degli annunci interstitial con premio sono i seguenti:

  • Caricare un annuncio
  • [Facoltativo] Convalidare i callback SSV
  • Registrati per i callback
  • Mostra l'annuncio e gestisci l'evento premio

Caricare un annuncio

Il caricamento di un annuncio viene eseguito utilizzando il metodo statico loadWithAdUnitID:request:completionHandler: nella classe GADRewardedAd. Il metodo di caricamento richiede il tuo ID unità pubblicitaria, un oggetto GADRequest e un gestore di completamento che viene richiamato quando il caricamento dell'annuncio ha esito positivo o negativo. L'oggetto GADRewardedAd caricato viene fornito come parametro nel gestore di completamento. L'esempio seguente mostra come caricare un GADRewardedAd nel corso ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[Facoltativo] Convalidare i callback di verifica lato server (SSV)

Le app che richiedono dati aggiuntivi nei callback verifica lato server devono utilizzare la funzionalità dei dati personalizzati degli annunci con premio. Qualsiasi valore stringa impostato su un oggetto dell'annuncio con premio viene trasmesso al parametro di ricerca custom_data del callback SSV. Se non viene impostato alcun valore di dati personalizzati, il valore del parametro di ricerca custom_data non sarà presente nel callback SSV.

Il seguente esempio di codice mostra come impostare dati personalizzati su un oggetto di un annuncio con premio prima di richiedere un annuncio.

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

Objective-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

Registrati per i callback

Per ricevere notifiche per gli eventi di presentazione, devi implementare il protocollo GADFullScreenContentDelegate e assegnarlo alla proprietà fullScreenContentDelegate dell'annuncio restituito. Il protocollo GADFullScreenContentDelegate gestisce i callback per presentare l'annuncio correttamente o non correttamente e quando viene ignorato. Il seguente codice mostra come implementare il protocollo e assegnarlo all'annuncio:

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd è un oggetto monouso. Ciò significa che, una volta pubblicato, l'annuncio con premio non potrà essere mostrato di nuovo. Una best practice consiste nel caricare un altro annuncio con premio nel metodo adDidDismissFullScreenContent: su GADFullScreenContentDelegate in modo che l'annuncio con premio successivo inizi a essere caricato non appena l'annuncio precedente viene ignorato.

Mostra l'annuncio e gestisci l'evento premio

Prima di mostrare un annuncio con premio agli utenti, devi offrire loro la possibilità esplicita di visualizzare i contenuti degli annunci con premio in cambio di un premio. Gli annunci con premio devono sempre essere attivati.

Quando presenti il tuo annuncio, devi fornire un oggetto GADUserDidEarnRewardHandler per gestire il premio per l'utente.

Il seguente codice rappresenta il metodo migliore per mostrare un annuncio con premio.

Swift

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

Domande frequenti

Posso avere i dettagli dei premi per GADRewardedAd?
Sì, se hai bisogno dell'importo del premio prima che venga attivato il callback userDidEarnReward, GADRewardedAd dispone di una proprietà adReward che puoi controllare per verificare l'importo del premio dopo il caricamento dell'annuncio.
È previsto un timeout per la chiamata di inizializzazione?
Dopo 10 secondi, l'SDK Google Mobile Ads richiama il metodo GADInitializationCompletionHandler fornito al metodo startWithCompletionHandler:, anche se una rete di mediazione non ha ancora completato l'inizializzazione.
Cosa succede se alcune reti di mediazione non sono pronte quando ricevo il callback di inizializzazione?

Consigliamo di caricare un annuncio all'interno di GADInitializationCompletionHandler. Anche se una rete di mediazione non è pronta, l'SDK Google Mobile Ads chiede comunque un annuncio alla rete. Pertanto, se una rete di mediazione termina l'inizializzazione dopo il timeout, può comunque gestire le richieste di annunci future in quella sessione.

Puoi continuare a eseguire il polling dello stato di inizializzazione di tutti gli adattatori durante la sessione di app chiamando GADMobileAds.initializationStatus.

Come faccio a sapere perché una particolare rete di mediazione non è pronta?

La proprietà description di un oggetto GADAdapterStatus descrive perché un adattatore non è pronto per gestire le richieste di annunci.

Il gestore del completamento userDidEarnRewardHandler viene sempre chiamato prima del metodo di delega adDidDismissFullScreenContent:?

Per gli annunci Google, tutte le chiamate userDidEarnRewardHandler avvengono prima del giorno adDidDismissFullScreenContent:. Per gli annunci pubblicati tramite mediazione, l'implementazione dell'SDK della rete pubblicitaria di terze parti determina l'ordine di callback. Per gli SDK delle reti pubblicitarie che forniscono un singolo metodo di delega con informazioni sui premi, l'adattatore di mediazione richiama userDidEarnRewardHandler prima del giorno adDidDismissFullScreenContent:.

Esempi su GitHub