Перейти к основному содержимому
осторожно
Android SDK 3.0.2 устарела. Stable версия - здесь.
Версия: 3.0.2

GDPR и CCPA

подсказка

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

Общее положение о защите данных, более известное как GDPR, вступило в силу 25 мая 2018 года. Это набор правил, призванных дать гражданам ЕС больше контроля над своими личными данными. Любые издатели приложений, которые созданы в ЕС или имеющие пользователей, базирующихся в Европе, обязаны соблюдать GDPR или рискуют столкнуться с большими штрафами. Калифорнийский закон о конфиденциальности потребителей (CCPA) вступил в силу 1 января 2020 года.

к сведению

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

Вы можете получить больше информации о GDPR и CCPA и различиях в этих законах вы можете найти здесь

Шаг 1. Обновление Политики Конфиденциальности

1.1 Убедитесь, Что Ваша Политика Конфиденциальности Включает Информацию О Сборе Рекламных Идентификаторов.​

Не забудьте добавить информацию об IP-адресе и сборе advertising IDs, а также ссылку на политику конфиденциальности Appodeal в политику конфиденциальности вашего приложения в Google Play.

Чтобы ускорить процесс, вы можете использовать генераторы политики конфиденциальности

  • просто вставьте advertising ID, IP address, location (если вы собираете местоположение пользователя) в поле "Personally Identifiable Information you collect"(Личная информация, которую вы собираете) и ссылку на политику конфиденциальности Appodeal в разделе "Ссылка на политику конфиденциальности сторонних поставщиков услуг, используемых приложением".

1.2 Добавьте Политику Конфиденциальности В Свое Мобильное Приложение.​

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

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

к сведению

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

Вот два полезных ресурса, которые вы можете использовать во время работы над соответствием вашего приложения:

примечание

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

Шаг 2. Stack Consent Manager

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

Чтобы получить согласие на сбор персональных данных ваших пользователей, мы предлагаем вам воспользоваться готовым решением - Stack Consent Manager.

Stack Consent Manager поставляется с заранее подготовленным окном согласия, которое вы можете легко показать своим пользователям. Это означает, что вам больше не нужно создавать собственное окно согласия.

к сведению

Начиная с Appodeal SDK 3.0, Stack Consent Manager включен по умолчанию в Appodeal SDK.

примечание

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

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Appodeal.initialize(activity, appKey, adTypes, object : ApdInitializationCallback {
override fun onInitializationFinished(list: List<ApdInitializationError>?) {
// Инициализация Appodeal завершена
}
})
}

Дополнительная Информация

Stack Consent Manager включен в Appodeal SDK по умолчанию. Согласие будет запрошено автоматически при инициализации SDK, и форма согласия будет показана, если это необходимо, без каких-либо дополнительных вызовов.

Также вы можете использовать свой собственный менеджер согласия или использовать наш Stack Consent Manager в ручном режиме.

Обновить Решение Пользователя​

Если вы хотите дать возможность пользователям изменить согласие на сбор персональных данных, то вы можете обновить состояние Consent используя методы:

Appodeal.updateGDPRUserConsent(GDPRUserConsent.Personalized)
Appodeal.updateCCPAUserConsent(CCPAUserConsent.OptIn)
подсказка

Используйте следующие значения, чтобы задать согласие пользователя на GDPR и CCPA.

GDPRUserConsent.Unknown - статус не определен. Консент окно показано не было.

GDPRUserConsent.Personalized - пользователь дал согласие на персонализированную рекламу.

GDPRUserConsent.NonPersonalized - пользователь НЕ дал согласие на персонализированную рекламу.

CCPAUserConsent.Unknown - статус не определен. Консент окно показано не было.

CCPAUserConsent.OptIn - пользователь дал согласие на персонализированную рекламу.

CCPAUserConsent.OptOut - пользователь НЕ дал согласие на персонализированную рекламу.

Вы можете использовать эти методы для предоставления согласия пользователя GDPR / CCPA в любом месте вашего приложения. Найти больше информации о GDPR / CCPA можно здесь.

Вы можете управлять согласием и обновлять его вручную с помощью вызовов Stack Consent Manager.

Обновление Статуса Согласия​

