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

GDPR и CCPA

к сведению

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

Закон Европейского союза о защите персональных данных, более известный как GDPR, вступил в силу 25 Мая 2018 года. Это набор правил, разработанный для жителей Европейского союза, о получении контроля над сбором их персональных данных. Любые бизнесы, основанные в Европейском союзе или имеющие пользователей из Европейского союза, обязаны соответствовать закону о защите персональных данных (GDPR) во избежание связанных рисков. Закон California Consumer Privacy Act (CCPA) вступил в силу 1 Января 2020 года. Мы собрали вместе полезную информацию, для того что бы помочь вам лучше понять необходимые шаги в соответсвии вашего приложения требованиям GDRP.

Вы можете узнать больше о GDPR, CCPA и разнице между ними тут.

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

Добавьте Дополнительную Информацию В Вашу Политику Конфиденциальности

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

Для ускорения процесса вы можете воспользоваться генераторами политики конфиденциальности, где вам необходимо будет указать ID, IP адрес и локацию (если вы ее собираете) в поле Personally Identifiable Information you collect (в поле с дополнительной информацией о вашем приложении) а так же как ссылку на политику конфиденциальности Appodeal в поле Link to the privacy policy of third party service providers used by the app.

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

Вам необходимо явно добавить ссылку на вашу политику конфиденциальности в два места: на страницу приложения в app’s store и в ваше приложение.

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

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

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

примечание

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


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

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

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

к сведению

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

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

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

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