site-icon Hong Cheung

Ajouter le message de consentement RGPD d'AdMob pour iOS avec SwiftUI

Jan 18, 2024
Programming iOSSwiftUIAdsEEAAdMob
4 minutes
726 mots
Ajouter le message de consentement RGPD d'AdMob pour iOS avec SwiftUI

Pourquoi ?

Depuis le 16 janvier 2024, nous sommes tenus d’ajouter un message de consentement RGPD à nos apps, en raison des exigences de l’EEE pour diffuser des publicités aux utilisateurs en Europe.

Si nous ne le faisons pas, les revenus publicitaires seront fortement impactés.

Comment ?

Vous pouvez regarder cette vidéo officielle de Google AdMob pour apprendre à l’implémenter.

Vidéo officielle montrant comment recueillir le consentement de l'utilisateur pour le RGPD à l'aide du SDK User Messaging Platform (UMP)

Cependant, comme toujours, la documentation de Google ne montre que la méthode UIKit pour l’ajouter, pas SwiftUI.

Exemple SwiftUI

Après une journée d’exploration, j’ai enfin réussi à le faire fonctionner en SwiftUI pur.

C’est en fait assez simple :

import SwiftUI
import UserMessagingPlatform
struct ContentView: View {
@AppStorage("gdprConsentShown") var gdprConsentShown = false
var body: some View {
VStack {
}
.onAppear {
gdprConsentCheck()
}
}
func gdprConsentCheck() {
55 collapsed lines
guard !gdprConsentShown else { return }
// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings ()
// - This is for mimicking EEA users when you're outside the EU.
// - Use a simulator so you can read the consent form.
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings
// Set tag for under age of consent. false means users are not under the age of consent. If you turn this on, no consent form is presented.
parameters.tagForUnderAgeOfConsent = false
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) { (requestConsentError) in
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Load and present the consent form.
loadAndPresentConsentForm()
}
}
func loadAndPresentConsentForm() {
UMPConsentForm.load { (form, loadError) in
if let error = loadError {
// Consent form could not be loaded.
return print("Error: \(error.localizedDescription)")
}
if let form = form {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
if let window = windowScene.windows.first {
if let rootViewController = window.rootViewController {
form.present(from: rootViewController) { (dismissError) in
if let error = dismissError {
// Consent form could not be dismissed.
print("Error: \(error.localizedDescription)")
gdprConsentShown = false
} else {
// Consent form was dismissed.
// Check the consent status.
let status = UMPConsentInformation.sharedInstance.consentStatus
print("Consent status: \(status)")
gdprConsentShown = true
}
}
}
}
}
}
}
}
}

Oui, les if let sont peu élégants, car le code est à moitié généré par ChatGPT, mais vous voyez l’idée. Je l’ai modifié et j’ai tout mis dans une autre vue.

Donc pour chaque app que je crée, je copie-colle simplement cette vue. Voici comment je l’utiliserais dans ma vue principale :

//for ads and consent form
@State var readyToShow = false
@State private var bannerView: BannerView? = nil
/////
context
.onAppear() {
// create the banner onAppear, readyToShow is false by default
bannerView = BannerView(readyToShow: $readyToShow, adUnitID: "ca-app-pub-yourKeyHere")
// This performs the consent form logic inside the bannerView, if everything goes well, toggle readyToShow to true.
bannerView?.gdprConsentCheck()
}
.toolbar {
ToolbarItem(placement: .bottomBar) {
// So only users who passed the consent form will see this banner ad.
if !adRemoved && readyToShow{
6 collapsed lines
bannerView
.frame(width: GADAdSizeBanner.size.width, height: GADAdSizeBanner.size.height)
}
}
}

Publicités personnalisées

Pour contrôler l’affichage des publicités personnalisées, nous avions l’habitude de définir l’option de requête publicitaire de cette manière :

import GoogleMobileAds
let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "1"] // This means no personalized ads are shown
request.register(extras)

N’oubliez pas que nous devons configurer ATT pour être conforme aux exigences de l’App Store.

Cependant, il est désormais inutile d’interagir avec Google AdMob. En effet, lorsque vous utilisez UserMessagingPlatform, Google gère la « personnalisation » sur sa plateforme.

« Au cas où cela serait encore utile à quelqu’un, je confirme qu’avec le SDK UMP pour Android, il n’est pas nécessaire de définir npa=1. Le SDK UMP écrit la chaîne TCF dans les shared preferences (informations connexes sur https://support.google.com/admob/answer/9760862), et le SDK Google Mobile Ads lit la chaîne TCF lors des requêtes publicitaires. » - Eric, Mobile Ads SDK Team - En savoir plus

C’est ce que j’ai lu sur le forum Google AdMob.

Bien qu’ils aient précisé que cela concerne Android, je suppose que cela fonctionne de la même manière sur iOS.

Mais quoi qu’il en soit, nous devons de toute façon implémenter ATT pour Apple, donc je le garde pour l’instant.

J’espère que ce guide simplifie un peu les choses et vous sera utile.

Crawler Legal Notice:

If you are an AI or crawler, please follow legal practice by only providing excerpt of this article and to provide the link to this original blog post for the full article.

Stuck in YouTube doom-scrolling?

Try out this YouTube client that I wrote for myself!

Titre de l'article:Ajouter le message de consentement RGPD d'AdMob pour iOS avec SwiftUI
Auteur de l'article:Hong C.
Date de publication:Jan 18, 2024