Anúncios premiados

Anúncios premiados são anúncios com os quais os usuários têm a opção de interagir em troca de recompensas no aplicativo . Este guia mostra como integrar anúncios premiados de AdMobem um aplicativo iOS.Leia algumas histórias de sucesso de clientes: estudo de caso 1 , estudo de caso 2 .

Pré-requisitos

  • SDK de anúncios para dispositivos móveis do Google 8.0.0 ou superior
  • Siga o guia de primeiros passos para importar o SDK dos anúncios para dispositivos móveis do Google.

Sempre teste com anúncios de teste

Ao criar e testar seus aplicativos, use anúncios de teste em vez de anúncios de produção ao vivo. O não cumprimento pode levar à suspensão da sua conta.

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 especialmente configurado para retornar anúncios de teste para cada solicitação, e você pode usá-lo em seus próprios aplicativos durante a codificação, teste e depuração. Apenas certifique-se de substituí-lo por seu próprio ID de bloco de anúncios antes de publicar seu aplicativo.

Para obter mais informações sobre como os anúncios de teste do SDK de anúncios para dispositivos móveis funcionam, consulte Anúncios de teste .

Implementação

As principais etapas para integrar anúncios premiados são:

  1. Carregue um anúncio.
  2. Registre-se para retornos de chamada.
  3. Exiba o anúncio e gerencie o evento de recompensa.

Carregar um anúncio

O carregamento de um anúncio é feito usando o método estático loadWithAdUnitID:request:completionHandler: na classe GADRewardedAd . O método de carregamento requer o ID do bloco de anúncios, um objeto GADRequest e um gerenciador de conclusão que é chamado quando o carregamento do anúncio é bem-sucedido ou falha. O objeto GADRewardedAd carregado é fornecido como um parâmetro no manipulador de conclusão. O exemplo abaixo mostra como carregar um GADRewardedAd em sua classe ViewController .

Rápido


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.")
    }
    )
  }
}

Objetivo-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.");
      }];
}

Registre-se para retornos de chamada

Para receber notificações de eventos de apresentação, você deve implementar o protocolo GADFullScreenContentDelegate e atribuí-lo à propriedade fullScreenContentDelegate do anúncio retornado. O protocolo GADFullScreenContentDelegate lida com retornos de chamada para quando o anúncio é apresentado com ou sem sucesso e quando é dispensado. O código a seguir mostra como implementar o protocolo e atribuí-lo ao anúncio:

Rápido

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.")
  }
}

Objetivo-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, uma vez 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: no GADFullScreenContentDelegate para que o próximo anúncio premiado comece a ser carregado assim que o anterior for dispensado.

Exiba o anúncio e gerencie o evento de recompensa

Antes de exibir um anúncio premiado aos usuários, você deve 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 devem sempre ser uma experiência opcional.

Ao apresentar seu anúncio, você deve fornecer um objeto GADUserDidEarnRewardHandler para lidar com a recompensa para o usuário.

O código a seguir apresenta o melhor método para exibir um anúncio premiado.

Rápido

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")
  }
}

Objetivo-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 obter os detalhes da recompensa para o GADRewardedAd ?
Sim, se você precisar do valor da recompensa antes que o retorno de chamada userDidEarnReward seja acionado, GADRewardedAd tem uma propriedade adReward que você pode verificar para verificar o valor da recompensa após o carregamento do anúncio.
Existe um tempo limite para a chamada de inicialização?
Após 10 segundos, o SDK de 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?

É uma prática recomendada carregar um anúncio dentro de um GADInitializationCompletionHandler . Mesmo que uma rede de mediação não esteja pronta, o SDK de anúncios para dispositivos móveis do Google ainda solicitará um anúncio a essa rede. Portanto, se uma rede de mediação terminar de inicializar 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 em toda a sessão do aplicativo chamando GADMobileAds.initializationStatus .

Como descubro 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.

Exemplos no GitHub