Annunci con premio

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

Prerequisiti

  • Plug-in Unity 3.16.0 o versioni successive.
  • Completa Inizia. La tua app Unity deve avere già importato il plug-in Unity di Google Mobile Ads.

Creare un oggetto annuncio con premio

Gli annunci con premio vengono richiesti e mostrati da RewardedAd oggetti. Il primo passaggio necessario per mostrare un annuncio con premio consiste nel creare un'istanza di un oggetto RewardedAd richiamando il costruttore con l'ID unità pubblicitaria da utilizzare per caricare l'annuncio. come illustrato nel seguente snippet di codice:

Per facilitare l'integrazione degli annunci con l'editor di Unity, prova la nuova versione beta dei posizionamenti degli annunci.

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

Esegui sempre il test con gli annunci di prova

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

Il modo più semplice per caricare gli annunci di prova è utilizzare gli ID unità pubblicitarie di prova dedicati per gli annunci con premio per Android e iOS:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Sono stati appositamente configurati per restituire annunci di test per ogni richiesta e puoi utilizzarli nelle tue app durante la programmazione, i test e il debug. Assicurati di sostituirli 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.

Caricare un annuncio

Per caricare un annuncio con premio, chiama il metodo loadAd() dell'oggetto RewardedAd. Questo metodo richiede un'istanza di AdRequest come argomento.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

Eventi annuncio

Per personalizzare ulteriormente il comportamento del tuo annuncio, puoi agganciarlo a una serie di eventi nel ciclo di vita dell'annuncio, come caricamento, apertura, chiusura e così via. Ascolta questi eventi registrando un delegato per il gestore di eventi appropriato. L'evento più importante è OnUserEarnedReward, che viene chiamato quando l'utente riceve un premio per la visione di un video. Puoi anche implementare altri eventi degli annunci, come mostrato di seguito.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

L'evento OnUserEarnedReward fornisce argomenti evento speciali. Passa un'istanza di Reward con Type e Amount per descrivere il premio assegnato all'utente:

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

Eventi annunci disponibili

OnAdLoaded
Richiamato quando viene completato il caricamento di un annuncio.
OnAdFailedToLoad
Richiamato quando un annuncio non viene caricato. La proprietà Message dell'elemento AdErrorEventArgs fornito descrive il tipo di errore che si è verificato.
OnAdOpening
Richiamato quando viene mostrato l'annuncio, che copre la schermata del dispositivo. Se necessario, puoi mettere in pausa l'output audio o il ciclo di gioco dell'app.
OnAdFailedToShow
Richiamato quando un annuncio non viene visualizzato. La proprietà Message dell'elemento AdErrorEventArgs fornito descrive il tipo di errore che si è verificato.
OnUserEarnedReward
Richiamato quando un utente deve essere premiato per aver guardato un video. Il parametro Reward descrive il premio da presentare all'utente.
OnAdClosed
Richiamato quando l'annuncio video con premio è chiuso perché l'utente ha toccato l'icona di chiusura o utilizzando il pulsante Indietro. Se la tua app ha messo in pausa l'output audio o il ciclo di gioco, è un ottimo punto di ripristino.

Mostra l'annuncio

Prima di mostrare un annuncio con premio agli utenti, questi devono poter scegliere esplicitamente se visualizzare i contenuti degli annunci con premio in cambio di un premio. Gli annunci con premio devono sempre essere un'esperienza attivabile.

Per mostrare un annuncio con premio, controlla il metodo IsLoaded() per verificare che il caricamento sia terminato, poi chiama show(). Ecco un esempio di come procedere:

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

Utilizzo di OnAdClosed per precaricare il prossimo annuncio con premio

RewardedAd è un oggetto monouso. Ciò significa che, una volta che viene mostrato un annuncio con premio, non può essere utilizzato per caricare un altro annuncio. Per richiedere un altro annuncio con premio, devi creare un nuovo oggetto RewardedAd.

Una best practice consiste nel caricare un altro annuncio con premio nell'evento annuncio OnAdClosed in modo che il prossimo annuncio con premio inizi a caricarsi non appena quello precedente viene ignorato:

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

Caricamento di più annunci con premio in corso...

Per caricare più annunci con premio, segui i passaggi descritti nella sezione Creare un oggetto per gli annunci con premio e caricare un annuncio per ogni annuncio che intendi caricare. Lo snippet di codice riportato di seguito mostra come caricare due annunci con premio per due posizionamenti distinti.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

Esempi