Чтобы обновить согласие, вызовите метод:

override fun onCreate(savedInstanceState: Bundle?) {
ConsentManager.requestConsentInfoUpdate(this, "YOUR_APP_KEY", object: ConsentInfoUpdateListener() {
override fun onConsentInfoUpdated(consent: Consent) {
super.onConsentInfoUpdated(consent)
// Статус согласия пользователя успешно обновлен.
// Инициализируем Appodeal SDK с полученным здесь объектом Consent или показываем окно согласия.
}

override fun onFailedToUpdateConsentInfo(error: ConsentManagerError) {
super.onFailedToUpdateConsentInfo(error)
// Не удалось обновить статус согласия пользователя.
// Инициализируем Appodeal SDK с параметрами по умолчанию.
}
})
}
подсказка

requestConsentInfoUpdate может быть запрошен в любой момент жизненного цикла приложения. Мы рекомендуем запросить его при запуске приложения. Допускается несколько вызовов по запросу.

примечание

Необходимые параметры: YOUR_APP_KEY - Ключ приложения Appodeal, вы можете найти его в вашем личном кабинете;

ConsentInfoUpdateListener - listener для обработки результата запроса.

к сведению

Если информация о согласии успешно обновлена, обновленное согласие предоставляется с помощью метода onConsentInfoUpdated() от ConsentInfoUpdateListener.

Теперь вы можете получать информацию о предыдущем состоянии consent пользователя и зоне регулирования.

// Получить consent status
val consentStatus = consent.status
осторожно

Перед запросом эти параметры находятся в состоянии undefined .

Значение Consent StatusОписанияе
UNKNOWNЗначение не определено (метод requestConsentInfoUpdate() не был вызван)
NON_PERSONALIZEDПользователь не предоставил согласие на персонифицированную рекламу.
PARTLY_PERSONALIZEDПользователь частично(для нескольких рекламных сетей) дал согласие на персонализированную рекламу.
PERSONALIZEDПользователь предоставил согласие на персонифицированную рекламу.

Необходимость Отображения Окна Согласия​

После вызова метода onConsentInfoUpdated вам необходимо определить, подпадают ли ваши пользователи под действие GDPR и CCPA и следует ли показывать окно согласия на сбор персональных данных.

примечание

Вы можете проверить, нужно ли показывать диалоговое окно согласия или нет. Перед запросом requestConsentInfoUpdate эти параметры не определены и возвращают false.

// Получить текущий статус ShouldShow 
var consentShouldShow = ConsentManager.shouldShow
if (consentShouldShow) {
// Показать окно согласия
}

Отображение Окна Согласия​

SDK позволяет показывать окно согласия только после вызова requestConsentInfoUpdate.

После запроса SDK вы можете сформировать и загрузить окно согласия. Загрузка разрешена для любой з оны регулирования и не зависит от предыдущего согласия пользователя.

примечание

Обязательный параметр Context.

Опциональный параметр ConsentFormListener.

// Создать ConsentFormListener
val consentFormListener = object : ConsentFormListener() {
override fun onConsentFormLoaded(consentForm: ConsentForm) {
// Форма согласия была загружена. Теперь вы можете отобразить форму согласия как активность или как диалог
}

override fun onConsentFormError(error: ConsentManagerError) {
// Не удалось загрузить или показать форму согласия. Более подробную информацию можно найти в объекте 'error'
// Инициализируем Appodeal SDK с параметрами по умолчанию.
}

override fun onConsentFormOpened() {
// Форма согласия была показана
}

override fun onConsentFormClosed(consent: Consent) {
// Consent form was closed, you may initialize Appodeal SDK here
}
}


// Создание нового экземпляра ConsentForm
val consentForm = ConsentForm(this, consentFormListener)
// Загрузка ConsentForm
consentForm.load()

Вы можете проверить, готово ли к показу окно согласия:

// Указывает, что окно согласия готово к показу
val loaded = consentForm.isLoaded

Вы можете проверить, показывается ли окно согласия:

// Указывает, что окно согласия показывается
val showing = consentForm.isShowing

После того, как окно согласия будет доступно, вы можете его показать:

// Показать СonsentForm
consentForm.show()
примечание

