Запрос согласия от европейских пользователей

В соответствии с Политикой Google в отношении согласия пользователей из ЕС вы должны раскрывать определенную информацию своим пользователям в Европейской экономической зоне (ЕЭЗ) и получать их согласие на использование файлов cookie или других локальных хранилищ, если это требуется по закону, а также на использование личных данных (например, AdID). для показа рекламы. Эта политика отражает требования Директивы ЕС по электронной конфиденциальности и Общего регламента по защите данных (GDPR).

Чтобы помочь издателям выполнять свои обязанности в соответствии с этой политикой, Google предлагает Consent SDK. Consent SDK — это библиотека с открытым исходным кодом, которая предоставляет служебные функции для сбора согласия от ваших пользователей. Полный исходный код доступен наGitHub .

Объявления, предоставляемые Google, могут быть классифицированы как персонализированные или неперсонализированные, и в обоих случаях требуется согласие пользователей в ЕЭЗ. По умолчанию запросы объявлений в Google показывают персонализированную рекламу с выбором рекламы на основе ранее собранных данных пользователя. Google также поддерживает настройку запросов объявлений для показа неперсонализированной рекламы.Узнайте больше о персонализированной и неперсонализированной рекламе .

В этом руководстве описывается, как использовать Consent SDK для получения согласия пользователей. В нем также описывается, как передать согласие Google Mobile Ads SDK после его получения.

Предпосылки

CocoaPods (желательно)

Самый простой способ импортировать SDK в проект iOS — с помощью CocoaPods . Откройте Podfile вашего проекта и добавьте эту строку в цель вашего приложения:

pod 'PersonalizedAdConsent'

Затем из командной строки запустите:

pod install --repo-update

Если вы новичок в CocoaPods, ознакомьтесь с их официальной документацией , чтобы узнать, как создавать и использовать подфайлы.

Ручная загрузка

Вы также можете загрузить или клонировать исходный код SDK напрямую и следовать этим инструкциям, чтобы включить его в свой проект:

  1. Из Finder перетащите файл PersonalizedAdConsent.xcodeproj в свой проект.

  2. Перейдите на вкладку Этапы сборки . В разделе Target Dependencies нажмите кнопку + и добавьте цель PersonalizedAdConsent .

  3. Щелкните правой кнопкой мыши свой проект и выберите Добавить файлы в «Мой проект» . Перейдите к PersonalizedAdConsent.bundle . Обязательно установите флажок Создать ссылки на папки .

    После завершения вы должны увидеть PersonalizedAdConsent.bundle в списке на вкладке « Фазы сборки » в разделе « Копировать ресурсы пакета ».

Прежде чем использовать какие-либо другие методы в Consent SDK, вам следует обновить статус согласия , чтобы убедиться, что Consent SDK содержит самую свежую информацию о поставщиках рекламных технологий, выбранных вами в пользовательском интерфейсеAdMob . Если список поставщиков рекламных технологий изменился с момента последнего предоставления согласия пользователем, состояние согласия снова становится неизвестным.

Если вы не используете медиацию

Если вы не используете посредничество, у вас есть два варианта реализации Consent SDK для получения согласия.

Одним из вариантов является использование Consent SDK для представления пользователям формы согласия, созданной Google . В форме согласия отображается список поставщиков рекламных технологий, выбранных вами в пользовательском интерфейсе AdMob. Consent SDK хранит ответ пользователя о согласии.

Другой вариант — использовать Consent SDK для динамического получения полного списка поставщиков рекламных технологий из AdMob, ​​как описано в разделе о сборе согласия, управляемом издателем . Однако в этом случае вам нужно будет определить, как список поставщиков должен быть доступен вашим пользователям, и предоставить пользователям собственную форму согласия.

После того как пользователь сделал выбор согласия, вы можете попросить Consent SDK сохранить выбор согласия пользователя, как описано в разделе Хранение согласия, управляемого издателем .

Если после получения согласия пользователь дал согласие на получение только неперсонализированной рекламы, вам потребуется передать согласие в Google Mobile Ads SDK .

Если вы используете посредничество AdMob

Вы можете использовать Consent SDK для динамического получения полного списка поставщиков рекламных технологий из AdMob, как описано в разделе о сборе согласия, управляемом издателем . Вам нужно будет определить, какие дополнительные поставщики рекламных технологий из других рекламных сетей должны быть представлены вашим пользователям для получения согласия.

