Anúncios premiados

Os anúncios premiados permitem que os usuários interajam com eles em troca de recompensas no app. Este guia mostra como integrar anúncios premiados a apps Android e iOS usando o SDK dos anúncios para dispositivos móveis do Google para C++.

Leia algumas histórias de sucesso de clientes: estudo de caso 1, estudo de caso 2.

Pré-requisitos

Sempre faça testes com anúncios de teste

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

A maneira mais fácil de carregar anúncios de teste é usar nosso ID de bloco de anúncios de teste dedicado para anúncios premiados, que varia de acordo com a plataforma do dispositivo:

  • Android: ca-app-pub-3940256099942544/5224354917
  • iOS: ca-app-pub-3940256099942544/1712485313

Elas foram configuradas especialmente para retornar anúncios de teste para cada solicitação. Você pode usá-las nos seus próprios apps durante a programação, o teste e a depuração. Apenas lembre-se de substituí-lo pelo seu próprio ID do bloco de anúncios antes de publicar o aplicativo.

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

Implementação

As principais etapas para integrar os anúncios premiados são:

  1. Carregue um anúncio.
  2. Registre-se para callbacks.
  3. Exiba o anúncio e processe o evento de recompensa.

Configurar um RewardedAd

Os anúncios premiados são exibidos em objetos RewardedAd. Portanto, a primeira etapa para integrá-los ao seu app é criar e inicializar uma instância de RewardedAd.

  1. Adicione o seguinte cabeçalho ao código C++ do app:

     #include "firebase/gma/rewarded_ad.h"
    

  2. Declare e instancie um objeto RewardedAd:

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();
    
    .

  3. Inicialize a instância RewardedAd usando a visualização mãe convertida para um tipo AdParent. A visualização pai é uma referência jobject da JNI a um Activity do Android ou um ponteiro para um UIView do iOS.

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
    
  4. Como alternativa para reter o futuro como uma variável, você pode verificar periodicamente o status da operação de inicialização invocando InitializeLastResult() no objeto RewardedAd. Isso pode ser útil para acompanhar o processo de inicialização no loop de jogo global.

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = rewarded_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

Para mais informações sobre como trabalhar com firebase::Future, consulte Usar Futures para monitorar o status de conclusão das chamadas de método.

Carregar um anúncio

É possível carregar um anúncio usando o método LoadAd() em um objeto RewardedAd. O método de carregamento exige que você inicialize o objeto RewardedAd e que tenha o ID do bloco de anúncios e um objeto AdRequest. É retornado um firebase::Future que pode ser usado para monitorar o estado e o resultado da operação de carregamento.

O código a seguir mostra como carregar um anúncio depois que o RewardedAd for inicializado com sucesso:

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);

Registrar-se para callbacks

Estenda a classe FullScreenContentListener para receber notificações sobre a apresentação do anúncio premiado e os eventos de ciclo de vida. Sua subclasse FullScreenContentListener personalizada pode ser registrada com o método RewardedAd::SetFullScreenContentListener() e vai receber callbacks quando o anúncio for apresentado com sucesso ou não, bem como quando for dispensado.

O código a seguir mostra como estender a classe e atribuí-la ao anúncio:

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* example_full_screen_content_listener =
    new ExampleFullScreenContentListener();
  rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);

RewardedAd é um objeto de uso único. Isso significa que, uma vez que um anúncio premiado é exibido, não pode ser mostrado novamente. Uma prática recomendada é carregar outro anúncio premiado no método OnAdDismissedFullScreenContent() da sua FullScreenContentListener para que o próximo anúncio premiado comece a carregar assim que o anterior for dispensado.

Exiba o anúncio e processe o evento de recompensa.

Antes de exibir um anúncio premiado, é necessário apresentar ao usuário uma opção explícita de visualizar o conteúdo do anúncio premiado em troca de uma recompensa. Os anúncios premiados precisam ser sempre uma experiência opcional.

Ao apresentar seu anúncio, você precisa fornecer um objeto UserEarnedReward para processar a recompensa para o usuário.

O código abaixo mostra como exibir um RewardedAd:

// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
    public firebase::gma::UserEarnedRewardListener {
 public:
   ExampleUserEarnedRewardListener() { }

  void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
    // Reward the user!
  }
};

ExampleUserEarnedRewardListener* user_earned_reward_listener =
  new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);

Perguntas frequentes

Há um tempo limite para a chamada de inicialização?
Após 10 segundos, o SDK dos anúncios para dispositivos móveis do Google para C++ completa o firebase::Future retornado por Initialize() mesmo que uma rede de mediação ainda não tenha concluído a inicialização.
E se algumas redes de mediação não estiverem prontas quando eu receber o callback de inicialização?

A prática recomendada é carregar anúncios após a conclusão da inicialização do SDK. Mesmo que uma rede de mediação não esteja pronta, o SDK dos anúncios para dispositivos móveis do Google para C++ ainda solicitará um anúncio a essa rede. Portanto, se uma rede de mediação terminar a inicialização após o tempo limite, ela ainda poderá atender a futuras solicitações de anúncios nessa sessão.

Você pode continuar pesquisando o status de inicialização de todos os adaptadores durante a sessão do app chamando GetInitializationStatus().

Como faço para descobrir por que uma determinada rede de mediação não está pronta?

AdapterStatus.description() descreve por que um adaptador não está pronto para atender solicitações de anúncios. Consulte o código-fonte do nosso exemplo de app de início rápido no GitHub para conferir um exemplo do registro do status do adaptador de mediação.

Outros recursos

Exemplo no GitHub