GDPR и CCPA
Пожалуйста, обратите внимание, что лучше всего обратиться к квалифицированным юристам, чтобы получить дополнительную информацию и быть хорошо подготовленным к соблюдению требований.
Закон Европейского союза о защите персональных данных, более известный как GDPR, вступил в силу 25 Мая 2018 года. Это набор правил, разработанный для жителей Европейского союза, о получении контроля над сбором их персональных данных. Любые бизнесы, основанные в Европейском союзе или имеющие пользователей из Европейского союза, обязаны соответствовать закону о защите персональных данных (GDPR) во избежание связанных рисков. Закон California Consumer Privacy Act (CCPA) вступил в силу 1 Января 2020 года. Мы собрали вместе полезную информацию, для того что бы помочь вам лучше понять необходимые шаги в соответсвии вашего приложения требованиям GDRP.
Шаг 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-сертификат — это пункт может казаться очевидным, но это важно.
Ниже вы можете найти две ссылки на ресурсы, которые вы можете использовать во время работы над соответствием вашего приложения:
- Privacy, Security and Deception regulations (by Google Play)
- Recommendations on Developing a Meaningful Privacy Policy (by Attorney General California Department of Justice)
Пожалуйста, обратите внимание, что, хотя мы всегда готовы предоставить вам ценную информацию, мы не уполномочены предоставлять какие-либо юридические консультации. Важно адресовать свои вопросы юристам, которые работают в соответствующей области.
Шаг 2. Настройка Stack Consent Manager c поддержкой TCF v2
Начиная с версии 3.2.1
Appodeal SDK полностью совместим с Google UMP и поддерживает IAB TCF v2.
В соответствии с Appodeal и рекламными сетями в предоставлении наиболее подходящей мобильной рекламы конечному пользователю, вам необходимо запрашивать соглашение в регионах GDPR.
Чтобы получить согласие на сбор персональных данных ваших пользователей, мы предлагаем воспользоваться готовым решением - Stack Consent Manager, основанном на Google User Messaging Platform (UMP).
Перед началом работы, требуется настроить Google UMP. Воспользуйтесь этой инструкцией для настройки окна согласия.
Шаг 3. Интеграция Stack Consent Manager
Библиотека Stack Consent Manager включает разработанное окно согласия, показ которого вы можете предоставлять конечному пользователю. Это означает что вам больше не требуется создавать данное окно согласия самостоятельно.
Начиная с Appodeal SDK 3.0, Stack Consent Manager включен в состав Appodeal SDK по умолчанию.
Согласие будет запрошено автоматически при инициализации SDK, и форма согласия будет показана, если это необходимо, без дополнительных вызовов.
Имейте в виду, что Согласие будет отображаться только в регионах ЕС, вы можете использовать VPN для тестирования.
Это означает, что код интеграции Appodeal SDK остается прежним:
- Kotlin
- Java
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Appodeal.initialize(activity, appKey, adTypes, object : ApdInitializationCallback {
override fun onInitializationFinished(list: List<ApdInitializationError>?) {
// Инициализация Appodeal завершена
}
})
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Appodeal.initialize(activity, appKey, adTypes, new ApdInitializationCallback() {
@Override public void onInitializationFinished(List<? extends ApdInitializationError> list) {
// Инициализация Appodeal завершена
}
});
}
Дополнительно
Stack Consent Manager включен в Appodeal SDK по умолчанию. Согласие будет запрошено автоматически при инициализации SDK, и форма согласия будет показана, если это необходимо, без каких-либо дополнительных вызовов.
Также вы можете использовать свой собственный менеджер согласия или использовать наш Stack Consent Manager в ручном режиме.
Обновление Статуса Согласия
Вы можете управлять согласием и обновлять его вручную с помощью вызовов Stack Consent Manager.
Чтобы обновить согласие, вызовите метод:
- Kotlin
- Java
override fun onCreate(savedInstanceState: Bundle?) {
ConsentManager.requestConsentInfoUpdate(
parameters = ConsentUpdateRequestParameters(
activity = YourActivity@ this,
key = YOUR_APP_KEY,
tagForUnderAgeOfConsent = false,
sdk = "Appodeal",
sdkVersion = Appodeal.getVersion()
),
callback = object : ConsentInfoUpdateCallback {
override fun onUpdated() {
// Статус согласия пользователя успешно обновлен.
}
override fun onFailed(error: ConsentManagerError) {
// Инициализируйте Appodeal SDK с параметрами по умолчанию.
}
}
)
}
@Override
protected void onCreate(Bundle savedInstanceState) {
ConsentManager.requestConsentInfoUpdate(
new ConsentUpdateRequestParameters(
YourActivity.this,
YOUR_APP_KEY,
false,
"Appodeal",
Appodeal.getVersion()),
new ConsentInfoUpdateCallback() {
@Override
public void onUpdated() {
// Статус согласия пользователя успешно обновлен.
}
@Override
public void onFailed(ConsentManagerError error) {
// Инициализируйте Appodeal SDK с параметрами по умолчанию.
}
}
);
}
requestConsentInfoUpdate
может быть запрошен в любой момент жизненного цикла приложения. Мы
рекомендуем запросить его при запуске приложения. Допускается несколько вызовов по запросу.
Необходимые параметры:
YOUR_APP_KEY
- Ключ приложения Appodeal, его можно получить в личном кабинете;
ConsentUpdateRequestParameters
- Класс данных, представляющий параметры для запроса на обновление согласи я
в Appodeal Consent Manager. Используйте этот класс для инкапсуляции необходимой информации
и для обновления предпочтений согласия.
Параметры:
activity
- Активность Активность, в которой запрашивается обновление согласия.key
- Ключ, связанный с пользователем, для которого обновляется согласие.tagForUnderAgeOfConsent
- Опционально. Указывает, помечен ли данный пользователь как не достигший возраста согласия. Устанавливается в true, если пользователь не достиг возраста согласия, в противном случае устанавливается в false или null.sdk
- Опционально. Идентификатор SDK, выполняющего запрос на обновление согласия.sdkVersion
- Опционально. Версия SDK, выполняющего запрос на обновление согласия.
ConsentInfoUpdateCallback
- слушатель для запроса результата.
Текущий consent статус
После обновления информации о согласии вы можете проверить текущий consent статус:
- Kotlin
- Java
val status: ConsentStatus = ConsentManager.status
ConsentStatus status = ConsentManager.getStatus
Класс Enum, представляющий возможные статусы согласия в Appodeal Consent Manager.
Unknown
- Предс тавляет неизвестный статус согласия;Required
- Представляет статус требуемого согласия;NotRequired
- Представляет необязательный статус согласия;Obtained
- Представляет статус полученного согласия.
Возможность показа персонализированной рекламы
Вы можете проверить, можно ли показывать персонализированную рекламу, основываясь на текущем статусе согласия, используя:
- Kotlin
- Java
ConsentManager.canShowAds()
ConsentManager.canShowAds();
Возвращает true
, если персонализированная реклама может быть показана, в противном случае - false
.
Загрузка формы согласия
Вы можете загрузить и получить ConsentForm
, используя следующий код:
- Kotlin
- Java
ConsentManager.load(
context = YourActivity@this,
successListener = object : OnConsentFormLoadSuccessListener {
override fun onConsentFormLoadSuccess(consentForm: ConsentForm) {
// ConsentForm была загружена. Теперь вы можете показать ее в виде диалога
}
},
failureListener = object : OnConsentFormLoadFailureListener {
override fun onConsentFormLoadFailure(error: ConsentManagerError) {
// Не удалось загрузить или показать ConsentForm. Дополнительную информацию можно найти в объекте 'error'
// Инициализируте Appodeal SDK с параметрами по умолчанию.
}
}
)
ConsentManager.load(
YourActivity.this,
new OnConsentFormLoadSuccessListener() {
@Override
public void onConsentFormLoadSuccess(ConsentForm consentForm) {
// ConsentForm была загружена. Теперь вы можете показать ее в виде диалога
}
},
new OnConsentFormLoadFailureListener() {
@Override
public void onConsentFormLoadFailure(ConsentManagerError error) {
// Не удалось загрузить или показать ConsentForm. Дополнительную информацию можно найти в объекте 'error'
// Инициализируте Appodeal SDK с параметрами по умолчанию.
}
}
);
Отображение формы согласия
После того как окно согласия будет загружено, вы можете показать его.
- Kotlin
- Java
consentForm.show(
activity = InterstitialActivity@this,
listener = object : OnConsentFormDismissedListener {
override fun onConsentFormDismissed(error: ConsentManagerError?) {
// Не удалось загрузить или показать форму согласия, либо она не требуется.
// Более подробную информацию можно найти в объекте 'error'
}
}
)
consentForm.show(
InterstitialActivity.this,
new OnConsentFormDismissedListener() {
@Override
public void onConsentFormDismissed(ConsentManagerError error) {
// Не удалось загрузить или показать форму согласия, либо она не требуется.
// Более подробную информацию можно найти в объекте 'error'
}
}
);
Загрузка и показ формы если это необходимо
Вы также можете загрузить форму и сразу же показать ее если это необходимо
- Kotlin
- Java
ConsentManager.loadAndShowConsentFormIfRequired(
activity = YourActivity@this,
dismissedListener = object : OnConsentFormDismissedListener {
override fun onConsentFormDismissed(error: ConsentManagerError?) {
// Не удалось загрузить или показать форму согласия, либо она не требуется.
// Более подробную информацию можно найти в объекте 'error'
}
}
)
ConsentManager.loadAndShowConsentFormIfRequired(
YourActivity.this,
new OnConsentFormDismissedListener() {
@Override
public void onConsentFormDismissed(ConsentManagerError error) {
// Не удалось загрузить или показать форму согласия, либо она не требуется.
// Более подробную информацию можно найти в объекте 'error'
}
}
);
Revokes consent
Вы можете сбросить статус согласия на неизвестный
, используя метод:
- Kotlin
- Java
ConsentManager.revoke(context = YourActivity@this)
ConsentManager.revoke(YourActivity.this)
Параметры:
context
- Контекст, в котором сбрасывается статус согласия.