Annonces avec récompense

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Les annonces avec récompense sont des annonces avec lesquelles les utilisateurs peuvent interagir en échange de récompenses dans l'application. Ce guide vous explique comment intégrer des annonces avec récompense AdMob dans une application iOS. Consultez les témoignages de clients : étude de cas 1, étude de cas 2.

Prérequis

Toujours tester avec les annonces tests

Lorsque vous créez et testez vos applications, veillez à utiliser des annonces de test plutôt que des annonces de production. À défaut, votre compte risque d'être suspendu.

Pour charger les annonces tests, le plus simple est d'utiliser notre ID de bloc d'annonces test dédié pour les annonces avec récompense iOS:

ca-app-pub-3940256099942544/1712485313

Elle a été spécialement configurée pour renvoyer des annonces tests à chaque demande, et vous êtes libre de l'utiliser dans vos propres applications pour coder, tester et déboguer. Veillez simplement à le remplacer par votre propre ID de bloc d'annonces avant de publier votre application.

Pour en savoir plus sur le fonctionnement des annonces de test du SDK Mobile Ads, consultez Tester les annonces.

Implémentation

Pour intégrer des annonces interstitielles avec récompense, procédez comme suit:

  • Charger une annonce
  • [Facultatif] Valider les rappels SSV
  • S'inscrire pour les rappels
  • Afficher l'annonce et gérer l'événement de récompense

Charger une annonce

Pour charger une annonce, utilisez la méthode loadWithAdUnitID:request:completionHandler: statique de la classe GADRewardedAd. La méthode de chargement nécessite votre ID de bloc d'annonces, un objet GADRequest et un gestionnaire de fin qui est appelé lorsque le chargement de l'annonce aboutit ou échoue. L'objet GADRewardedAd chargé est fourni en tant que paramètre dans le gestionnaire d'achèvement. L'exemple ci-dessous montre comment charger un GADRewardedAd dans votre 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.");
      }];
}

[Facultatif] Valider les rappels de validation côté serveur

Les applications qui nécessitent des données supplémentaires dans les rappels de validation côté serveur doivent utiliser la fonctionnalité de données personnalisées des annonces avec récompense. Toute valeur de chaîne définie sur un objet d'annonce avec récompense est transmise au paramètre de requête custom_data du rappel SSV. Si aucune valeur de données personnalisée n'est définie, la valeur du paramètre de requête custom_data ne sera pas présente dans le rappel SSV.

L'exemple de code suivant montre comment définir des données personnalisées sur un objet d'annonce avec récompense avant de demander une annonce.

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;
    }];

S'inscrire pour les rappels

Afin de recevoir des notifications pour les événements de présentation, vous devez implémenter le protocole GADFullScreenContentDelegate et l'attribuer à la propriété fullScreenContentDelegate de l'annonce renvoyée. Le protocole GADFullScreenContentDelegate gère les rappels lorsque l'annonce se présente correctement ou non, et lorsqu'elle est ignorée. Le code suivant montre comment mettre en œuvre le protocole et l'attribuer à l'annonce:

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 est un objet à usage unique. Autrement dit, lorsqu'une annonce avec récompense est diffusée, elle ne peut plus être diffusée. Nous vous recommandons de charger une autre annonce avec récompense dans la méthode adDidDismissFullScreenContent: sur GADFullScreenContentDelegate pour que la prochaine annonce avec récompense commence à se charger dès que l'annonce précédente est ignorée.

Afficher l'annonce et gérer l'événement de récompense

Avant de diffuser une annonce avec récompense, vous devez lui proposer de visionner explicitement le contenu de l'annonce avec récompense en échange d'une récompense. Les annonces avec récompense doivent toujours être une option d'activation.

Lorsque vous présentez votre annonce, vous devez fournir un objet GADUserDidEarnRewardHandler pour gérer la récompense de l'utilisateur.

Le code suivant constitue la meilleure méthode pour diffuser une annonce avec récompense.

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

Questions fréquentes

Puis-je obtenir les détails de la récompense pour GADRewardedAd ?
Oui. Si vous avez besoin du montant de la récompense avant le déclenchement du rappel userDidEarnReward, GADRewardedAd dispose d'une propriété adReward que vous pouvez vérifier pour vérifier le montant de la récompense après le chargement de l'annonce.
Existe-t-il un délai avant expiration pour l'appel d'initialisation ?
Au bout de 10 secondes, le SDK Google Mobile Ads appelle le GADInitializationCompletionHandler fourni à la méthode startWithCompletionHandler:, même si l'initialisation d'un réseau de médiation n'est toujours pas terminée.
Que faire si certains réseaux de médiation ne sont pas prêts lorsque le rappel d'initialisation s'affiche ?

Nous vous recommandons de charger une annonce dans un élément GADInitializationCompletionHandler. Même si un réseau de médiation n'est pas prêt, le SDK Google Mobile Ads lui demandera quand même une annonce. Ainsi, si l'initialisation d'un réseau de médiation est terminée après le délai d'expiration, il peut toujours répondre aux futures demandes d'annonces au cours de cette session.

Vous pouvez continuer à interroger l'état d'initialisation de tous les adaptateurs tout au long de la session d'application en appelant GADMobileAds.initializationStatus.

Comment savoir si un réseau de médiation spécifique n'est pas prêt ?

La propriété description d'un objet GADAdapterStatus décrit pourquoi un adaptateur n'est pas prêt à répondre aux demandes d'annonces.

Exemples sur GitHub