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 que usam 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 a etapa Começar.
- (Somente Android) Familiaridade com as referências do 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 o ID do 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
Eles foram configurados especialmente para retornar anúncios de teste para cada solicitação, e você pode usá-los nos seus próprios apps durante a programação, o teste e a depuração. Basta substituí-lo pelo ID do seu bloco de anúncios antes de publicar seu app.
Para mais informações sobre como funcionam os anúncios de teste do SDK dos anúncios para dispositivos móveis, 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
integrar anúncios premiados 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 transmitida para um tipoAdParent
. A visualização pai é uma referênciajobject
JNI a umActivity
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);
Em vez de manter o futuro como variável, você pode verifique 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 uma RewardedAd
objeto. O método de carregamento exige a inicialização do RewardedAd
e se você tem o ID do bloco de anúncios e um objeto AdRequest
. Um
O firebase::Future
é retornado, o 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 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 de apresentação de anúncios premiados e eventos de ciclo de vida. Sua personalização
A subclasse FullScreenContentListener
pode ser registrada por meio do
método RewardedAd::SetFullScreenContentListener()
e receberá
retornos de chamada quando o anúncio for apresentado com ou sem sucesso, assim como quando
será dispensada.
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, depois que um anúncio premiado é
exibido, ele não pode ser mostrado novamente. Uma prática recomendada é carregar outro anúncio premiado
no método OnAdDismissedFullScreenContent()
da
FullScreenContentListener
para que o próximo anúncio premiado comece a carregar assim que
porque o anterior é dispensado.
Mostrar o anúncio e processar o evento de recompensa
Antes de mostrar um anúncio premiado aos usuários, é necessário apresentar uma opção explícita para que eles assistam o conteúdo do anúncio premiado em troca de uma recompensa. Os anúncios com recompensa precisam ser uma experiência ativada pelo usuário.
Ao apresentar seu anúncio, forneça um objeto UserEarnedReward
para processar
a recompensa do 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
- Existe um tempo limite para a chamada de inicialização?
- Depois de 10 segundos, o SDK dos anúncios para dispositivos móveis do Google para C++ conclui a
firebase::Future
retornada 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?
É recomendável carregar os anúncios após a 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 assim solicitarão um anúncio a essa rede. Portanto, se uma rede de mediação inicializando após o tempo limite, ele ainda poderá atender a futuras solicitações de anúncios nesse sessão.
É possível continuar a consultar 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 manutenção solicitações de anúncios. Consulte o código-fonte da exemplo de app de início rápido no GitHub para conferir um exemplo de registro do status do adaptador de mediação.
Outros recursos
Exemplo no GitHub
- Confira o código-fonte do nosso exemplo de app de início rápido no GitHub.