Anúncios premiados

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Os anúncios premiados são aqueles com que os usuários têm a opção de interagir em troca de recompensas no app. Este guia mostra como integrar os 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 mais recente.
  • Conclua o guia 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 para iOS:

ca-app-pub-3940256099942544/1712485313

Ele foi configurado especialmente para retornar anúncios de teste a cada solicitação, e você pode usá-lo nos seus próprios apps durante a programação, os testes e a depuração. Basta substituí-lo 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 dos anúncios para dispositivos móveis funcionam, consulte Anúncios de teste.

Implementação

As principais etapas para integrar os 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 processar 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 lado do servidor (SSV)

Apps que exigem dados extras nos callbacks de verificação do lado do servidor precisam usar o recurso de dados personalizados de 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 retorno de chamada SSV.

Confira na amostra de código a seguir 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 de eventos de apresentação, é necessário implementar o protocolo GADFullScreenContentDelegate e atribuí-lo à propriedade fullScreenContentDelegate do anúncio retornado. O protocolo GADFullScreenContentDelegate gerencia callbacks para quando o anúncio é apresentado com sucesso ou não e quando é 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 processar o evento de recompensa

Antes de exibir um anúncio premiado aos usuários, você precisa apresentar a ele uma escolha explícita para ver 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 seu anúncio, forneça um objeto GADUserDidEarnRewardHandler para processar a recompensa 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 receber os detalhes do prêmio para GADRewardedAd?
Sim, se você precisar do valor do prêmio antes que o callback userDidEarnReward seja disparado, GADRewardedAd terá uma propriedade adReward que poderá ser verificada para verificar o valor do prêmio 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étodo startWithCompletionHandler:, 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 retorno de chamada 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 terminar a inicialização após o tempo limite, ela ainda poderá atender a solicitações de anúncios futuras nessa sessão.

É possível continuar a pesquisar o status de inicialização de todos os adaptadores ao longo da 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 objeto GADAdapterStatus descreve por que um adaptador não está pronto para atender a solicitações de anúncios.

O gerenciador de conclusão do userDidEarnRewardHandler sempre é chamado antes do método delegado adDidDismissFullScreenContent:?

Para anúncios do Google, todas as chamadas userDidEarnRewardHandler ocorrem antes de adDidDismissFullScreenContent:. Para anúncios veiculados por meio da mediação, a implementação do SDK da rede de anúncios terceirizada determina a ordem de callback. Para SDKs de redes de publicidade que fornecem um único método delegado com informações sobre recompensas, o adaptador de mediação invoca userDidEarnRewardHandler antes de adDidDismissFullScreenContent:.

Exemplos no GitHub