Как разработчик приложения, вам необходимо получить согласие пользователей как для поставщиков рекламных технологий, возвращенных Consent SDK, так и для поставщиков из других рекламных сетей. Вам также потребуется вручную сохранить ответы пользователей на согласие и перенаправить согласие в Google Mobile Ads SDK , если пользователь дал согласие на получение только неперсонализированной рекламы.

В настоящее время Google не может получить и обработать согласие для посреднических сетей, поэтому вам потребуется получать и обрабатывать согласие для каждой рекламной сети отдельно. Подробнее о внедрении см. в руководстве по интеграции каждого партнера-посредника.

Обновить статус согласия

При использовании Consent SDK рекомендуется определять статус согласия пользователя при каждом запуске приложения . Для этого вызовите requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: для экземпляра PACConsentInformation .

Быстрый

import PersonalizedAdConsent
...
class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    PACConsentInformation.sharedInstance.
    requestConsentInfoUpdate(
    forPublisherIdentifiers: ["pub-0123456789012345"])
    {(_ error: Error?) -> Void in
      if let error = error {
        // Consent info update failed.
      } else {
        // Consent info update succeeded. The shared PACConsentInformation
        // instance has been updated.
      }
    }
  }

Цель-C

#import <PersonalizedAdConsent/PersonalizedAdConsent.h>
...
@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [PACConsentInformation.sharedInstance
      requestConsentInfoUpdateForPublisherIdentifiers:@[ @"pub-0123456789012345" ]
          completionHandler:^(NSError *_Nullable error) {
            if (error) {
              // Consent info update failed.
            } else {
              // Consent info update succeeded. The shared PACConsentInformation
              // instance has been updated.
            }
          }];
}

Вызов requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: требует двух аргументов:

  • Массив действительных, полностью активированных идентификаторов издателя, у которых ваше приложение запрашивает рекламу.Найдите свой идентификатор издателя .

  • Блок, который принимает NSError в качестве входного параметра, который предоставляет информацию о неудачном запросе на обновление согласия.

Если информация о согласии успешно обновлена, PACConsentInformation.sharedInstance.consentStatus предоставляет обновленный статус согласия. Он может иметь следующие значения:

Состояние согласия Определение
PACConsentStatusPersonalized Пользователь дал согласие на персонализированную рекламу.
PACConsentStatusNonPersonalized Пользователь дал согласие на показ неперсонализированной рекламы.
PACConsentStatusUnknown Пользователь не давал и не отклонял согласие на персонализированную или неперсонализированную рекламу.

После успешного обновления информации о согласии вы также можете проверить PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown , чтобы узнать, находится ли пользователь в Европейской экономической зоне или местоположение запроса неизвестно.

Если свойство requestLocationInEEAOrUnknown имеет значение NO , пользователь не находится в Европейской экономической зоне и согласие не требуется в соответствии с Политикой согласия пользователей ЕС . Вы можете отправлять запросы объявлений в Google Mobile Ads SDK.

Если свойство requestLocationInEEAOrUnknown равно YES :

  • Если PACConsentStatus имеет PACConsentStatusPersonalized или PACConsentStatusNonPersonalized , пользователь уже дал свое согласие. Теперь вы можете передать согласие Google Mobile Ads SDK .

  • Если у пользователя есть согласие PACConsentStatusUnknown , см. раздел « Сбор согласия» ниже, в котором описывается использование служебных методов для получения согласия.

GoogleСогласие SDK .предоставляет два способа получения согласия от пользователя:

Не забудьте предоставить пользователям возможность изменить или отозвать согласие .

Форма согласия, созданная Google, представляет собой полноэкранную настраиваемую форму, которая отображается поверх контента вашего приложения. Вы можете настроить форму для предоставления пользователю комбинации следующих параметров:

  • Согласие на просмотр персонализированной рекламы
  • Согласие на просмотр неперсонализированной рекламы
  • Используйте платную версию приложения вместо просмотра рекламы

Вам следует внимательно просмотреть текст согласия: по умолчанию появляется сообщение, которое может быть уместным, если вы используете Google для монетизации своего приложения; но мы не можем предоставить юридическую консультацию по тексту согласия, который подходит именно вам. Чтобы обновить текст согласия в форме согласия, отображаемой Google, измените файл согласия consentform.html , включенный в Consent SDK, как требуется.

Форма согласия, отображаемая Google, настраивается и отображается с помощью класса PACConsentForm . В следующем коде показано, как создать PACConsentForm со всеми тремя параметрами формы:

Быстрый

