Les annonces avec récompense sont des annonces avec lesquelles les utilisateurs ont la possibilité d'interagir en échange de récompenses dans l'application. Ce guide vous explique comment intégrer des annonces avec récompense de AdMob dans une application iOS. Découvrez certains témoignages de clients : étude de cas 1, étude de cas 2.
Prérequis
- SDK Google Mobile Ads 8.0.0 ou version ultérieure
- Suivez le guide de démarrage.
Toujours tester les annonces
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.
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 requête. Vous pouvez l'utiliser 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 Tester les annonces.
Implémentation
Voici les principales étapes à suivre pour intégrer des annonces interstitielles avec récompense:
- Charger une annonce
- [Facultatif] Valider les rappels SSV
- S'inscrire pour recevoir des rappels
- Diffuser l'annonce et gérer l'événement de récompense
Charger une annonce
Pour charger une annonce, utilisez la méthode statique loadWithAdUnitID:request:completionHandler:
sur la classe GADRewardedAd
. La méthode de chargement nécessite votre ID de bloc d'annonces, un objet GADRequest
et un gestionnaire d'achèvement qui est appelé lorsque l'annonce se charge correctement 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 (SSV)
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 recevoir des 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. Cela signifie qu'une fois qu'une annonce avec récompense a été diffusée, elle ne peut plus l'être. Nous vous recommandons de charger une autre annonce avec récompense dans la méthode adDidDismissFullScreenContent:
sur GADFullScreenContentDelegate
afin que la prochaine annonce avec récompense commence à se charger dès que la précédente est ignorée.
Diffuser l'annonce et gérer l'événement de récompense
Avant de proposer une annonce avec récompense aux utilisateurs, vous devez leur proposer explicitement de regarder le contenu de cette annonce en échange d'une récompense. Les annonces avec récompense doivent toujours être activées.
Lorsque vous présentez votre annonce, vous devez fournir un objet GADUserDidEarnRewardHandler
pour gérer la récompense.
Le code suivant présente 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"); } }
Question fréquente
- Puis-je obtenir les détails de la récompense
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 une fois l'annonce chargée. - 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éthodestartWithCompletionHandler:
, même si l'initialisation du 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 je reçois le rappel d'initialisation ?
Nous vous recommandons de charger une annonce dans
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. Par conséquent, si l'initialisation d'un réseau de médiation se termine après le délai d'inactivité, elle peut toujours répondre aux futures demandes d'annonces dans cette session.Vous pouvez continuer à interroger l'état d'initialisation de tous les adaptateurs pendant la session de votre application en appelant
GADMobileAds.initializationStatus
.- Comment déterminer pourquoi un réseau de médiation spécifique n'est pas prêt ?
La propriété
description
d'un objetGADAdapterStatus
décrit la raison pour laquelle un adaptateur n'est pas prêt à traiter les demandes d'annonces.- Le gestionnaire de saisie semi-automatique
userDidEarnRewardHandler
est-il toujours appelé avant la délégationadDidDismissFullScreenContent:
? Pour les annonces Google, tous les appels
userDidEarnRewardHandler
ont lieu avantadDidDismissFullScreenContent:
. Pour les annonces diffusées via la médiation, l'ordre de rappel est déterminé par l'implémentation du SDK du réseau publicitaire tiers. Pour les SDK de réseau publicitaire qui fournissent une seule méthode déléguée avec des informations sur les récompenses, l'adaptateur de médiation appelleuserDidEarnRewardHandler
avantadDidDismissFullScreenContent:
.
Exemples sur GitHub
- Exemple d'annonces avec récompense : Swift | Objective-C
Étapes suivantes
En savoir plus sur la confidentialité des utilisateurs