После первого показа окна согласия параметр ConsentManager.shouldShow будет иметь значение FALSE в следующих сессиях.

Обновить значение Сonsent​

Если вы хотите дать возможность пользователям изменить согласие на сбор персональных данных, то вы можете обновить состояние Consent используя методы:

Appodeal.updateConsent(consent)

Advanced​

подсказка

Вы можете записывать ключи iAB в SharedPreference через consent manager, настроив хранилище перед запросом в ConsentManager.Storage

к сведению

SDK не удаляет ключи iAB из SharedPreference, а только переопределяет их.

// Указать хранилище
ConsentManager.storage = ConsentManager.Storage.SHARED_PREFERENCE
// Получить хранилище
val iabStorage = ConsentManager.storage

Пример Использования​

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

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestConsentUpdate()
}

fun initializeAppodeal() {
// Используйте этот метод для предотвращения лишних запросов ConsentInfoUpdate.
Appodeal.initialize(this, appKey, adTypes)
}

fun showConsent() {
val consentFormListener = object : ConsentFormListener() {
override fun onConsentFormLoaded(consentForm: ConsentForm) {
// Форма согласия была загружена. Теперь можно отобразить форму согласия.
consentForm.show()
}

override fun onConsentFormError(error: ConsentManagerError) {
// Не удалось загрузить или показать форму согласия. Более подробную информацию можно найти в объекте 'error'
// Инициализируем Appodeal SDK здесь.
initializeAppodeal()
}

override fun onConsentFormOpened() {
// Форма согласия показана.
}

override fun onConsentFormClosed(consent: Consent) {
// Форма согласия была закрыта. Обновите здесь значение согласия.
Appodeal.updateConsent(consent)
// Инициализируйте Appodeal SDK здесь.
initializeAppodeal()
}
}

// Создание нового экземпляра ConsentForm.
val consentForm = ConsentForm(this, consentFormListener)

// Загрузить ConsentForm.
consentForm.load()
}

fun requestConsentUpdate() {
// Обновить статус согласия. Требуется для отображения ConsentForm.
ConsentManager.requestConsentInfoUpdate(this, appKey, object : ConsentInfoUpdateListener() {
override fun onConsentInfoUpdated(consent: Consent) {
super.onConsentInfoUpdated(consent)
// Статус согласия пользователя успешно обновлен.
// Показать окно согласия для получения согласия пользователя.
if (ConsentManager.shouldShow) {
showConsent()
} else {
// Инициализируйте Appodeal SDK здесь.
initializeAppodeal()
}
}

override fun onFailedToUpdateConsentInfo(error: ConsentManagerError) {
super.onFailedToUpdateConsentInfo(error)
// Не удалось обновить статус согласия пользователя.
// Инициализируйте Appodeal SDK здесь.
initializeAppodeal()
}
})

}

Свое Окно Согласия​

Если вы не хотите использовать Stack Content Manager SDK, вы можете использовать другое решение для получения согласия пользователя и предоставить его перед инициализацией Appodeal SDK.

Необходимо передать согласие перед методом инициализации нашего SDK, используя следующие методы:

Appodeal.updateGDPRUserConsent(GDPRUserConsent.Personalized)
Appodeal.updateCCPAUserConsent(CCPAUserConsent.OptIn)
подсказка

Используйте следующие значения, чтобы задать согласие пользователя на GDPR и CCPA:

GDPRUserConsent.Unknown - статус не определен. Консент окно показано не было.

GDPRUserConsent.Personalized - пользователь дал согласие на персонализированную рекламу.

GDPRUserConsent.NonPersonalized - пользователь НЕ дал согласие на персонализированную рекламу.

CCPAUserConsent.Unknown - статус не определен. Консент окно показано не было.

CCPAUserConsent.OptIn - пользователь дал согласие на персонализированную рекламу.

CCPAUserConsent.OptOut - пользователь НЕ дал согласие на персонализированную рекламу.

примечание

Предоставление значений согласия перед инициализацией предотвращает встроенное отображение окна согласия. Вы должны использовать этот подход, чтобы отключить показ окно согласия в зонах GDPR / CCPA, или если вы хотите, чтобы пользователь мог изменить свое решение.