Gemäß der Google-Einwilligung der Nutzer in der EU verwenden, müssen Sie Sie müssen Ihren Nutzern im Europäischen Wirtschaftsraum (EWR) bestimmte Informationen offenlegen, mit dem Vereinigten Königreich und holen ihre Zustimmung zur Verwendung von Cookies oder anderen Formen der lokalen Speicherung ein, sofern dies gesetzlich vorgeschrieben ist, sowie um personenbezogene Daten wie die Werbe-ID (z. B. die Werbe-ID) für die Anzeigenauslieferung zu verwenden. Die Richtlinie entspricht den Anforderungen der EU-Datenschutzrichtlinie für elektronische Kommunikation und der EU-Datenschutz-Grundverordnung (DSGVO) gilt.
Google möchte Publisher bei der Umsetzung dieser Richtlinie unterstützen. das User Messaging Platform (UMP) SDK. Das UMP SDK wurde aktualisiert, um IAB-Standards. All diese Konfigurationen lassen sich in der Ad Manager Datenschutz- und Messaging.
Vorbereitung
- Arbeiten Sie den Startleitfaden durch.
- Wenn Sie an Anforderungen in Bezug auf die DSGVO arbeiten, lesen Sie Auswirkungen der IAB-Anforderungen auf die Einwilligung der Nutzer in der EU Nachrichten
Mitteilungstyp erstellen
Erstellen Sie Nutzermitteilungen mit einer der verfügbare Mitteilungstypen für Nutzer Datenschutz- und Messaging auf Ihrem Ad Manager Konto. Das UMP SDK versucht, eine Nutzernachricht erstellt aus Ad Manager Anwendungs-ID die in Ihrem Projekt festgelegt sind. Wenn für Ihre Anwendung keine Meldung konfiguriert ist, gibt einen Fehler zurück.
Weitere Informationen finden Sie unter Datenschutz und Mitteilungen
SDK importieren
CocoaPods (bevorzugt)
Am einfachsten können Sie das SDK mit der CocoaPods Öffnen Sie das Podfile und fügen Sie diese Zeile dem Ziel Ihrer Anwendung hinzu:
pod 'GoogleUserMessagingPlatform'
Führen Sie dann den folgenden Befehl aus:
pod install --repo-update
Wenn Sie mit CocoaPods noch nicht vertraut sind, lesen Sie unter Verwendung von CocoaPods Podfiles erstellen und verwenden.
Swift-Paketmanager
Das UMP SDK unterstützt auch Swift Package Manager. Führen Sie die folgenden Schritte aus, um das Swift-Paket importieren.
Installieren Sie in Xcode das UMP SDK Swift Package, indem Sie Datei > Pakete hinzufügen...
Suchen Sie in der angezeigten Eingabeaufforderung nach dem UMP SDK Swift Package GitHub Repository:
https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
Wählen Sie die Version des UMP SDK Swift Package aus, die Sie verwenden möchten. Für neue Projekten arbeiten, empfehlen wir die Verwendung von Bis zur nächsten Hauptversion.
Xcode löst dann Ihre Paketabhängigkeiten auf und lädt sie im Hintergrund. Weitere Informationen zum Hinzufügen von Paketabhängigkeiten finden Sie in der Apple-Dokumentation
Manueller Download
Sie können das SDK auch manuell importieren.
Ziehen Sie dann das Framework in Ihr Xcode-Projekt und wählen Sie Copy Elemente.
Anschließend können Sie das Framework in jede von Ihnen benötigte Datei einfügen:
Swift
import UserMessagingPlatform
Objective-C
#include <UserMessagingPlatform/UserMessagingPlatform.h>
Anwendungs-ID hinzufügen
Ihre Anwendungs-ID finden Sie in der
Ad Manager-Benutzeroberfläche:
Fügen Sie die ID Ihrem
Info.plist
.
mit dem folgenden Code-Snippet:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
Anfrage zur Einwilligungserklärung
Sie sollten bei jeder App eine Aktualisierung der Einwilligungsinformationen des Nutzers anfordern
mit requestConsentInfoUpdateWithParameters:completionHandler:
starten. Damit legen Sie fest,
ob Nutzer einwilligen müssen, falls noch nicht geschehen, oder
wenn die Einwilligung abgelaufen ist.
Hier ist ein Beispiel dafür, wie du den Status einer UIViewController
im
viewDidLoad()
-Methode.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// TODO: Load and present the consent form.
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
// TODO: Load and present the consent form.
}];
}
Einwilligungsformular laden und bei Bedarf präsentieren
Nachdem Sie den aktuellen Einwilligungsstatus erhalten haben, rufen Sie
loadAndPresentIfRequiredFromViewController:completionHandler:
am
UMPConsentForm
Klasse zum Laden eines Einwilligungsformulars. Wenn die
Einwilligungsstatus erforderlich ist, lädt das SDK ein Formular und zeigt es sofort an.
aus den view controlleraus. Die completion handler
wird aufgerufen , nachdem das Formular geschlossen wurde. Wenn keine Einwilligung erforderlich ist, completion handler
wird sofort aufgerufen.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
}
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
}];
}];
}
Wenn du weitere Aktionen ausführen musst, nachdem der Nutzer eine Auswahl getroffen oder die Anzeige geschlossen hat platziere diese Logik in der completion handler für Ihr Formular.
Anzeigenanfrage senden
Bevor Sie Anzeigen in Ihrer App anfordern, prüfen Sie, ob Sie die Einwilligung eingeholt haben
vom Nutzer mit UMPConsentInformation.sharedInstance.canRequestAds
. Es gibt zwei
sollten Sie beim Einholen der Einwilligung überprüfen:
- Sobald in der aktuellen Sitzung die Einwilligung eingeholt wurde.
- Unmittelbar nach Ihrem Anruf bei
requestConsentInfoUpdateWithParameters:completionHandler:
Möglicherweise wurde die Einwilligung bereits in der vorherigen Sitzung erteilt. Als Latenz solltet ihr nicht auf den Abschluss des Callbacks warten, Anzeigen so bald wie möglich nach der Einführung Ihrer App zu laden.
Wenn beim Einholen der Einwilligung ein Fehler auftritt, sollten Sie trotzdem Anzeigen anzufordern. Für das UMP SDK wird der Einwilligungsstatus aus dem vorherigen Sitzung.
Swift
class ViewController: UIViewController {
// Use a boolean to initialize the Google Mobile Ads SDK and load ads once.
private var isMobileAdsStartCalled = false
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
if UMPConsentInformation.sharedInstance.canRequestAds {
self.startGoogleMobileAdsSDK()
}
}
}
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if UMPConsentInformation.sharedInstance.canRequestAds {
startGoogleMobileAdsSDK()
}
}
private func startGoogleMobileAdsSDK() {
DispatchQueue.main.async {
guard !self.isMobileAdsStartCalled else { return }
self.isMobileAdsStartCalled = true
// Initialize the Google Mobile Ads SDK.
GADMobileAds.sharedInstance().start()
// TODO: Request an ad.
// GADInterstitialAd.load(...)
}
}
}
Objective-C
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[strongSelf startGoogleMobileAdsSDK];
}
}];
}];
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[self startGoogleMobileAdsSDK];
}
}
- (void)startGoogleMobileAdsSDK {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Initialize the Google Mobile Ads SDK.
[GADMobileAds.sharedInstance startWithCompletionHandler:nil];
// TODO: Request an ad.
// [GADInterstitialAd loadWithAdUnitID...];
});
}
Datenschutzoptionen
Bei einigen Einwilligungsformularen muss der Nutzer seine Einwilligung jederzeit ändern. Einhaltung befolgen Sie die folgenden Schritte, um bei Bedarf eine Schaltfläche für Datenschutzoptionen zu implementieren.
Gehen Sie dazu wie folgt vor:
- Implementieren Sie ein UI-Element, z. B. eine Schaltfläche auf der Einstellungsseite Ihrer App, die ein Formular für Datenschutzoptionen auslösen kann.
- Sobald
loadAndPresentIfRequiredFromViewController:completionHandler:
der Vorgang abgeschlossen ist, prüfen SieprivacyOptionsRequirementStatus
um zu bestimmen, ob UI-Element, über das das Formular für Datenschutzoptionen angezeigt werden kann - Wenn ein Nutzer mit Ihrem UI-Element interagiert, rufen Sie
presentPrivacyOptionsFormFromViewController:completionHandler:
um das Formular einzublenden, damit der Nutzer ihre Datenschutzeinstellungen jederzeit aktualisieren.
Das folgende Beispiel zeigt, wie das Formular für Datenschutzoptionen
UIBarButtonItem
.
Swift
@IBOutlet weak var privacySettingsButton: UIBarButtonItem!
var isPrivacyOptionsRequired: Bool {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus == .required
}
override func viewDidLoad() {
// ...
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
// ...
UMPConsentForm.loadAndPresentIfRequired(from: self) {
//...
// Consent has been gathered.
// Show the button if privacy options are required.
self.privacySettingsButton.isEnabled = isPrivacyOptionsRequired
}
}
// ...
}
// Present the privacy options form when a user interacts with the
// privacy settings button.
@IBAction func privacySettingsTapped(_ sender: UIBarButtonItem) {
UMPConsentForm.presentPrivacyOptionsForm(from: self) {
[weak self] formError in
guard let self, let formError else { return }
// Handle the error.
}
}
Objective-C
@interface ViewController ()
@property(weak, nonatomic) IBOutlet UIBarButtonItem *privacySettingsButton;
@end
- (BOOL)isPrivacyOptionsRequired {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
UMPPrivacyOptionsRequirementStatusRequired;
}
- (void)viewDidLoad {
// ...
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
// ...
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
// ...
// Consent has been gathered.
// Show the button if privacy options are required.
strongSelf.privacySettingsButton.enabled = isPrivacyOptionsRequired;
}];
}];
}
// Present the privacy options form when a user interacts with your
// privacy settings button.
- (IBAction)privacySettingsTapped:(UIBarButtonItem *)sender {
[UMPConsentForm presentPrivacyOptionsFormFromViewController:self
completionHandler:^(NSError *_Nullable formError) {
if (formError) {
// Handle the error.
}
}];
}
Test
Wenn Sie die Integration in Ihre App während der Entwicklung testen möchten, folgen Sie mit diesen Schritten können Sie Ihr Testgerät programmatisch registrieren. Achten Sie darauf, die Code, mit dem diese Testgeräte-IDs festgelegt werden, bevor Sie Ihre App veröffentlichen.
- Rufen Sie uns unter
requestConsentInfoUpdateWithParameters:completionHandler:
an. Suchen Sie in der Logausgabe nach einer Nachricht ähnlich dem folgenden Beispiel. Ihre Geräte-ID und wie Sie sie als Testgerät hinzufügen:
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
Kopieren Sie die Testgeräte-ID in die Zwischenablage.
Ändern Sie Ihren Code, Anrufen
UMPDebugSettings().testDeviceIdentifiers
und übergeben Sie eine Liste Ihrer Testgeräte-IDs.Swift
let parameters = UMPRequestParameters() let debugSettings = UMPDebugSettings() debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"] parameters.debugSettings = debugSettings // Include the UMPRequestParameters in your consent request. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { error in ... })
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ]; parameters.debugSettings = debugSettings; // Include the UMPRequestParameters in your consent request. [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError *_Nullable error){ ... }];
Geografie erzwingen
Mit dem UMP SDK können Sie das Verhalten Ihrer App so testen, als wäre das Gerät
sich im EWR oder Vereinigten Königreich befinden, unter Verwendung von the debugGeography
property of type UMPDebugGeography
on UMPDebugSettings
. Beachten Sie, dass
Debug-Einstellungen funktionieren nur auf Testgeräten.
Swift
let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings
// Include the UMPRequestParameters in your consent request.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
with: parameters,
completionHandler: { error in
...
})
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
// Include the UMPRequestParameters in your consent request.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable error){
...
}];
Einwilligungsstatus zurücksetzen
Wenn Sie Ihre App mit dem UMP SDK testen, kann es hilfreich sein, das
Status des SDK, um die erste Installation durch einen Nutzer zu simulieren.
Das SDK bietet dazu die Methode reset
.
Swift
UMPConsentInformation.sharedInstance.reset()
Objective-C
[UMPConsentInformation.sharedInstance reset];