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
Objective-C
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
userDidEarnRewardrappel ,GADRewardedAdcomporte uneadRewardproprié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
GADInitializationCompletionHandlerfourni à la méthodestartWithCompletionHandler:, 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é
descriptiond'un objetGADAdapterStatusdécrit pourquoi un adaptateur n'est pas prêt à répondre aux demandes d'annonces.- Le gestionnaire de saisie semi-automatique
userDidEarnRewardHandlerest-il toujours appelé avant la méthode déléguéeadDidDismissFullScreenContent:? Pour les annonces Google, tous les appels
userDidEarnRewardHandleront lieu avantadDidDismissFullScreenContent:. 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 appelleuserDidEarnRewardHandleravantadDidDismissFullScreenContent:.
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.