Anúncios premiados
Anúncios com recompensa são um formato de anúncio em tela cheia de grande popularidade, no qual os usuários recebem incentivos para assistir aos anúncios.
As impressões dos anúncios são opcionais: os usuários podem iniciá-las, por exemplo, para receber um bônus ou vidas extras em um jogo.
A forte motivação para os usuários faz com que esse formato de anúncio seja o mais popular e lucrativo em aplicativos gratuitos.
Aparência
Este guia mostrará como integrar anúncios premiados em aplicativos Unity. Além de exemplos de código e instruções, contém recomendações específicas aos formatos e links para recursos adicionais.
Pré-requisito
- Siga as Yandex Mobile Ads etapas de integração do plug‑in descritas em Início rápido.
- Certifique-se de possuir a última versão do Yandex Mobile Ads plug-in Unity. Se estiver usando mediação, atualize para a single build mais recente.
Implementação
Principais passos para integrar anúncios premiados:
- Crie um
RewardedAdLoader. - Carregue o anúncio, convocando o método
RewardedAdLoader.LoadAd(AdRequest)— seja viaasync/awaitou usando callbacks. - Registrar listeners para eventos em que os usuários interagem com seu anúncio.
- Mostrar o anúncio chamando o método
RewardedAd.Show(). - Liberar os recursos.
Características da integração de anúncios premiados
-
Se o carregamento falhar, não tente carregar outro anúncio. Se não houver outra opção, limite o número de tentativas de carregamento de anúncios. Isso ajudará a evitar solicitações constantes malsucedidas e problemas de conexão se houver limitações.
-
Recomendamos usar uma única instância de
RewardedAdLoaderpara todos os carregamentos de anúncios a fim de melhorar o desempenho.
Guia passo a passo
-
Crie um objeto
RewardedAdLoaderem um script C# anexo aGameObject.using UnityEngine; using YandexMobileAds; using YandexMobileAds.Base; public class YandexMobileAdsRewardedAdDemoScript : MonoBehaviour { private RewardedAdLoader rewardedAdLoader; private RewardedAd rewardedAd; private void SetupLoader() { rewardedAdLoader = new RewardedAdLoader(); // ... } } -
Carregar o anúncio usando o método
LoadAd.async/awaitCallbacksprivate async void RequestRewardedAd() { string adUnitId = "demo-rewarded-yandex"; // substitua por "R-M-XXXXXX-Y" try { rewardedAd = await rewardedAdLoader.LoadAd(new AdRequest(adUnitId)); } catch (AdLoadingException e) { // O anúncio não carregou, com {e.Message} // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado. } }private void RequestRewardedAd() { string adUnitId = "demo-rewarded-yandex"; // substitua por "R-M-XXXXXX-Y" AdRequest adRequest = new AdRequest(adUnitId); rewardedAdLoader.LoadAd( adRequest: adRequest, onLoaded: rewardedAd => { // O anúncio recompensado foi carregado com sucesso. Agora é possível lidar com isso. this.rewardedAd = rewardedAd; }, onFailed: args => { // O anúncio não carregou, com {args.Message} // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado. }); }adUnitId: Um identificador único que é emitido na interface da Yandex Advertising Network e tem este formato: R-M-XXXXXX-Y.Sugestão
Para fins de teste, você pode usar o ID do bloco de demonstração: "demo-rewarded-yandex". Antes de publicar o anúncio, você precisa substituir o ID do bloco de demonstração por um ID de bloco de anúncios real.
Você pode expandir os parâmetros de solicitação de anúncio através de
AdTargeting, passando interesses do usuário, dados contextuais da página, detalhes de localização ou outras informações. O acréscimo de mais contexto às solicitações de anúncios pode melhorar a qualidade dos anúncios consideravelmente. Para saber mais, consulte Segmentação de anúncios. -
Registrar listeners para eventos em que os usuários interagem com seu anúncio.
using System; // ... rewardedAd.OnAdClicked += HandleAdClicked; rewardedAd.OnAdShown += HandleAdShown; rewardedAd.OnAdFailedToShow += HandleAdFailedToShow; rewardedAd.OnAdImpression += HandleImpression; rewardedAd.OnAdDismissed += HandleAdDismissed; rewardedAd.OnRewarded += HandleRewarded; // ... public void HandleAdClicked(object sender, EventArgs args) { // Convocado quando há o registro de clique em um anúncio recompensado. } public void HandleAdShown(object sender, EventArgs args) { // Convocado quando um anúncio é exibido. } public void HandleAdFailedToShow(object sender, AdFailureEventArgs args) { // Convocado quando um anúncio deixa de ser exibido. } public void HandleAdDismissed(object sender, EventArgs args) { // Convocado quando um anúncio é descartado. } public void HandleImpression(object sender, ImpressionData impressionData) { // Convocado quando há o registro de impressão de um anúncio. } public void HandleRewarded(object sender, Reward args) { // Convocado quando o usuário pode ser recompensado com {args.type} e {args.amount}. } -
Mostre o anúncio chamando
Show()no objetoRewardedAd.private void ShowRewardedAd() { if (rewardedAd != null) { rewardedAd.Show(); } } -
Chame
Destroy()em anúncios que são exibidos e elimine links que não são mais usados na tela atual.Isso libera os recursos e evita vazamentos de memória.
public void DestroyRewardedAd() { if (rewardedAd != null) { rewardedAd.Destroy(); rewardedAd = null; } }
Teste da integração de anúncios premiados
Uso de blocos de anúncios de demonstração para teste de anúncios
Use anúncios-teste para verificar a integração dos anúncios com recompensa e o aplicativo em si. Para garantir que os anúncios-teste sejam retornados para cada solicitação de anúncio, é possível usar uma ID especial de posicionamento de anúncios demonstrativa.
adUnitId de demonstração: demo-rewarded-yandex.
Importante
Antes de publicar seu app na loja, certifique-se de substituir a ID de posicionamento demonstrativa pela ID real obtida na interface Yandex Advertising Network.
Para a lista de todas as IDs de posicionamento de anúncio demonstrativas disponíveis, consulte Blocos de anúncio demonstrativos para testes.
Teste da integração de anúncios
É possível verificar se os seus anúncios com recompensa estão integrados corretamente usando o analisador embutido do SDK. Aparecerá no log um relatório detalhado com os resultados do teste.
Para visualizar o relatório, faça uma busca pela palavra-chave "YandexAds" no Logcat, uma ferramenta para depuração de aplicativos Android.
adb logcat -v brief '*:S YandexAds'
Se a integração for bem-sucedida, a seguinte mensagem será retornada:
adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type rewarded was integrated successfully
Se houver algum problema na integração dos anúncios com recompensa, você receberá um relatório detalhado do problema com soluções recomendadas.
Uso de blocos de anúncios de demonstração para teste de anúncios
Use anúncios-teste para verificar a integração dos anúncios e o aplicativo em si. Para garantir que os anúncios-teste sejam retornados para cada solicitação de anúncio, é possível usar uma ID especial de posicionamento de anúncios demonstrativa.
adUnitId de demonstração: demo-rewarded-yandex.
Importante
Antes de publicar seu app na loja, certifique-se de substituir a ID de posicionamento demonstrativa pela ID real obtida na interface Yandex Advertising Network.
Para a lista de todas as IDs de posicionamento de anúncio demonstrativas disponíveis, consulte Blocos de anúncio demonstrativos para testes.
Teste da integração de anúncios
Você pode testar sua integração de anúncios usando a ferramenta Console nativa.
Para ver logs detalhados, convoque o método enableLogging da classe YandexAds.
YandexAds.enableLogging()
Para ver os logs do SDK, acesse a ferramenta Console e defina Subsystem = com.mobile.ads.ads.sdk. Você também pode filtrar logs por categoria e nível de erro.
Se você estiver tendo problemas para integrar anúncios, receberá um relatório detalhado sobre os problemas e recomendações de como corrigi-los.
Dicas
Pré-carregamento de anúncios
Carregar um anúncio pode levar vários segundos, dependendo do número de redes de anúncios conectadas na mediação móvel e da velocidade da Internet do usuário. Recomendamos pré-carregar os anúncios antes de exibi-los.
Você pode chamar o carregamento de anúncios no método Awake para gameObject. Você precisa preservar o objeto entre as cenas usando a chamada DontDestroyOnLoad(). Isso garante que o anúncio carregado não seja excluído junto com o gameObject na mudança de cena.
private void Awake()
{
SetupLoader();
RequestRewardedAd();
DontDestroyOnLoad(gameObject);
}
Além disso, você pode vincular o carregamento do próximo anúncio às funções de callback executadas quando a exibição do anúncio é concluída ou falha. Por exemplo:
public void HandleAdFailedToShow(object sender, EventArgs args)
{
// Convocado quando um anúncio deixa de ser exibido.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
public void HandleAdDismissed(object sender, EventArgs args)
{
// Convocado quando um anúncio é descartado.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
Se você armazenar em cache anúncios em muitas telas que provavelmente não serão exibidas, a eficácia do anúncio pode diminuir. Por exemplo, se os usuários completam 2–3 níveis de jogo por sessão, você não deve armazenar em cache anúncios para 6–7 telas. Caso contrário, a visualizabilidade do seu anúncio pode diminuir, e o sistema de publicidade pode despriorizar seu aplicativo.
Para garantir que o cache beneficie seu app, monitore as métricas "Taxa de exibição" ou "Taxa de visualização" na interface Yandex Advertising Network. Se estiver abaixo de 20%, você provavelmente deve revisar seu algoritmo de cache. Quanto maior o percentual de impressões, melhor.
Exemplo de código completo
using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;
public class YandexMobileAdsRewardedAdDemoScript : MonoBehaviour
{
private RewardedAdLoader rewardedAdLoader;
private RewardedAd rewardedAd;
[SerializeField] private Button button;
private void Awake()
{
SetupLoader();
RequestRewardedAd();
DontDestroyOnLoad(gameObject);
button = this.GetComponent<Button>();
button.onClick.AddListener(ShowRewardedAd);
}
private void SetupLoader()
{
rewardedAdLoader = new RewardedAdLoader();
}
private async void RequestRewardedAd()
{
string adUnitId = "demo-rewarded-yandex"; // substitua por "R-M-XXXXXX-Y"
try
{
rewardedAd = await rewardedAdLoader.LoadAd(new AdRequest(adUnitId));
// Adicionar manipuladores de eventos para ações do anúncio
rewardedAd.OnAdClicked += HandleAdClicked;
rewardedAd.OnAdShown += HandleAdShown;
rewardedAd.OnAdFailedToShow += HandleAdFailedToShow;
rewardedAd.OnAdImpression += HandleImpression;
rewardedAd.OnAdDismissed += HandleAdDismissed;
rewardedAd.OnRewarded += HandleRewarded;
}
catch (AdLoadingException e)
{
// O anúncio não carregou, com {e.Message}
// Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
}
}
private void ShowRewardedAd()
{
if (rewardedAd != null)
{
rewardedAd.Show();
}
}
public void HandleAdDismissed(object sender, EventArgs args)
{
// Convocado quando um anúncio é descartado.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
{
// Convocado quando o anúncio recompensado deixa de ser exibido.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
public void HandleAdClicked(object sender, EventArgs args)
{
// Convocado quando há o registro de clique em um anúncio recompensado.
}
public void HandleAdShown(object sender, EventArgs args)
{
// Convocado quando um anúncio é exibido.
}
public void HandleImpression(object sender, ImpressionData impressionData)
{
// Convocado quando há o registro de impressão de um anúncio.
}
public void HandleRewarded(object sender, Reward args)
{
// Convocado quando o usuário pode ser recompensado com {args.type} e {args.amount}.
}
public void DestroyRewardedAd()
{
if (rewardedAd != null){
rewardedAd.Destroy();
rewardedAd = null;
}
}
}
using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;
public class YandexMobileAdsRewardedAdDemoScript : MonoBehaviour
{
private RewardedAdLoader rewardedAdLoader;
private RewardedAd rewardedAd;
[SerializeField] private Button button;
private void Awake()
{
SetupLoader();
RequestRewardedAd();
DontDestroyOnLoad(gameObject);
button = this.GetComponent<Button>();
button.onClick.AddListener(ShowRewardedAd);
}
private void SetupLoader()
{
rewardedAdLoader = new RewardedAdLoader();
}
private void RequestRewardedAd()
{
string adUnitId = "demo-rewarded-yandex"; // substitua por "R-M-XXXXXX-Y"
AdRequest adRequest = new AdRequest(adUnitId);
rewardedAdLoader.LoadAd(
adRequest: adRequest,
onLoaded: HandleAdLoaded,
onFailed: HandleAdFailedToLoad);
}
private void ShowRewardedAd()
{
if (rewardedAd != null)
{
rewardedAd.Show();
}
}
public void HandleAdLoaded(RewardedAd rewardedAd)
{
// O anúncio foi carregado com sucesso. Agora é possível lidar com isso.
this.rewardedAd = rewardedAd;
// Adicionar manipuladores de eventos para ações do anúncio
this.rewardedAd.OnAdClicked += HandleAdClicked;
this.rewardedAd.OnAdShown += HandleAdShown;
this.rewardedAd.OnAdFailedToShow += HandleAdFailedToShow;
this.rewardedAd.OnAdImpression += HandleImpression;
this.rewardedAd.OnAdDismissed += HandleAdDismissed;
this.rewardedAd.OnRewarded += HandleRewarded;
}
public void HandleAdFailedToLoad(AdFailedToLoadEventArgs args)
{
// O anúncio não carregou, com {args.Message}
// Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
}
public void HandleAdDismissed(object sender, EventArgs args)
{
// Convocado quando um anúncio é descartado.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
{
// Convocado quando o anúncio recompensado deixa de ser exibido.
// Liberar recursos após um anúncio ser descartado.
DestroyRewardedAd();
// Agora você pode pré-carregar o próximo anúncio recompensado.
RequestRewardedAd();
}
public void HandleAdClicked(object sender, EventArgs args)
{
// Convocado quando há o registro de clique em um anúncio recompensado.
}
public void HandleAdShown(object sender, EventArgs args)
{
// Convocado quando um anúncio é exibido.
}
public void HandleImpression(object sender, ImpressionData impressionData)
{
// Convocado quando há o registro de impressão de um anúncio.
}
public void HandleRewarded(object sender, Reward args)
{
// Convocado quando o usuário pode ser recompensado com {args.type} e {args.amount}.
}
public void DestroyRewardedAd()
{
if (rewardedAd != null)
{
rewardedAd.Destroy();
rewardedAd = null;
}
}
}
Recursos adicionais
- Link para GitHub.