// TODO: Replace with your app's privacy policy url.
guard let privacyUrl = URL(string: "https://www.your.com/privacyurl"),
  let form = PACConsentForm(applicationPrivacyPolicyURL: privacyUrl) else {
    print("incorrect privacy URL.")
    return
}
form.shouldOfferPersonalizedAds = true
form.shouldOfferNonPersonalizedAds = true
form.shouldOfferAdFree = true

Цель-C

// TODO: Replace with your app's privacy policy url.
NSURL *privacyURL = [NSURL URLWithString:@"https://www.your.com/privacyurl"];
PACConsentForm *form = [[PACConsentForm alloc] initWithApplicationPrivacyPolicyURL:privacyURL];
form.shouldOfferPersonalizedAds = YES;
form.shouldOfferNonPersonalizedAds = YES;
form.shouldOfferAdFree = YES;

Свойства PACConsentForm более подробно описаны ниже:

shouldOfferPersonalizedAds
Указывает, следует ли отображать в форме согласия вариант персонализированной рекламы. По умолчанию YES .
shouldOfferNonPersonalizedAds
Указывает, следует ли отображать в форме согласия параметр неперсонализированной рекламы. По умолчанию YES .
shouldOfferAdFree
Указывает, должна ли форма согласия отображать вариант приложения без рекламы. По умолчанию NO .

После создания и настройки объекта PACConsentForm загрузите форму согласия, вызвав loadWithCompletionHandler: метод PACConsentForm , как показано ниже:

Быстрый

form.load {(_ error: Error?) -> Void in
  print("Load complete.")
  if let error = error {
    // Handle error.
    print("Error loading form: \(error.localizedDescription)")
  } else {
    // Load successful.
  }
}

Цель-C

[form loadWithCompletionHandler:^(NSError *_Nullable error) {
  NSLog(@"Load complete. Error: %@", error);
  if (error) {
    // Handle error.
  } else {
    // Load successful.
  }
}];

Чтобы представить пользователю форму согласия, созданную Google, вызовите presentFromViewController:dismissCompletion: в загруженном PACConsentForm , как показано ниже:

Быстрый

form.present(from: self) { (error, userPrefersAdFree) in
      if let error = error {
        // Handle error.
      } else if userPrefersAdFree {
        // User prefers to use a paid version of the app.
      } else {
        // Check the user's consent choice.
        let status =
             PACConsentInformation.sharedInstance.consentStatus
      }
    }

Цель-C

 [form presentFromViewController:self
     dismissCompletion:^(NSError *_Nullable error, BOOL userPrefersAdFree) {
       if (error) {
         // Handle error.
       } else if (userPrefersAdFree) {
         // The user prefers to use a paid version of the app.
       } else {
         // Check the user's consent choice.
         PACConsentStatus status =
             PACConsentInformation.sharedInstance.consentStatus;
       }
     }];

Вызов presentFromViewController:dismissCompletion: требует двух аргументов:

  • UIViewController для представления.

  • Блок, который принимает NSError и BOOL в качестве входных параметров. NSError предоставляет информацию, если произошла ошибка при отображении формы согласия. Логический BOOL userPrefersAdFree имеет значение YES , когда пользователь решил использовать платную версию приложения вместо просмотра рекламы.

После того, как пользователь выберет вариант и закроет форму, Consent SDK сохранит выбор пользователя и вызовет блок dismissCompletion: Вы можете прочитать выбор пользователя и передать согласие Google Mobile Ads SDK .

Сбор согласия, управляемый издателем

Если вы решите получить согласие самостоятельно, вы можете использовать свойство adProviders класса PACConsentInformation , чтобы получить поставщиков рекламных технологий, связанных с идентификаторами издателя, используемыми в вашем приложении. Обратите внимание, что согласие требуется для полного списка поставщиков рекламных технологий, настроенных для ваших идентификаторов издателя.

Прежде чем вы получите доступ к свойству adProviders PACConsentInformation , вы должны дождаться успешного обновления статуса согласия пользователя, как описано в разделе Обновление статуса согласия .

Быстрый

let adProviders = PACConsentInformation.sharedInstance.adProviders

Цель-C

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

Затем вы можете использовать список поставщиков рекламы, чтобы получить согласие самостоятельно.

Получив согласие, запишите PACConsentStatus , соответствующий ответу пользователя, используя свойство status класса PACConsentInformation .

Быстрый

PACConsentInformation.sharedInstance.consentStatus = .personalized

Цель-C

PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;

Сообщив о согласии с Consent SDK, вы можете передать его Google Mobile Ads SDK .

