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
- Conclua Começar.
- (Somente Android) Familiaridade com o trabalho com referências de JNI
jobject
(consulte Dicas de JNI do Android).
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:
- Carregue um anúncio.
- Registre-se para callbacks.
- 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
.
Adicione o seguinte cabeçalho ao código C++ do app:
#include "firebase/gma/rewarded_ad.h"
Declare e instancie um objeto
RewardedAd
:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
.Inicialize a instância
RewardedAd
usando a visualização mãe convertida para um tipoAdParent
. A visualização pai é uma referênciajobject
da JNI a umActivity
do Android ou um ponteiro para umUIView
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);
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 objetoRewardedAd
. 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 porInitialize()
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
- Veja o código-fonte do nosso exemplo de app de início rápido no GitHub.