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
- Suivez le guide de démarrage.
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 the
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 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éthodestartWithCompletionHandler:
, 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 objetGADAdapterStatus
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éeadDidDismissFullScreenContent:
? Pour les annonces Google, tous les appels
userDidEarnRewardHandler
ont lieu avantadDidDismissFullScreenContent:
. 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 appelleuserDidEarnRewardHandler
avantadDidDismissFullScreenContent:
.
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