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