Получение согласия с Платформой обмена сообщениями пользователей

Предпосылки

ПрочитайтеКак требования IAB влияют на запросы согласия ЕС .

Введение

UMP SDK предоставляет издателям инструменты для запроса согласия на персонализированную рекламу, а также для выполнения требований Apple к прозрачности отслеживания приложений (ATT). Издатели могут использовать UMP SDK для обработки одного или обоих этих запросов, показывая единую форму, так как вся настройка происходит вКонфиденциальность и обмен сообщениями AdMob .

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

Чтобы помочь издателям выполнять свои обязанности в соответствии с этой политикой, Google предлагает SDK User Messaging Platform (UMP), который заменяет предыдущий SDK Consent с открытым исходным кодом . UMP SDK был обновлен для поддержки последних стандартов IAB. Мы также упростили процесс настройки форм согласия и перечисления рекламных партнеров. Все эти настройки теперь можно легко настроить вКонфиденциальность и обмен сообщениями AdMob .

В этом руководстве рассказывается, как установить SDK, внедрить решения IAB и включить функции тестирования.

Импорт SDK

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

UMP SDK входит в состав модуля Google Mobile Ads SDK, начиная с версии Google Mobile Ads SDK 7.64.0.

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

pod 'Google-Mobile-Ads-SDK'

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

pod install --repo-update

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

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

Скачать SDK

Затем перетащите фреймворк в свой проект Xcode, убедившись, что вы выбрали « Копировать элементы», если это необходимо .

Затем вы можете включить фреймворк в любой файл, который вам нужен, используя:

Быстрый

import UserMessagingPlatform

Цель-C

#include <UserMessagingPlatform/UserMessagingPlatform.h>

Обновите свой Info.plist

Добавьте идентификатор приложения в Info.plist

Получите идентификатор приложения, следуя инструкциям Справочного центра .

Добавьте идентификатор своего приложения в Info.plist:

<key>GADApplicationIdentifier</key>
<string>YOUR-APP-ID</string>

Прозрачность отслеживания приложений

Если вы планируете использовать UMP SDK для выполнения требований Apple к прозрачности отслеживания приложений, убедитесь, что вы создали, настроили и опубликовали сообщение ATT с помощьюКонфиденциальность и обмен сообщениями AdMob .

Чтобы UMP SDK отображал пользовательское предупреждающее сообщение, обновите свой Info.plist , добавив ключ NSUserTrackingUsageDescription с пользовательской строкой сообщения, описывающей ваше использование.

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

Описание использования появляется как часть диалогового окна ATT, когда вы предъявляете форму согласия:

Далее вам нужно связать структуру AppTrackingTransparency :

Во время тестирования помните, что в соответствии с требованиями Apple диалоговое окно IDFA ATT будет отображаться только один раз, поскольку requestTrackingAuthorization: — это одноразовый запрос. Чтобы оповещение появилось во второй раз, необходимо удалить и переустановить приложение на тестовом устройстве.

Использование SDK

SDK предназначен для линейного использования. Шаги для использования SDK:

  1. Запросить последнюю информацию о согласии.
  2. Проверьте, требуется ли согласие.
  3. Проверьте, доступна ли форма, и если да, загрузите форму.
  4. Представить форму.
  5. Предоставьте пользователям возможность изменить свое согласие.

Рекомендуется запрашивать обновление информации о согласии при каждом запуске приложения. Это определит, должен ли ваш пользователь предоставить согласие.

Этот метод следует вызывать только из основного потока.

Быстрый

// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
// Set tag for under age of consent. Here false means users are not under age.
parameters.tagForUnderAgeOfConsent = false

// Request an update to the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      if error != nil {
        // Handle the error.
      } else {
        // The consent information state was updated.
        // You are now ready to check if a form is
        // available.
      }
    })

Цель-C

// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. Here NO means users are not under age.
parameters.tagForUnderAgeOfConsent = NO;

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error) {
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to check if a form is
                             // available.
                           }
                         }];

Загрузите форму, если она доступна

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

Формы для получения согласия создаются в пользовательском интерфейсе AdMob. После того, как вы решили, что будете запрашивать согласие пользователя, следующим шагом будет определение доступности формы. Существует множество причин, по которым форма может быть недоступна, например:

  • У пользователя включено ограничение отслеживания рекламы.
  • Вы отметили пользователя как младше возраста согласия.

Чтобы проверить, доступна ли форма, используйте свойство formStatus в UMPConsentInformation , которое возвращает перечисление типа UMPFormStatus . Есть три возможных значения для UMPFormStatus :

  • UMPFormStatusUnknown : статус формы неизвестен. Вы должны вызвать requestConsentInfoUpdateWithParameters:completionHandler: в этом случае.
  • UMPFormStatusAvailable : форма согласия доступна и может быть загружена.
  • UMPFormStatusUnavailable : форма согласия недоступна.

Добавьте метод-оболочку для загрузки формы следующим образом:

Быстрый

