Os anúncios premiados são aqueles com que os usuários podem interagir em troca de recompensas no app. Este guia mostra como integrar anúncios premiados da AdMob a um app iOS. Leia algumas histórias de sucesso de clientes: estudo de caso 1, estudo de caso 2.
Pré-requisitos
- Conclua o Guia para iniciantes.
Sempre teste 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 do iOS:
ca-app-pub-3940256099942544/1712485313
Ele foi configurado especialmente para retornar anúncios de teste em todas as solicitações, e você pode usá-lo nos seus próprios apps durante a programação, o teste e a depuração. Substitua pelo ID do seu bloco de anúncios antes de publicar o app.
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
Estas são as principais etapas para integrar anúncios premiados:
- Carregar um anúncio
- [Opcional] Validar callbacks de SSV
- Registrar callbacks
- Mostrar o anúncio e processar o evento de recompensa
Carregar um anúncio
É possível carregar um anúncio usando o método load(adUnitID:request)
na classe GADRewardedAd
.
Swift
func loadRewardedAd() async {
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: RewardedAd?
func loadAd() async {
do {
rewardedAd = try await RewardedAd.load(
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
Objective-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
self.rewardedAd.fullScreenContentDelegate = self;
}];
[Opcional] Validar callbacks de verificação do lado do servidor (SSV)
Os apps que exigem dados extras em callbacks de verificação do lado 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 ao 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 mostra como definir dados personalizados em um objeto de anúncio premiado antes de solicitar um anúncio:
Swift
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
let options = ServerSideVerificationOptions()
options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd?.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
Objective-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
return;
}
self.rewardedAd = ad;
GADServerSideVerificationOptions *options =
[[GADServerSideVerificationOptions alloc] init];
options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
ad.serverSideVerificationOptions = options;
}];
Registrar callbacks
Para receber notificações de eventos de apresentação, atribua a propriedade
GADFullScreenContentDelegate to the
fullScreenContentDelegate do
anúncio retornado:
Swift
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
Objective-C
self.rewardedAd.fullScreenContentDelegate = self;
O protocolo GADFullScreenContentDelegate
processa callbacks quando o anúncio
é apresentado com ou sem sucesso e quando é dispensado. O código a seguir mostra como implementar o protocolo:
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
// Clear the rewarded ad.
rewardedAd = nil
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called with error: \(error.localizedDescription).")
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
Objective-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the rewarded ad.
self.rewardedAd = nil;
}
- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}
Mostrar o anúncio e processar o evento de recompensa
Antes de mostrar um anúncio premiado aos usuários, é necessário apresentar a eles uma opção explícita de ver o conteúdo do anúncio premiado em troca de uma recompensa. Os anúncios premiados precisam sempre ser uma experiência de ativação.
Ao apresentar seu anúncio, você precisa fornecer um objeto GADUserDidEarnRewardHandler
para processar a recompensa do usuário.
O código a seguir apresenta o melhor método para mostrar um anúncio premiado:
Swift
rewardedAd.present(from: self) {
let reward = rewardedAd.adReward
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
// TODO: Reward the user.
}
SwiftUI
Detecte eventos da interface na visualização para determinar quando mostrar o anúncio.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Apresente o anúncio premiado do modelo de visualização:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(from: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
Objective-C
[self.rewardedAd presentFromRootViewController:self
userDidEarnRewardHandler:^{
GADAdReward *reward = self.rewardedAd.adReward;
NSString *rewardMessage = [NSString
stringWithFormat:@"Reward received with currency %@ , amount %lf",
reward.type, [reward.amount doubleValue]];
NSLog(@"%@", rewardMessage);
// TODO: Reward the user.
}];
Perguntas frequentes
- Posso conferir os detalhes da recompensa do
GADRewardedAd
? - Sim, se você precisar do valor da recompensa antes que o callback
userDidEarnReward
seja acionado,GADRewardedAd
tem uma propriedadeadReward
que pode ser verificada para conferir o valor da recompensa depois que o anúncio for carregado. - Existe 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 eu 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 pede um anúncio a ela. Portanto, se uma rede de mediação terminar de inicializar 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 durante a sessão do app chamando
GADMobileAds.initializationStatus
.- Como descobrir por que uma rede de mediação específica não está pronta?
A propriedade
description
de um objetoGADAdapterStatus
descreve por que um adaptador não está pronto para atender solicitações de anúncio.- O gerenciador de conclusão
userDidEarnRewardHandler
sempre é chamado antes do método delegadoadDidDismissFullScreenContent:
? Para anúncios do Google, todas as chamadas
userDidEarnRewardHandler
ocorrem antes deadDidDismissFullScreenContent:
. Para anúncios veiculados por mediação, a implementação do SDK da rede de publicidade de terceiros determina a ordem de callback. Para SDKs de rede de publicidade que fornecem um único método delegado com informações de recompensa, o adaptador de mediação invocauserDidEarnRewardHandler
antes deadDidDismissFullScreenContent:
.
Exemplos no GitHub
Confira exemplos completos de anúncios premiados no seu idioma de preferência:
Próximas etapas
Saiba mais sobre a privacidade do usuário.