Anúncios em vídeo com incentivo para um app do Unity

O Audience Network permite que você monetize seus aplicativos para Android e iOS usando os anúncios do Facebook. Os anúncios em vídeo com incentivo são uma experiência em tela cheia na qual os usuários optam por visualizar um anúncio em vídeo em troca de algo de valor, como moeda virtual, itens no app, conteúdo exclusivo e muito mais. A experiência do anúncio é um vídeo curto e um cartão ao final com uma chamada para realizar uma ação. Após a visualização completa do vídeo, você receberá um retorno de chamada para dar a recompensa sugerida ao usuário.

Certifique-se de ter concluído os guias de Introdução do Audience Network e de Introdução do Unity antes de continuar.

Etapas para anúncios em vídeo com incentivo

Etapa 1. Inicializar anúncios em vídeo com incentivo

Etapa 2. Adicionar eventos de retorno de chamada

Etapa 3. Carregar um anúncio

Etapa 4. Exibir o anúncio

Etapa 1. Inicializar anúncios em vídeo com incentivo

A primeira etapa para exibir um anúncio em vídeo com incentivo é criar um objeto RewardedVideoAd em um script C# anexado a um GameObject.

...
using AudienceNetwork;
...

public class RewardedVideoAdTest : MonoBehaviour
{
    public void LoadRewardedVideo()
    {
        // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings).
        // Use different ID for each ad placement in your app.
        this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID");

        this.rewardedVideoAd.Register(this.gameObject);

        // Set delegates to get notified on changes or when the user interacts with the ad.
        this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
            Debug.Log("RewardedVideo ad loaded.");
            this.isLoaded = true;
        });
        this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
            Debug.Log("RewardedVideo ad failed to load with error: " + error);
        });
        this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
            Debug.Log("RewardedVideo ad logged impression.");
        });
        this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
            Debug.Log("RewardedVideo ad clicked.");
        });

        this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
            Debug.Log("Rewarded video ad did close.");
            if (this.rewardedVideoAd != null) {
                this.rewardedVideoAd.Dispose();
            }
        });

        // Initiate the request to load the ad.
        this.rewardedVideoAd.LoadAd();
    }
}

O construtor de um RewardedVideoAd tem os seguintes parâmetros:

  • placementId: a identificação do posicionamento do Audience Network para essa unidade de anúncio em vídeo com incentivo.

Etapa 2. Adicionar eventos de retorno de chamada

Em seguida, você pode implementar alguns retornos de chamada para assinar os eventos do ciclo de vida do anúncio. Acompanhe esses eventos registrando um delegado para o evento, como exibido no exemplo abaixo:

...
// Set delegates to get notified on changes or when the user interacts with the ad.
this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
    Debug.Log("RewardedVideo ad loaded.");
    this.isLoaded = true;
});
this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
    Debug.Log("RewardedVideo ad failed to load with error: " + error);
});
this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
    Debug.Log("RewardedVideo ad logged impression.");
});
this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
    Debug.Log("RewardedVideo ad clicked.");
});

this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
    Debug.Log("Rewarded video ad did close.");
    if (this.rewardedVideoAd != null) {
        this.rewardedVideoAd.Dispose();
    }
});
...

Retorno de chamada para atividade de anúncio destruída no Unity Android

Este documento só é relevante para Android.

No momento, os jogos do Unity para Android são compatíveis somente com o Unity principal Activity para ter launchMode de singleTask. Consulte o Documento do Unity para o manifesto Android e o Documento do Android para atividade.

Como usamos Activity para mostrar anúncios Interstitial e Rewarded Video, a atividade de anúncios pode ser destruída sem ser fechada corretamente quando um usuário coloca um aplicativo em segundo plano e, depois, o abre novamente usando o ícone sem usar a opção de trocar de aplicativo. Você pode usar os retornos de chamada a seguir e verificar se o anúncio foi fechado pelo usuário:

Para intersticiais:

this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* *Relevante somente para Android. *Este retorno de chamada só será acionado se a atividade intersticial foi * destruída sem ser fechada adequadamente. Isso pode acontecer se um * aplicativo com launchMode:singleTask (como um jogo do Unity) ficar em * segundo plano e, depois, for aberto novamente quando o usuário tocar no ícone. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif 

Para vídeos com incentivo:

this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* *Relevante somente para Android. *Este retorno de chamada só será acionado se a atividade intersticial foi * destruída sem ser fechada adequadamente. Isso pode acontecer se um * aplicativo com launchMode:singleTask (como um jogo do Unity) ficar em * segundo plano e, depois, for aberto novamente quando o usuário tocar no ícone. */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif 

Etapa 3. Carregar um anúncio

Assim que o RewardedVideoAd for instanciado, carregue o anúncio. Faça isso chamando o método loadAd.

No exemplo acima, veja como iniciar o carregamento do anúncio:

...
this.rewardedVideoAd.LoadAd();
...

Etapa 4. Exibir o anúncio

