Annunci con premio

Seleziona la piattaforma: Android iOS Unity Flutter

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

Prerequisiti

Esegui sempre i test con gli annunci di prova

Quando crei ed esegui test sulle tue app, assicurati di utilizzare annunci di prova anziché annunci di produzione live. In caso contrario, il tuo account potrebbe essere sospeso.

Il modo più semplice per caricare gli annunci di test è utilizzare il nostro ID unità pubblicitaria di test 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 codifica, i test e il debug. Assicurati solo di sostituirlo con il tuo ID unità pubblicitaria prima di pubblicare l'app.

Per saperne di più sul funzionamento degli annunci di test dell'SDK Mobile Ads, consulta Annunci di test.

Implementazione

I passaggi principali per integrare gli annunci con premio sono i seguenti:

  • Caricare un annuncio
  • [Facoltativo] Convalida dei callback SSV
  • Registrarsi per i callback
  • Mostra l'annuncio e gestisci l'evento con premio

Caricare un annuncio

Il caricamento di un annuncio viene eseguito utilizzando il metodo load(adUnitID:request) nella classe GADRewardedAd.

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: RewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await RewardedAd.load(
        with: "ca-app-pub-3940256099942544/1712485313", request: Request())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest request]
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
        return;
      }
      self.rewardedAd = ad;
      self.rewardedAd.fullScreenContentDelegate = self;
    }];

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

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

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

Swift

do {
  rewardedAd = try await RewardedAd.load(
    // Replace this ad unit ID with your own ad unit ID.
    with: "ca-app-pub-3940256099942544/1712485313", request: Request())
  let options = ServerSideVerificationOptions()
  options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedAd?.serverSideVerificationOptions = options
} catch {
  print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                        request:[GADRequest request]
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

Registrarsi per i callback

Per ricevere notifiche per gli eventi di presentazione, devi assegnare la proprietà GADFullScreenContentDelegate to thefullScreenContentDelegate` dell'annuncio restituito:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

Il protocollo GADFullScreenContentDelegate gestisce i callback per quando l'annuncio viene visualizzato correttamente o meno e quando viene chiuso. Il seguente codice mostra come implementare il protocollo:

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
  // Clear the rewarded ad.
  rewardedAd = nil
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called with error: \(error.localizedDescription).")
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the rewarded ad.
  self.rewardedAd = nil;
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}

Mostra l'annuncio e gestisci l'evento con premio

Prima di mostrare agli utenti un annuncio con premio, devi presentare all'utente una scelta esplicita per visualizzare i contenuti dell'annuncio con premio in cambio di un premio. Gli annunci con premio devono sempre essere un'esperienza basata su attivazione.

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

Il seguente codice mostra il metodo migliore per visualizzare un annuncio con premio:

Swift

rewardedAd.present(from: self) {
  let reward = rewardedAd.adReward
  print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")

  // TODO: Reward the user.
}

SwiftUI

Ascolta gli eventi dell'interfaccia utente nella visualizzazione per determinare quando mostrare l'annuncio.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

Presenta l'annuncio con premio dal modello di visualizzazione:

func showAd() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  rewardedAd.present(from: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

[self.rewardedAd presentFromRootViewController:self
                      userDidEarnRewardHandler:^{
                        GADAdReward *reward = self.rewardedAd.adReward;
                        NSString *rewardMessage = [NSString
                            stringWithFormat:@"Reward received with currency %@ , amount %lf",
                                             reward.type, [reward.amount doubleValue]];
                        NSLog(@"%@", rewardMessage);

                        // TODO: Reward the user.
                      }];

Domande frequenti

Posso ottenere i dettagli della ricompensa per GADRewardedAd?
Sì, se hai bisogno dell'importo del premio prima che venga attivata la userDidEarnRewardrichiamata GADRewardedAd, adReward ha una proprietà che puoi controllare per verificare l'importo del premio dopo il caricamento dell'annuncio.
Esiste un timeout per la chiamata di inizializzazione?
Dopo 10 secondi, l'SDK Google Mobile Ads richiama il 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?

Ti 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 a quella rete. Pertanto, se una rete di mediazione termina l'inizializzazione dopo il timeout, può comunque gestire le richieste di annunci future nella sessione.

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

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

La proprietà description di un oggetto GADAdapterStatus descrive il motivo per cui un adattatore non è pronto a gestire le richieste di annunci.

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

Per gli annunci Google, tutte le chiamate userDidEarnRewardHandler si verificano prima di 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 delegato con informazioni sui premi, l'adattatore di mediazione richiama userDidEarnRewardHandler prima di adDidDismissFullScreenContent:.

Esempi su GitHub

Visualizza gli esempi completi di annunci con premio nella tua lingua preferita:

Passaggi successivi

Scopri di più sulla privacy degli utenti.