Annonces avec récompense

Sélectionnez une plate-forme : Android iOS Unity Flutter

Les utilisateurs ont la possibilité d'interagir avec ce type d'annonces en échange d'une récompense dans une application. Ce guide vous explique comment intégrer des annonces avec récompense AdMob dans une application iOS. Découvrez quelques témoignages de clients : étude de cas 1, étude de cas 2.

Prérequis

Toujours effectuer des tests avec des annonces tests

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

Le moyen le plus simple de charger des annonces tests consiste à utiliser notre ID de bloc d'annonces test dédié pour les annonces avec récompense iOS :

ca-app-pub-3940256099942544/1712485313

Il a été spécialement configuré pour renvoyer des annonces tests pour chaque demande. Vous pouvez l'utiliser librement dans vos propres applications lors du codage, des tests et du débogage. 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 tests du SDK Mobile Ads, consultez Annonces tests.

Implémentation

Voici les principales étapes à suivre pour intégrer des annonces avec récompense :

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

Charger une annonce

Pour charger une annonce, la méthode load(adUnitID:request) doit être utilisée sur la 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;
    }];

[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

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

S'inscrire aux rappels

Pour recevoir des notifications pour les événements de présentation, vous devez attribuer la propriété GADFullScreenContentDelegate to thefullScreenContentDelegate` de l'annonce renvoyée :

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

Le protocole GADFullScreenContentDelegate gère les rappels lorsque l'annonce est présentée avec succès ou non, et lorsqu'elle est fermée. Le code suivant montre comment implémenter le protocole :

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

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

Avant de diffuser une annonce avec récompense, vous devez présenter à l'utilisateur un choix explicite lui permettant de visionner le contenu de l'annonce avec récompense en échange d'une récompense. Les annonces avec récompense doivent toujours être une expérience optionnelle.

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

Le code suivant présente la meilleure méthode pour afficher une annonce avec récompense :

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

Écoutez les événements d'UI dans la vue pour déterminer quand afficher l'annonce.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

Présentez l'annonce avec récompense à partir du modèle de vue :

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

Questions fréquentes

Can I get the reward details for the GADRewardedAd?
Oui, si vous avez besoin du montant de la récompense avant le déclenchement du rappel userDidEarnReward, GADRewardedAd possède une propriété adReward que vous pouvez vérifier pour connaître le montant de la récompense une fois l'annonce chargée.
L'appel d'initialisation est-il soumis à un délai avant expiration ?
Après 10 secondes, le SDK Google Mobile Ads appelle le GADInitializationCompletionHandler fourni à la méthode startWithCompletionHandler:, même si un réseau de médiation n'a pas encore terminé l'initialisation.
Que faire si certains réseaux de médiation ne sont pas prêts lorsque je reçois le rappel d'initialisation ?

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

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

Comment savoir pourquoi 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 à traiter les demandes d'annonces.

Le gestionnaire d'achèvement userDidEarnRewardHandler est-il toujours appelé avant la méthode déléguée adDidDismissFullScreenContent: ?

Pour les annonces Google, tous les appels userDidEarnRewardHandler ont lieu avant adDidDismissFullScreenContent:. Pour les annonces diffusées par le biais de la médiation, l'implémentation du SDK du réseau publicitaire tiers détermine l'ordre des rappels. Pour les SDK de réseaux publicitaires qui fournissent une seule méthode de délégué avec des informations sur la récompense, l'adaptateur de médiation appelle userDidEarnRewardHandler avant adDidDismissFullScreenContent:.

Exemples sur GitHub

Consultez des exemples complets d'annonces avec récompense dans la langue de votre choix :

Étapes suivantes

En savoir plus sur la confidentialité des utilisateurs