Annonces avec récompense

Sélectionnez la plate-forme : Android (bêta) Nouveau 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 explique comment intégrer des annonces avec récompense d'Ad Manager dans une application iOS.

Prérequis

Avant de continuer, configurez Google Mobile Ads SDK.

Toujours tester 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 tests dédié pour les annonces avec récompense iOS :

/21775744923/example/rewarded

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 Google Mobile Ads SDK, consultez Test Ads.

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

Le chargement d'une annonce s'effectue à l'aide de la load(adUnitID:request) méthode sur la GADRewardedAd classe.

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "/21775744923/example/rewarded", request: AdManagerRequest())
    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:@"/21775744923/example/rewarded"
              request:[GAMRequest 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 (SSV)

Les applications qui nécessitent des données supplémentaires dans les rappels de validation côté serveurdoivent 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ées n'est définie, la valeur du paramètre de requête custom_data n'est 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

private func validateAdManagerServerSideVerification() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "/21775744923/example/rewarded", request: AdManagerRequest())
    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:@"/21775744923/example/rewarded"
                        request:[GAMRequest 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;
              }];

Remplacez SAMPLE_CUSTOM_DATA_STRING par vos données personnalisées.

S'inscrire aux rappels

Pour recevoir des notifications concernant les événements de présentation, vous devez attribuer GADFullScreenContentDelegate à la propriété fullScreenContentDelegate 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 ou sans succès, et lorsqu'elle est ignoré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 proposer explicitement à l'utilisateur de regarder 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 d'acceptation.

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 diffuser 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'interface utilisateur 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

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 userDidEarnReward rappel , GADRewardedAd comporte une adReward propriété 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 ?
Au bout de 10 secondes, Google Mobile Ads SDK 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 se passe-t-il 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, Google Mobile Ads SDK demande toujours une annonce à ce réseau. Ainsi, si un réseau de médiation termine l'initialisation après le délai avant 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 particulier 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.

Le gestionnaire de saisie semi-automatique 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 via 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 déléguée avec des informations sur la récompense, l'adaptateur de médiation appelle userDidEarnRewardHandler avant adDidDismissFullScreenContent:.

Exemples sur GitHub

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

Étapes suivantes

En savoir plus sur la confidentialité des utilisateurs.