Os anúncios premiados são aqueles com que os usuários têm a opção de interagir em troca de prêmios no aplicativo. Neste guia, mostramos como integrar anúncios premiados do AdMoba um app iOS. Leia algumas histórias de sucesso de clientes: estudo de caso 1, estudo de caso 2.
Pré-requisitos
- SDK dos anúncios para dispositivos móveis do Google 8.0.0 ou superior.
- Concluir o Guia de primeiros passos.
Sempre testar 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 no iOS:
ca-app-pub-3940256099942544/1712485313
Ele foi especialmente configurado para retornar anúncios de teste para cada solicitação, e você está livre para usá-lo em seus próprios aplicativos durante a codificação, teste e depuração. Basta substituí-lo por seu próprio código de bloco de anúncios antes de publicar seu aplicativo.
Para mais informações sobre como os anúncios de teste do SDK de anúncios para dispositivos móveis funcionam, consulte Testar anúncios.
Implementação
As principais etapas para integrar anúncios intersticiais premiados são as seguintes:
- Carregar um anúncio
- [Opcional] Validar callbacks de SSV
- Registrar para callbacks
- Exibir o anúncio e gerenciar o evento de recompensa
Carregar um anúncio
É possível carregar um anúncio usando o método estático loadWithAdUnitID:request:completionHandler:
na classe GADRewardedAd
. O método de carregamento exige o ID do bloco de anúncios, um objeto GADRequest
e um gerenciador de conclusão que é chamado quando o carregamento do anúncio é concluído ou falha. O objeto GADRewardedAd
carregado é fornecido como um parâmetro no gerenciador de conclusão. O exemplo abaixo mostra como carregar um GADRewardedAd
na
classe ViewController
.
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); }]; }
[Opcional] Validar callbacks de verificação do servidor (SSV)
Apps que exigem dados extras nos callbacks de verificação do servidor precisam usar o recurso de dados personalizados dos anúncios premiados. Qualquer valor de string definido em um objeto de anúncio premiado é transmitido para o parâmetro de consulta custom_data
do callback da SSV. Se nenhum valor de dados personalizado for definido, o valor do parâmetro de consulta custom_data
não estará presente no callback da SSV.
O exemplo de código a seguir demonstra como definir dados personalizados em um objeto de anúncio premiado antes de solicitar um anúncio.
Swift
GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error != error { rewardedInterstitialAd = ad let options = GADServerSideVerificationOptions() options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING" rewardedInterstitialAd.serverSideVerificationOptions = options }
Objective-C
GADRequest *request = [GADRequest request]; [GADRewardedInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) { if (error) { // Handle Error return; } self.rewardedInterstitialAd = ad; GADServerSideVerificationOptions *options = [[GADServerSideVerificationOptions alloc] init]; options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING"; ad.serverSideVerificationOptions = options; }];
Registrar para callbacks
Para receber notificações sobre eventos de apresentação, implemente o protocolo GADFullScreenContentDelegate
e atribua-o à propriedade fullScreenContentDelegate
do anúncio retornado. O
protocolo GADFullScreenContentDelegate
processa callbacks para quando o anúncio
é exibido com sucesso ou não e quando ele é dispensado. O código a seguir mostra como implementar o protocolo e atribuí-lo ao anúncio:
Swift
class ViewController: UIViewController, GADFullScreenContentDelegate { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") rewardedAd?.fullScreenContentDelegate = self } ) } /// Tells the delegate that the ad failed to present full screen content. func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Ad did fail to present full screen content.") } /// Tells the delegate that the ad will present full screen content. func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad will present full screen content.") } /// Tells the delegate that the ad dismissed full screen content. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did dismiss full screen content.") } }
Objective-C
@interface ViewController ()<GADFullScreenContentDelegate> @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GADRequest *request = [GADRequest request]; [GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744" request:request completionHandler:^(GADRewardedAd *ad, NSError *error) { if (error) { NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]); return; } self.rewardedAd = ad; NSLog(@"Rewarded ad loaded."); self.rewardedAd.fullScreenContentDelegate = self; }]; } /// Tells the delegate that the ad failed to present full screen content. - (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad didFailToPresentFullScreenContentWithError:(nonnull NSError *)error { NSLog(@"Ad did fail to present full screen content."); } /// Tells the delegate that the ad will present full screen content. - (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad will present full screen content."); } /// Tells the delegate that the ad dismissed full screen content. - (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad did dismiss full screen content."); }
GADRewardedAd
é um objeto de uso único. Isso significa que, depois que um anúncio premiado é exibido, ele não pode ser exibido novamente. Uma prática recomendada é carregar outro anúncio premiado no método adDidDismissFullScreenContent:
em GADFullScreenContentDelegate
para que o próximo anúncio premiado comece a ser carregado assim que o anterior for dispensado.
Exibir o anúncio e gerenciar o evento de recompensa
Antes de exibir um anúncio premiado aos usuários, você precisa apresentar ao usuário uma opção explícita para visualizar o conteúdo do anúncio premiado em troca de uma recompensa. Os anúncios premiados precisam sempre ser uma experiência opcional.
Ao apresentar o anúncio, é necessário fornecer um objeto GADUserDidEarnRewardHandler
para processar o prêmio para o usuário.
O código a seguir apresenta o melhor método para exibir um anúncio premiado.
Swift
func show() { if let ad = rewardedAd { ad.present(fromRootViewController: self) { let reward = ad.adReward print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)") // TODO: Reward the user. } } else { print("Ad wasn't ready") } }
Objective-C
- (void)show { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^{ GADAdReward *reward = self.rewardedAd.adReward; // TODO: Reward the user! }]; } else { NSLog(@"Ad wasn't ready"); } }
Perguntas frequentes
- Posso ver os detalhes do prêmio para o
GADRewardedAd
? - Sim, se você precisar do valor do prêmio antes que o callback
userDidEarnReward
seja acionado,GADRewardedAd
terá uma propriedadeadReward
que pode ser verificada após o carregamento do anúncio. - 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 invoca o
GADInitializationCompletionHandler
fornecido ao métodostartWithCompletionHandler:
, 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 receber o callback de inicialização?
Recomendamos carregar um anúncio dentro do
GADInitializationCompletionHandler
. Mesmo que uma rede de mediação não esteja pronta, o SDK dos anúncios para dispositivos móveis do Google ainda solicitará um anúncio a essa rede. Portanto, se uma rede de mediação concluir a inicialização após o tempo limite, ela ainda poderá atender a solicitações de anúncios futuras nessa sessão.Você pode continuar pesquisando o status de inicialização de todos os adaptadores em toda a sessão do app chamando
GADMobileAds.initializationStatus
.- Como faço para descobrir por que uma determinada rede de mediação não está pronta?
A propriedade
description
de um objetoGADAdapterStatus
descreve por que um adaptador não está pronto para atender a solicitações de anúncios.- O gerenciador de conclusão
userDidEarnRewardHandler
sempre é chamado antes do método delegadoadDidDismissFullScreenContent:
? Para anúncios do Google, todas as chamadas de
userDidEarnRewardHandler
ocorrem antes deadDidDismissFullScreenContent:
. Para anúncios veiculados por meio da mediação, a implementação do SDK da rede de anúncios de terceiros determina a ordem do callback. Para SDKs da rede de publicidade que fornecem um único método delegado com informações sobre os prêmios, o adaptador de mediação invocauserDidEarnRewardHandler
antes deadDidDismissFullScreenContent:
.
Exemplos no GitHub
- Exemplo de anúncios premiados: Swift | Objective-C
Próximas etapas
Saiba mais sobre a privacidade do usuário.