// Request an update to the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    withParameters: parameters,
    completionHandler: { [self] error in

      // The consent information has updated.
      if error != nil {
        // Handle the error.
      } else {
        // The consent information state was updated.
        // You are now ready to see if a form is available.
        let formStatus = UMPConsentInformation.sharedInstance.formStatus
        if formStatus == UMPFormStatus.available {
          loadForm()
        }
      }
    })
...
func loadForm() {

}

Цель-C

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError* _Nullable error) {

                           // The consent information has updated.
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to see if a form is available.
                             UMPFormStatus formStatus =
                                 UMPConsentInformation.sharedInstance
                                     .formStatus;
                             if (formStatus == UMPFormStatusAvailable) {
                               [self loadForm];
                             }
                           }
                         }];
...
- (void) loadForm {

}

Чтобы загрузить форму, вы будете использовать статический метод loadWithCompletionHandler: в классе UMPConsentForm . Этот метод должен вызываться только из основного потока. Измените метод loadForm следующим образом:

Быстрый

func loadForm() {
  UMPConsentForm.load(
      withCompletionHandler: { form, loadError in
        if loadError != nil {
          // Handle the error
        } else {
          // Present the form
        }
      })
}

Цель-C

- (void)loadForm {
  [UMPConsentForm
      loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) {
        if (loadError) {
          // Handle the error
        } else {
          // Present the form
        }
      }];
}

Предъявите форму, если требуется

Чтобы представить форму согласия, используйте метод presentFromViewController:completionHandler: класса UMPConsentForm . Вы должны определить, требуется ли пользователю согласие до представления формы. Чтобы проверить, требуется ли согласие, проверьте свойство consentStatus объекта UMPConsentInformation , которое возвращает перечисление типа UMPConsentStatus . Есть четыре возможных значения для UMPConsentStatus :

  • UMPConsentStatusUnknown : Неизвестный статус согласия.
  • UMPConsentStatusRequired : требуется согласие пользователя, но оно еще не получено.
  • UMPConsentStatusNotRequired : согласие пользователя не требуется. Например, пользователь не находится в ЕЭЗ или Великобритании.
  • UMPConsentStatusObtained : согласие пользователя получено. Персонализация не определена.

Измените метод loadForm следующим образом:

Быстрый

func loadForm() {
  UMPConsentForm.load(withCompletionHandler: { form, loadError in
    if loadError != nil {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required {
        form?.present(
            from: self,
            completionHandler: { dismissError in
              if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained {
                // App can start requesting ads.
              }

            })
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  })
}

Цель-C

- (void)loadForm {
  [UMPConsentForm loadWithCompletionHandler:^(UMPConsentForm *form,
                                              NSError *loadError) {
    if (loadError) {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if (UMPConsentInformation.sharedInstance.consentStatus ==
          UMPConsentStatusRequired) {
        [form
            presentFromViewController:self
                    completionHandler:^(NSError *_Nullable dismissError) {
                      if (UMPConsentInformation.sharedInstance.consentStatus ==
                          UMPConsentStatusObtained) {
                        // App can start requesting ads.
                      }

                    }];
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  }];
}

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

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

Заставить географию

UMP SDK предоставляет простой способ проверить поведение вашего приложения, как если бы устройство находилось в ЕЭЗ или Великобритании, используя свойство debugGeography типа UMPDebugGeography в UMPDebugSettings .

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

Быстрый

let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = UMPDebugGeography.EEA
parameters.debugSettings = debugSettings
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      ...
    })

Цель-C

UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error){
                           ...
}];

Чтобы заставить SDK обрабатывать устройство так, как будто оно не находится в ЕЭЗ или Великобритании, используйте UMPDebugGeographyNotEEA . Обратите внимание, что настройки отладки работают только на тестовых устройствах. Эмуляторы не нужно добавлять в список идентификаторов устройств, поскольку по умолчанию для них включено тестирование.

При тестировании приложения с помощью UMP SDK может оказаться полезным сбросить состояние SDK, чтобы можно было имитировать первую установку пользователя. SDK предоставляет для этого метод reset .

Быстрый

UMPConsentInformation.sharedInstance.reset()

Цель-C

[UMPConsentInformation.sharedInstance reset];

Вам также следует вызвать reset, если вы решите полностью удалить UMP SDK из своего проекта.

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

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

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

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

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

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

Посредничество

Если вы используете посредничество, вам нужно будет обрабатывать согласие для ваших партнеров по посредничеству по-разному в зависимости от структуры согласия, которую вы решили использовать в своем приложении. Google поддерживает платформу согласия IAB, но также позволяет вам иметь собственное решение для получения согласия. Ниже приведены подробные сведения о том, как обращаться с посредничеством в рамках каждого из этих вариантов.Узнайте больше о нашем решении для получения согласия .

Ни UMP SDK, ни Mobile Ads SDK не передают информацию о согласии партнерам по посредничеству. Вместо этого при использовании решения IAB UMP SDK записывает информацию о состоянии согласия в локальное хранилище, и за чтение соответствующих ключей отвечает SDK каждого партнера по посредничеству. Обязательно проверьте каждую стороннюю сеть, чтобы определить, поддерживают ли они решение IAB.

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

Код в этом разделе можно использовать с любой версией 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, которые могут быть изменены.