Чтобы позволить пользователям обновить свое согласие, просто повторите шаги, описанные в разделе « Получить согласие », когда пользователь решит обновить свой статус согласия.

Если издатель знает, что пользователь не достиг возраста согласия, во всех запросах объявлений должен быть установлен TFUA (тег для пользователей, не достигших возраста согласия в Европе). Чтобы включить этот тег во все запросы объявлений из вашего приложения,задает для свойства tagForUnderAgeOfConsent значение YES . Эта настройка действует для всех будущих запросов объявлений.

Быстрый

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

Цель-C

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

После включения параметра TFUA форма согласия, отображаемая Google, не сможет загрузиться. Все запросы объявлений, включающие TFUA, будут лишены права на персонализированную рекламу и ремаркетинг. TFUA отключает запросы к сторонним поставщикам рекламных технологий, таким как пиксели измерения рекламы и сторонние рекламные серверы.

Чтобы удалить TFUA из запросов объявлений,задает для свойства tagForUnderAgeOfConsent значение NO .

Тестирование

Consent SDK ведет себя по-разному в зависимости от значенияPACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown .Например, форма согласия не загружается, если пользователь не находится в ЕЭЗ.

Чтобы облегчить тестирование вашего приложения как внутри, так и за пределами ЕЭЗ, пакет Consent SDK поддерживает параметры отладки, которые вы можете установить перед вызовом любых других методов в Consent SDK.

  1. Получите рекламный идентификатор вашего устройства. Вы можете использовать следующий код для регистрации своего рекламного идентификатора:

    #import <AdSupport/AdSupport.h>
    // ...
    
    NSLog(@"Advertising ID: %@",
          ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString);

    А затем проверьте консоль, чтобы получить его:

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
  2. Назначьте свое устройство тестовым с помощью рекламного идентификатора из консоли:

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. Наконец, установите для параметра debugGeography географию для целей тестирования.

    // Geography appears as in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyEEA;
    // Geography appears as not in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyNotEEA;

После выполнения этих шагов вызовы для обновления статуса согласия будут учитывать вашу географию отладки.

Код в этом разделе можно использовать с любой версией Google Mobile Ads SDK. Его также можно использовать независимо от того, использовали ли вы Consent SDK для получения согласия.

По умолчанию Google Mobile Ads SDK показывает персонализированную рекламу. Если пользователь дал согласие на получение только неперсонализированной рекламы, вы можете настроить объект GADRequest , чтобы указать, что следует запрашивать только неперсонализированную рекламу. Следующий код вызывает запрос неперсонализированной рекламы независимо от того, находится ли пользователь в ЕЭЗ:

Быстрый

let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "1"]
request.register(extras)

Цель-C

GADRequest *request = [GADRequest request];
GADExtras *extras = [[GADExtras alloc] init];
extras.additionalParameters = @{@"npa": @"1"};
[request registerAdNetworkExtras:extras];

Если запрашивается неперсонализированная реклама, URL-адрес запроса рекламы в настоящее время включает &npa=1 . Однако обратите внимание, что это внутренние детали реализации Google Mobile Ads SDK, которые могут быть изменены.

Измерение задержки в приложении (необязательно)

По умолчанию Google Mobile Ads SDK инициализирует измерение приложения и начинает отправлять данные о событиях на уровне пользователя в Google сразу после запуска приложения.Такое поведение при инициализации позволяет включить пользовательские показатели AdMob без внесения дополнительных изменений в код.

Однако, если ваше приложение требует согласия пользователя, прежде чем эти события могут быть отправлены, вы можете отложить измерение приложения, пока вы явно не инициализируете Mobile Ads SDK или не загрузите рекламу.

Чтобы отложить измерение приложений, добавьте ключ GADDelayAppMeasurementInit с логическим значением YES в файл Info.plist вашего приложения. Вы можете внести это изменение программно:

<key>GADDelayAppMeasurementInit</key>
<true/>

Или отредактируйте его в редакторе списка свойств:

Часто задаваемые вопросы

Сколько поставщиков рекламных технологий поддерживает Consent SDK?
Consent SDK не накладывает ограничений на количество поставщиков рекламных технологий, которых издатель выбирает для включения.
Обновляется ли список поставщиков рекламных технологий, возвращаемый SDK, автоматически, если я изменяю свой выбор в пользовательском интерфейсе AdMob ?
Да, если вы внесете изменения в список поставщиков рекламных технологий в пользовательском интерфейсеAdMob , изменения будут распространены на рекламные серверы Google примерно через час.