Anúncios premiados

Os anúncios premiados são aqueles com que os usuários podem interagir em troca de recompensas no app. Este guia mostra como integrar os anúncios premiados da AdMob a um app Unity. Leia algumas histórias de sucesso dos clientes: estudo de caso 1 e estudo de caso 2.

Prerequisites

  • Plug-in do Unity 3.16.0 ou mais recente.
  • Concluir Primeiros passos. Seu app Unity já precisa ter o plug-in Unity dos anúncios para dispositivos móveis do Google importado.

Criar um objeto de anúncio premiado

Os anúncios premiados são solicitados e exibidos por objetos RewardedAd. A primeira etapa necessária para exibir um anúncio premiado é instanciar um objeto RewardedAd invocando o construtor com o ID do bloco de anúncios a ser usado para carregar o anúncio. Isso é demonstrado no snippet de código a seguir:

Para facilitar a integração de anúncios usando o Editor do Unity, teste a nova versão Beta dos canais de anúncios.

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

Sempre usar anúncios de teste

Ao criar e testar seus apps, use anúncios de teste em vez de anúncios de produção publicados. Sua conta poderá ser suspensa se isso não for feito.

A maneira mais fácil de carregar anúncios de teste é usar nossos IDs de bloco de anúncios de teste dedicados para anúncios premiados no Android e iOS:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Eles foram configurados especialmente para retornar anúncios de teste para todas as solicitações, e você pode usá-los nos seus próprios apps durante a programação, o teste e a depuração. Basta substituí-los pelo seu próprio ID de bloco de anúncios antes de publicar o aplicativo.

Para ver mais informações sobre como os anúncios de teste do SDK de anúncios para dispositivos móveis funcionam, consulte Anúncios de teste.

Carregar um anúncio

Para carregar um anúncio premiado, chame o método loadAd() do objeto RewardedAd. Esse método requer uma instância de AdRequest como argumento.

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

Eventos de anúncio

Para personalizar ainda mais o comportamento do seu anúncio, é possível acompanhar vários eventos no ciclo de vida do anúncio: ao carregar, abrir, fechar e assim por diante. Detecte esses eventos registrando um delegado para o manipulador de eventos apropriado. O evento mais importante é o OnUserEarnedReward, que é chamado quando o usuário é premiado por assistir a um vídeo. Você também pode implementar outros eventos de anúncio, conforme mostrado abaixo.

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

O evento OnUserEarnedReward fornece argumentos de evento especiais. Ele transmite uma instância de Reward com um Type e Amount descrevendo o prêmio concedido ao usuário:

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

Eventos de anúncio disponíveis

OnAdLoaded
Invocado quando um anúncio termina de carregar.
OnAdFailedToLoad
Invocado quando um anúncio não é carregado. A propriedade Message do AdErrorEventArgs fornecido descreve o tipo de falha que ocorreu.
OnAdOpening
Invocado quando o anúncio é exibido, cobrindo a tela do dispositivo. Esse é um bom lugar para pausar a saída de áudio ou o loop de jogo do seu app, se necessário.
OnAdFailedToShow
Invocado quando um anúncio não é exibido. A propriedade Message do AdErrorEventArgs fornecido descreve o tipo de falha que ocorreu.
OnUserEarnedReward
Invocado quando um usuário precisa ser recompensado por assistir a um vídeo. O parâmetro Reward descreve a recompensa que será apresentada ao usuário.
OnAdClosed
Invocado quando o anúncio em vídeo premiado é fechado devido ao usuário tocar no ícone "Fechar" ou usar o botão "Voltar". Se o app pausou a saída de áudio ou o loop de jogo, esse é um ótimo lugar para retomá-lo.

Exibir o anúncio

Antes de exibir um anúncio premiado aos usuários, eles precisam ver uma opção explícita para ver o conteúdo do anúncio premiado em troca de uma recompensa. Os anúncios premiados precisam ser sempre uma ativação.

Para exibir um anúncio premiado, consulte o método IsLoaded() para verificar se o carregamento foi concluído e chame show(). Veja como fazer isso a seguir:

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

Como usar OnAdClosed para pré-carregar o próximo anúncio premiado

RewardedAd é um objeto de uso único. Isso significa que, depois que um anúncio premiado é exibido, o objeto não pode ser usado para carregar outro anúncio. Para solicitar outro anúncio premiado, você precisa criar um novo objeto RewardedAd.

Uma prática recomendada é carregar outro anúncio premiado no evento de anúncios OnAdClosed para que o próximo anúncio comece a ser carregado assim que o anterior for dispensado:

...
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();
    }
}

Carregar vários anúncios premiados

Para carregar vários anúncios premiados, siga as etapas descritas nas seções Criar um objeto de anúncio premiado e carregar um anúncio para cada anúncio que você pretende carregar. O snippet de código abaixo demonstra como carregar dois anúncios premiados em duas posições de anúncio distintas.

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

Amostras