Depois de fazer o carregamento, chame o método Show para renderizar o anúncio em vídeo com incentivo na tela. Você pode criar uma função para ShowRewardedVideo e chamá-la na hora de exibir o anúncio:

public void ShowRewardedVideo()
{
    if (this.isLoaded) {
        this.rewardedVideoAd.Show();
        this.isLoaded = false;
    } else {
        Debug.Log("Ad not loaded. Click load to request an ad.");
    }
}

Validação de recompensa do lado do servidor

Isto é opcional! Você não precisa implementar a validação de recompensa do lado do servidor para poder usar os anúncios em vídeo com incentivo. Isso só é exigido se você decidir validar as recompensas em seu servidor para aprimorar a segurança ao introduzir uma etapa de validação nele. Forneça o ponto de extremidade do seu publisher ao representante do Facebook para ativar este recurso.

Visão geral

Se você gerencia o lado do servidor das recompensas para os usuários, o Facebook oferece uma solução para executar isso de forma segura usando uma técnica de validação. Nosso servidor se comunicará com um ponto de extremidade https específico para validar cada impressão de anúncio e validar se uma recompensa deve ser concedida.

  1. O SDK do Audience Network solicita um anúncio em vídeo com incentivo usando os seguintes parâmetros:
    • placementId: a identificação do posicionamento do Audience Network.
    • RewardData: um objeto RewardData consiste em UserId que representa o número de identificação do usuário e Currency que indica a recompensa real.
  2. Ao término do vídeo, o servidor do Facebook repassará esses valores para seu ponto de extremidade especificado, junto com a chave secreta do aplicativo e um ID de transação exclusivo.
  3. Ao recebê-los, o servidor valida a solicitação e responde da seguinte maneira:
    • 200 response: a solicitação é válida, e a recompensa deve ser entregue.
    • Non 200 response: a solicitação não é válida, e a recompensa não deve ser entregue.
  4. Quando a reprodução do vídeo é concluída, o cartão final é apresentado, e um dos seguintes eventos é disparado.
    • RewardedVideoAdDidSucceed: será acionado somente quando uma resposta 200 for retornada durante a etapa 3.
    • RewardedVideoAdDidFail: será acionado quando uma resposta diferente do código 200 for retornada durante a etapa 3.

Um exemplo de URL que chegará ao ponto de extremidade do publisher proveniente do servidor do Facebook: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

O fluxo de trabalho terá esta aparência:

Implementação

Após inicializar o objeto de vídeo com incentivo, você precisará colocar um ID de usuário e o valor da recompensa nos dados do anúncio com incentivo antes de carregar um anúncio. Isso pode ser feito com a classe RewardData. O ID do usuário e o valor de recompensa são cadeias de caracteres. Por exemplo:

public class RewardedVideoAdTest : MonoBehaviour
{
  ...
  private bool isLoaded;
  private RewardedVideoAd rewardedVideoAd;

  public void LoadRewardedVideo()

    //Set the rewarded ad data
    RewardData rewardData = new RewardData();
    rewardData.UserId = "USER_ID";
    rewardData.Currency = "REWARD_ID";

    // Instantiate RewardedVideoAd with reward data
    this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData);
    this.rewardedVideoAd.Register(this.gameObject);

    // Set delegates to get notified on changes or when the user interacts with the ad.
    this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
        Debug.Log("RewardedVideo ad loaded.");
        this.isLoaded = true;
    });
    this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
        Debug.Log("RewardedVideo ad failed to load with error: " + error);
    });
    this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
        Debug.Log("RewardedVideo ad logged impression.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
        Debug.Log("RewardedVideo ad clicked.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
        Debug.Log("Rewarded video ad did close.");
        if (this.rewardedVideoAd != null) {
            this.rewardedVideoAd.Dispose();
        }
    });

    // For S2S validation you need to register the following two callback
    this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() {
        Debug.Log("Rewarded video ad validated by server");
    });
    this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() {
        Debug.Log("Rewarded video ad not validated, or no response from server");
    });       

    this.rewardedVideoAd.loadAd();
  }
  ...
}

Além do retorno de chamada para RewardedVideoAd, implemente retornos de chamada para RewardedVideoAdDidSucceed e RewardedVideoAdDidFail se quiser que o aplicativo seja notificado sobre a validação da recompensa.

Depois que o anúncio for carregado, será possível renderizá-lo com o método Show como um RewardedVideoAd normal.

Atenção – os retornos de chamadas de validação do servidor podem ocorrer após o cartão final ter sido descartado pelo usuário. Só desloque o objeto de vídeo com recompensa após um dos retornos de chamada.

Próximas etapas

Siga nossos guias para integrar diferentes formatos de anúncio no seu aplicativo Unity:

Quando estiver pronto para lançar seu aplicativo e monetizar, envie o aplicativo para análise após garantir que ele cumpre as Políticas do Audience Network e os Padrões da Comunidade do Facebook.