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