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