Что необходимо🔗
Нужно обновить некоторые библиотеки, в которых добавилась поддержка TCF, а также интегрировать сам TCF модуль.
- Обновить MRGService(core) до
6.10.0или выше. - Обновить IronSource до
7.7.0или выше. - Если используется ISMRGSCustomAdapter , то его нужно обновить до
6.10.0или выше. - Интегрировать TCF модуль MRGSDidomi.
Добавление модуля в проект🔗
Добавление в Unity проект (общая инструкция)
Шаг 1. Добавьте источники
Для того, чтобы добавить MRGS в проект через Unity Package Manager (доступно с Unity 2018+) просто добавьте в файл Packages/manifest.json раздел scopedRegistries, добавив в него следующую запись:
{
"dependencies": {
...
},
"scopedRegistries": [
{
"name": "MRGS",
"url": "https://mrgs-nexus.my.games/repository/mrgs-uninty-plugins/",
"scopes": [
"games.my.mrgs"
]
}
]
}
Альтернативно, можно нажать Edit -> Project Settings -> Package Manager -> '+' in scoped registry section, и заполнить поля в соответствии с данными выше.
Шаг 2. Добавьте зависимость
- Нажмите
Window -> Package Manager -> select 'Packages: MyRegistries' from dropdown list, выберите пакетMRGSDidomiиз списка, затем нажмите "Install" - Импортируйте модуль:
using MRGS;
- Загрузите последнюю версию библиотеки. Распакуйте архив.
- (Для интеграции unitypackage) В Unity нажмите
Assets -> Import Package -> Custom Package, и выберите пакетgames.my.mrgs.didomi.unitypackageиз скачанного архива. - (Для интеграции tgz) В Unity нажмите
Window -> Package Manager -> '+' -> Add package from tarball, и выберите пакетgames.my.mrgs.didomi-<version>.tgzиз скачанного архива. - Импортируйте модуль:
using MRGS;
Добавление в iOS проект (общая инструкция)
Шаг 1. Добавьте зависимости
Через Package collection
- В Xcode выберите File > Add Packages
- Выберите «+» > "Add Swift Package Collection"
- Вставьте URL:
https://mrgs-nexus.my.games/repository/ios-sdks/MRGSPackageCollection.json - Выберите модуль MRGSDidomi из "MRGS Package Collection".
- Или вы можете выбрать пакет «MRGS» из "MRGS Package Collection" (содержит все модули mrgs в качестве продуктов), а затем выбрать только продукт "MRGS/Didomi".
Отдельными пакетами
- В Xcode выберите File > Add Packages
- В строке поиска в правом верхнем углу вставьте URL:
https://mrgs-gitea.my.games/mrgs/mrgsdidomi-ios-sdk.git - Добавьте модуль в свой проект
- Или вы можете вставить URL
https://mrgs-gitea.my.games/mrgs/ios-sdks.git, чтобы подключить пакет "MRGS", который содержит все модули mrgs в качестве продуктов, а затем выбрать только продукт "MRGS/Didomi".
Шаг 2. Добавьте поддержку категорий ObjectiveC
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSDidomi;или#import <MRGSDidomi/MRGSDidomi.h>
Шаг 1. Добавьте источники
В вашем podfile добавьте источники в начало файла:
source 'https://github.com/CocoaPods/Specs.git' # For main repo
source 'https://mrgs-gitea.my.games/mrgs/cocoapods-specs.git' # For MRGS repo
Шаг 2. Добавьте зависимости
В target добавьте последнюю версию MRGSDidomi:
Чтобы добавить через subspecs:
Для добавления через отдельные модули:
Чтобы добавить все модули mrgs:
Шаг 3. Установите зависимости
- Выполните
pod install(илиpod install --repo-updateесли необходимо) - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSDidomi;или#import <MRGSDidomi/MRGSDidomi.h>
Шаг 1. Добавьте зависимости
Добавьте зависимость в ваш Cartfile:
Шаг 2. Установите зависимости
- Выполните
carthage update --use-xcframeworks - Добавьте загруженные фреймворки в свой проект (убедитесь, что опция "do not embed" включена)
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSDidomi;или#import <MRGSDidomi/MRGSDidomi.h>
- Загрузите последнюю версию библиотеки. Распакуйте архив.
-
Добавьте
MRGSDidomi.xcframeworkиз скачанного архива в ваш проект (Перетащите библиотеки в раздел "Linked frameworks and Libraries") (для совместимости в архиве также находится MRGSDidomi.framework - fat framework старого вида) -
В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGSDidomi;или#import <MRGSDidomi/MRGSDidomi.h> - Также, вы можете добавить из архива файлы
MRGServiceKit.hиmodule.modulemapв свой проект, либо в настройках проекта укажите путь до них в разделеBuild Settings -> Header search paths. Теперь вместо импорта каждого из наших фреймворков по отдельности, вы можете импортировать только один заголовочный файл:@import MRGServiceKit;
Добавление в Android проект
Добавьте зависимость в build.gradle файл:
Инициализация SDK🔗
Прежде чем приступить к инициализация SDK, потребуется получить AppKey и NoticeId.
- AppKey - один общий на MY.GAMES. Его можно получить в админке Didomi на главной странице
- NoticeId - у каждого проекта он свой. Его можно получить в админке Didomi в разделе Consent Notices

Затем провести инициализацию MRGSDidomi:
GDPR
Если в вашем проекте есть поддержка показа GDPR, то инициализацию Didomi лучше проводить после того как пользователь примет условия GDPR.
Логика инициализации рекламных SDK🔗
ВАЖНО: Инициализацию любых рекламных SDK надо отложить до момента получения consent..
Проекту необходимо реализовать логику включения рекламных SDK основываясь на результате показа TCF и сопоставления целей и ID из Didomi. Важно поддержать следующие возможные сценарии:
- Вариант 1: Получили полное согласие от пользователя ((opt-in): all consent/legitimate interest enabled). Включаем все SDK, показываем персонализированную рекламу.
- Вариант 2: Получили полный отказ от пользователя ((opt-out) => all consent/legitimate interest disabled). НЕ инициализируем никакие рекламные SDK's, рекламу НЕ показываем.
- Вариант 3: Частичное соглашение, но на Цель 1 был получен отказ (consent disabled
cookies). НЕ инициализируем никакие рекламные SDK's, рекламу НЕ показываем. - Вариант 4: Частичное соглашение, на Цель 1 получили согласие, а на Цель 3 и 4 получили отказ (consent enabled
cookies+ consent disabledcreate_ads_profile;select_personalized_ads). Включаем рекламные SDK's, но показываем не персонализированную рекламу.
Если получили согласие на Цель 1, можно инициализировать рекламные SDK's, в том числе IronSource SDK (медиацию). Также необходимо отправлять в медиацию результаты согласие/несогласие на Цели 3 и 4 (персонализированная реклама).
IronSource
Согласно документации, можно отправить результаты согласие/несогласие на Цели 3 и 4 следующим образом:
Tapjoy Offerwall
Этот SDK можно инициализировать, только если получили согласие на Цель 1, так как данное SDK работает с персональными данными.
Согласно документации, у Tapjoy есть свои флаги:
Есть согласие на цель 1 + нет согласия на таргетированную рекламу (цели 3 и 4) - TJStatusFalse
Есть согласие на цель 1 + есть согласие на таргетированную рекламу (цели 3 и 4) - TJStatusTrue
Показ TCF окна🔗
Логика показа окна TCF🔗
Без получения consent, не показываем никакую рекламу - ни внешнюю, ни кросс-промо. Если по каким-то причинам Didomi SDK не инициализировалось или инициализировалось с ошибкой и не было показано окно TCF, считается, что consent не получен и нужно повторно вызывать окно.
Для проектов без Interstitial🔗
С user-initiated форматом - если проект не получил согласие TCF на старте игры, то проект вызывает TCF-баннер при нажатии на кнопку “Посмотреть рекламу” (то есть показ блока TCF вместо показа рекламы).
Для проектов с Interstitial🔗
Если проект не получил согласие TCF на старте игры, то проект вызывает TCF-баннер в момент входа в игру в сессию, когда пользователь должен увидеть первый interstitial, например:
- Если планируются показ interstitial в первую сессию - показ TCF сразу после показа окна с ToS/Privacy Policy и ATT.
- Если планируется показ interstitial на 7й день жизни - показ TCF на старте игры для игроков чей день жизни >= 7, при этом если до interstitial пользователь захотел посмотреть Rewarded Video, показываем TCF при нажатии на кнопку “Посмотреть рекламу”.
Показ основного баннера (1st layer)🔗
Примечание
Вам не нужно ожидать события Ready перед тем как вызвать showNotice, потому что они вызываются внутренне (самим Didomi SDK). Следовательно, при вызове этого метода уведомление о согласии и просмотры предпочтений будут отображаться только в том случае, если это требуется (если пользователь попадает под условия показа TCF), и только после того, как SDK будет готово.
Показ настроек (2nd layer)🔗
Проекту необходимо добавить кнопку Privacy Settings в настройки. По нажатию на кнопку должно вызываться окно TCF (сразу со списком целей 2nd layer). Лучше иметь примерное одинаковое название у всех, так как на эту кнопку ссылаемся в общем privacy policy.
Для показа настроек целей (2nd layer) воспользуйтесь методом:
Важно
Данный метод может приводить к неопределенному поведению если его вызывать до инициализации Didomi SDK или если SDK еще не готово. На пример SDK может запомнить что метод был вызван, и когда оно будет готово оно может его показать, то есть между вызовом метода и готовностью SDK может пройти много времени, но если времени пройдет очень много, SDK может проигнорировать вызов функции вовсе.
Дополнительные возможности🔗
Особенности работы🔗
Очень важно учесть, что при работе с функционалом Didomi SDK, нужно вызывать его функционал только после успешной инициализации самого SDK. В противном случае это может приводить к: падениям, не корректному возврату результатов, или функционал просто не будет ни как отвечать на его вызов. Исключением является лишь методы инициализации и выставления делегатов/слушателей событий, последние нужно добавлять до вызова метода инициализации.
Результатом успешной инициализации SDK служит событие из делегата/слушателя событий onReady.
Основной делегат/слушатель событий🔗
Основным делегатом/слушателем в Didomi является DidomiEventListener, предоставляющий большое кол-во событий. Стоит отменить что в MRGSDidomi для Unity была перенесена лишь основная/важная часть событий, но по запросу сможет добавить остальные требуемые/необходимые события.
Выставление/удаление делегата/слушателя:
var listener = new MRGSDidomiEventListener();
listener.Ready += (o, e) => {
Debug.Log("Didomi#OnReady was called.");
};
listener.Error += (o, e) => {
Debug.Log("Didomi#OnError was called: " + e.ErrorMessage);
};
listener.ShowNotice += (o, e) => {
Debug.Log("Didomi#OnShowNotice was called.");
};
listener.HideNotice += (o, e) => {
Debug.Log("Didomi#OnHideNotice was called.");
};
listener.ShowPreferences += (o, e) => {
Debug.Log("Didomi#OnShowPreferences was called.");
};
listener.HidePreferences += (o, e) => {
Debug.Log("Didomi#OnHidePreferences was called.");
};
listener.ConsentChanged += (o, e) => {
Debug.Log("Didomi#ConsentChanged was called.");
};
MRGSDidomi.Instance.AddEventListener(listener);
MRGSDidomi.Instance.Setup(MRGSDidomiInitializeParameters);
// MRGSDidomi.Instance.RemoveEventListener(listener);
DDMEventListener* listener = [[DDMEventListener alloc] init];
listener.onReady = ^(enum DDMEventType type) {
};
listener.onConsentChanged = ^(enum DDMEventType type) {
};
listener.onShowPreferences = ^(enum DDMEventType type) {
};
[[MRGSDidomi sharedInstance] addEventListener:listener];
// Init Didomi SDK
// [[MRGSDidomi sharedInstance] removeEventListener:listener];
import android.util.Log;
import androidx.annotation.NonNull;
import games.my.mrgs.didomi.MRGSDidomi;
import io.didomi.sdk.DidomiInitializeParameters;
import io.didomi.sdk.events.ConsentChangedEvent;
import io.didomi.sdk.events.ErrorEvent;
import io.didomi.sdk.events.EventListener;
import io.didomi.sdk.events.HideNoticeEvent;
import io.didomi.sdk.events.HidePreferencesEvent;
import io.didomi.sdk.events.ReadyEvent;
import io.didomi.sdk.events.ShowNoticeEvent;
import io.didomi.sdk.events.ShowPreferencesEvent;
import io.didomi.sdk.functionalinterfaces.DidomiEventListener;
final DidomiEventListener listener = new EventListener() {
@Override
public void ready(@NonNull ReadyEvent event) {
Log.d("Didomi", "#OnReady was called.");
}
@Override
public void error(@NonNull ErrorEvent event) {
Log.d("Didomi", "#OnError was called: " + event.getErrorMessage());
}
@Override
public void showNotice(@NonNull ShowNoticeEvent event) {
Log.d("Didomi", "#OnShowNotice was called.");
}
@Override
public void hideNotice(@NonNull HideNoticeEvent event) {
Log.d("Didomi", "#OnHideNotice was called.");
}
@Override
public void showPreferences(@NonNull ShowPreferencesEvent event) {
Log.d("Didomi", "#OnShowPreferences was called.");
}
@Override
public void hidePreferences(@NonNull HidePreferencesEvent event) {
Log.d("Didomi", "#OnHidePreferences was called.");
}
@Override
public void consentChanged(@NonNull ConsentChangedEvent event) {
Log.d("Didomi", "#ConsentChanged was called.");
}
};
MRGSDidomi.getInstance().addEventListener(listener);
MRGSDidomi.getInstance().setup(Context, DidomiInitializeParameters);
// MRGSDidomi.getInstance().removeEventListener(listener);
Значения событий
DidomiEventListener#Ready - Сигнализирует о том что Didomi SDK успешно инициализировалось и что можно работать с остальным функционалом данного SDK.
DidomiEventListener#Error - В момент инициализации Didomi SDK произошла ошибка (также возможен вызов данного метода в течение работы SDK). Если ошибка повторяется, возможно есть проблемы с ключами AppKey или NoticeId. При попытке вызывать другие методы SDK, можно получить неопределенные поведения.
DidomiEventListener#ShowNotice - Пользователь наблюдает основой баннер соглашения (1st layer).
DidomiEventListener#HideNotice - Пользователь закрыл основой баннер соглашения (1st layer).
DidomiEventListener#ShowPreferences - Пользователь наблюдает окно настроек (2st layer). Это событие также может вызываться каждый раз, когда пользователь попадет на это окно из 1st layer.
DidomiEventListener#HidePreferences - Пользователь закрыл окно настроек (2st layer). Это событие может вызываться каждый раз, если пользователь переходил на это окно из 1st layer.
DidomiEventListener#ConsentChanged - Вызывается каждый раз когда пользователь принял основное решение в основном баннере (1st layer) или меняет свои решения позже через настройки (2st layer).
Дополнительный делегат/слушатель событий🔗
MRGSDidomi SDK предоставляет дополнительный делегат/слушатель MRGSDidomiListener, для упрощения некоторой логики/функционала. Кол-во событий может измениться в будущем.
Выставление/удаление делегата/слушателя:
class YourClass : MRGSDidomi.IDelegate
{
YourClass()
{
MRGSDidomi.Instance.Delegate = this;
MRGSDidomi.Instance.Setup(MRGSDidomiInitializeParameters);
// MRGSDidomi.Instance.Delegate = null;
}
public void OnReceiveConsentStatus()
{
Debug.Log("Didomi#OnReceiveConsentStatus was called.");
// Write here extra logic base on user's choice to initialize ads SDK's
}
}
@interface DidomiDelegateListener: NSObject <MRGSDidomiDelegate>
@end
@implementation DidomiDelegateListener
-(void)setup{
[MRGSDidomi sharedInstance].delegate = self;
// [MRGSDidomi sharedInstance].delegate = nil;
}
- (void)didReceiveConsentStatus {
NSLog(@"Didomi#OnReceiveConsentStatus was called.");
// Write here extra logic base on user's choice to initialize ads SDK's
}
@end
import android.util.Log;
import games.my.mrgs.didomi.MRGSDidomi;
import games.my.mrgs.didomi.MRGSDidomiListener;
import io.didomi.sdk.DidomiInitializeParameters;
final MRGSDidomiListener listener = new MRGSDidomiListener() {
@Override
public void onReceiveConsentStatus() {
Log.d("MRGSDidomi", "#onReceiveConsentStatus was called.");
// Write here extra logic base on user's choice to initialize ads SDK's
}
};
MRGSDidomi.getInstance().setOnDidomiListener(listener);
MRGSDidomi.getInstance().setup(context, config);
// MRGSDidomi.getInstance().setOnDidomiListener(null);
Значения событий
MRGSDidomiListener#OnReceiveConsentStatus - Вызывается только один раз за сессию и сигнализирует о том что проект может приступить к инициализации рекламных SDK's. Это событие скрывает в себе такие проверки как: Успешную инициализацию Didomi SDK, попадает ли пользователь под TCF, соглашался ли пользователь ранее с TCF или согласился с ним только что. Обратите внимание, что данный метод лишь сигнализирует о подходящем моменте для инициализации рекламных SDK's, но проекту все еще нужно написать дополнительную логику основываясь на результате действия пользователя: разрешил ли он показывать ему рекламу и разрешил ли он показывать персонализированную рекламу.
Проверить на требования показа согласия🔗
Чтобы проверить, попадет ли пользователь под условия показа TCF и требуется ли ему показывать соглашение, воспользуйтесь методом:
Важно
Данный метод всегда будет возвращать false если Didomi SDK не инициализировано или не готово к работе.
Проверить разрешение на показ рекламы🔗
Чтобы проверить, разрешил ли пользователь показывать ему рекламу (Цель/Purpose 1 - cookies), воспользуйтесь методом:
Важно
Данный метод всегда будет возвращать неопределенный результат если Didomi SDK не инициализировано или не готово к работе.
Проверить разрешение на показ персонализированной рекламы🔗
Чтобы проверить, разрешил ли пользователь показывать ему персонализированную рекламу (Цель/Purpose 3 и 4 - create_ads_profile и select_personalized_ads), воспользуйтесь методом:
Важно
Данный метод всегда будет возвращать неопределенный результат если Didomi SDK не инициализировано или не готово к работе.
Проверить принимал ли пользователь соглашение🔗
Чтобы проверить, принимал ли пользователь ранее соглашение, воспользуйтесь методом:
Важно
Данный метод всегда будет возвращать false если Didomi SDK не инициализировано или не готово к работе.
Получение Consent String🔗
Чтобы получить Consent String воспользуйтесь методом:
Проверка статусов у целей🔗
Для получения списка целей, проверки и сопоставления их статусов:
var userStatus = MRGSDidomi.Instance.UserStatus;
if (userStatus == null) {
// Didomi wasn't initialized or ready
return;
}
var purposes = userStatus.Purposes;
// You can also check Consent and Legitimate Interest statuses.
var consent = purposes.Consent;
var isCookiesEnabled = consent.Enabled.Contains("cookies");
var isCookiesDisabled = consent.Disabled.Contains("cookies");
// etc
DDMUserStatus* userStatus = [MRGSDidomi sharedInstance].userStatus;
if(userStatus == nil){
// Didomi wasn't initialized or ready
return;
}
DDMUserStatusPurposes* purposes = userStatus.purposes;
// You can also check Consent and Legitimate Interest statuses.
DDMUserStatusIDs* consent = purposes.consent;
BOOL isCookiesEnabled = [consent.enabled containsObject:@"cookies"];
BOOL isCookiesDisabled = [consent.disabled containsObject:@"cookies"];
// etc
import games.my.mrgs.didomi.MRGSDidomi;
import io.didomi.sdk.models.UserStatus;
final UserStatus userStatus = MRGSDidomi.getInstance().getUserStatus();
if (userStatus == null) {
// Didomi wasn't initialized or ready
return;
}
final UserStatus.Purposes purposes = userStatus.getPurposes();
// You can also check Consent and Legitimate Interest statuses.
final UserStatus.Ids consent = purposes.getConsent();
final boolean isCookiesEnabled = consent.getEnabled().contains("cookies");
final boolean isCookiesDisabled = consent.getDisabled().contains("cookies");
// etc
Проверка статусов о поставщиков🔗
Для получения списка поставщиков и проверки их статусов:
var userStatus = MRGSDidomi.Instance.UserStatus;
if (userStatus == null) {
// Didomi wasn't initialized or ready
return;
}
var vendors = userStatus.Vendors;
// You can also check Consent and Legitimate Interest statuses.
var consent = vendors.Consent;
var isGoogleEnabled = consent.Enabled.Contains("google");
var isGoogleDisabled = consent.Disabled.Contains("google");
// etc
DDMUserStatus* userStatus = [MRGSDidomi sharedInstance].userStatus;
if(userStatus == nil){
// Didomi wasn't initialized or ready
return;
}
DDMUserStatusVendors* vendors = userStatus.vendors;
// You can also check Consent and Legitimate Interest statuses.
DDMUserStatusIDs* consent = vendors.consent;
BOOL isGoogleEnabled = [consent.enabled containsObject:@"google"];
BOOL isGoogleDisabled = [consent.disabled containsObject:@"google"];
// etc
import games.my.mrgs.didomi.MRGSDidomi;
import io.didomi.sdk.models.UserStatus;
final UserStatus userStatus = MRGSDidomi.getInstance().getUserStatus();
if (userStatus == null) {
// Didomi wasn't initialized or ready
return;
}
final UserStatus.Vendors vendors = userStatus.getVendors();
// You can also check their statuses.
final UserStatus.Ids consent = vendors.getConsent();
final boolean isGoogleEnabled = consent.getEnabled().contains("google");
final boolean isGoogleDisabled = consent.getDisabled().contains("google");
// etc
События и данные🔗
Таблица для сопоставления целей с Didomi SDK🔗
| Purpose № | Meaning | Didomi SDK ID | Type |
|---|---|---|---|
| 1 | Store and/or access | cookies | Consent |
| 2 | Use limited data to select advertising | select_basic_ads | Consent, Legitimate Interest |
| 3 | Create profiles for personalized advertising | create_ads_profile | Consent |
| 4 | Use profiles to select personalized advertising | select_personalized_ads | Consent |
| 5 | Create profiles to personalize content | create_content_profile | Consent |
| 6 | Use profiles to select personalized content | select_personalized_content | Consent |
| 7 | Measure advertising performance | measure_ad_performance | Consent, Legitimate Interest |
| 8 | Measure content performance | measure_content_performance | Consent, Legitimate Interest |
| 9 | Understand audiences through statistics | market_research | Consent, Legitimate Interest |
| 10 | Develop and improve services | market_research | Consent, Legitimate Interest |
| 11 | Use limited data to select content | N/A | Consent, Legitimate Interest |
Собираемые метрики🔗
MRGSDidomi SDK собирает следующую статистику по TCF (название метрики: Трекинг запроса TCF 2.0 [-20]):
| Object ID | Meaning |
|---|---|
| 0 | Notice Displayed |
| 1 | Total User Choices |
| 2 | Opt-ins |
| 3 | Opt-outs |
| 4 | Partial opt-ins |
| 5 | 'See more' button |
| 6 | Purpose 1 |
| 7 | Purpose 3 |
| 8 | Purpose 4 |
| 9 | Consent Re-collection |
Значения событий
Notice Displayed - Общее количество показов TCF-баннера.
Total User Choices - Общее количество полученных решений пользователем.
Opt-ins - Согласие со всеми целями и партнерами, события по кнопке Accept (1st layer) и по кнопке Accept All (2nd layer) (Opt-in => all consent/legitimate interest enabled).
Opt-outs - Отказ от всех целей, событие по кнопке Confirm Choices (2nd layer) при всех выключенных переключателей (Opt-out => all consent/legitimate interest disabled).
Partial opt-ins - Событие по кнопке Confirm Choices на 2nd layer при хотя бы одном выключенном или включенном переключателе (At least 1 consent/legitimate interest differs from other choices).
'See more' button - Нажатие на кнопку See more, переход с первого слоя на второй.
Purpose 1 - Согласие с целью 1 (Store and/or access).
Purpose 3 - Согласие с целью 3 (Create profiles for personalized advertising).
Purpose 4 - Согласие с целью 4 (Use profiles to select personalized advertising).
Consent Re-collection - Повторные показы TCF-баннера пользователям.
Посмотреть рекламу
Проектам нужно самим реализовать логирования событий нажатия на кнопку “Посмотреть рекламу”.
Пример🔗
using MRGS;
namespace Sample
{
internal class DidomiExample
{
public class InitManager : MRGSDidomi.IDelegate
{
private bool _shouldInit = true;
// After GDPR accepted
public void OnInit()
{
// Setup delegate
MRGSDidomi.Instance.Delegate = this;
// Init didomi
MRGSDidomi.Instance.Setup(new MRGSDidomiInitializeParameters("<API_KEY>", noticeId: "<NOTICE>"));
// Showing notice on app start (recommended by Didomi)
// Or you can show it when needed
MRGSDidomi.Instance.ShowNotice();
}
public void OnReceiveConsentStatus()
{
var acceptedAds = MRGSDidomi.Instance.HasAcceptedAdvertising;
var acceptedPersonalizedAds = MRGSDidomi.Instance.HasAcceptedPersonalizedAdvertising;
if (acceptedAds)
{
// Init sdks if needed (delegate can be called multiple times for session)
if (_shouldInit)
{
_shouldInit = false;
IronSource.Agent.init("<APP_KEY>");
}
// Set consents to sdks
IronSource.Agent.setConsent(acceptedPersonalizedAds);
}
}
}
/// <summary>
/// View with button to show ad
/// </summary>
public class AdViewManager
{
public void OnShowAd()
{
var acceptedAds = MRGSDidomi.Instance.HasAcceptedAdvertising;
if (acceptedAds)
{
// Show loaded ad
}
else
{
// Show explaining window
// ...
MRGSDidomi.Instance.ShowPreferences();
// If you don't show notice at app start,
// then you need to show it here:
// if (!MRGSDidomi.Instance.HasAcceptedAgreement)
// {
// MRGSDidomi.Instance.ShowNotice();
// }
// else
// {
// MRGSDidomi.Instance.ShowPreferences();
// }
}
}
}
/// <summary>
/// Settings window in app
/// </summary>
public class SettingsViewManager
{
public bool ShouldShowTcfSettingsButton()
{
return MRGSDidomi.Instance.IsConsentRequired;
}
public void OnShowTCF()
{
MRGSDidomi.Instance.ShowPreferences();
}
}
}
}
@interface InitManager: UIViewController <MRGSDidomiDelegate>
@property (nonatomic) BOOL shouldInit;
@end
@implementation InitManager
// After GDPR accepted
-(void)onInit{
// Setup delegate
[MRGSDidomi sharedInstance].delegate = self;
// Init didomi
DidomiInitializeParameters* params = [[DidomiInitializeParameters alloc] initWithApiKey:@"<AppKey>"
localConfigurationPath:nil
remoteConfigurationURL:nil
providerID:nil
disableDidomiRemoteConfig:NO
languageCode:nil
noticeID:@"<NoticeId>"];
[[MRGSDidomi sharedInstance] setupWithParams:params];
// Showing notice on app start (recommended by Didomi)
// Or you can show it when needed
[[MRGSDidomi sharedInstance] showNoticeAtViewController:self];
}
- (void)didReceiveConsentStatus {
BOOL acceptedAds = [MRGSDidomi sharedInstance].hasAcceptedAdvertising;
BOOL acceptedPersonalizedAds = [MRGSDidomi sharedInstance].hasAcceptedPersonalizedAdvertising;
if (acceptedAds) {
// Init sdks if needed (delegate can be called multiple times for session)
if (_shouldInit) {
_shouldInit = false;
[IronSource initWithAppKey:@"<APP_KEY>"];
}
// Set consents to sdks
[IronSource setConsent:acceptedPersonalizedAds];
}
}
@end
/// View with button to show ad
@interface AdViewManager: UIViewController
@end
@implementation AdViewManager
-(void)onShowAd{
BOOL acceptedAds = [MRGSDidomi sharedInstance].hasAcceptedAdvertising;
if (acceptedAds) {
// Show loaded ad
} else {
// Show explaining window
// ...
[[MRGSDidomi sharedInstance] showPreferencesAtViewController:self forView:ViewsPurposes];
// If you don't show notice at app start,
// then you need to show it here:
// if (![MRGSDidomi sharedInstance].hasAcceptedAgreement) {
// [[MRGSDidomi sharedInstance] showNoticeAtViewController:self];
// } else {
// [[MRGSDidomi sharedInstance] showPreferencesAtViewController:self forView:ViewsPurposes];
// }
}
}
@end
/// Settings window in app
@interface SettingsViewManager: UIViewController
@end
@implementation SettingsViewManager
-(BOOL)shouldShowTcfSettingsButton {
return [MRGSDidomi sharedInstance].isConsentRequired;
}
-(void)onShowTCF{
[[MRGSDidomi sharedInstance] showPreferencesAtViewController:self forView:ViewsPurposes];
}
@end
import android.app.Activity;
import android.content.Context;
import androidx.fragment.app.FragmentActivity;
import com.ironsource.mediationsdk.IronSource;
import games.my.mrgs.didomi.MRGSDidomi;
import games.my.mrgs.didomi.MRGSDidomiListener;
import io.didomi.sdk.DidomiInitializeParameters;
class DidomiExample {
public class InitManager implements MRGSDidomiListener {
private boolean shouldInit = true;
// After GDPR accepted
public void onInit () {
// Setup delegate
MRGSDidomi.getInstance().setOnDidomiListener(this);
// Init didomi
MRGSDidomi.getInstance().setup(Context, DidomiInitializeParameters);
// Showing notice on app start (recommended by Didomi)
// Or you can show it when needed
MRGSDidomi.getInstance().showNotice(FragmentActivity);
}
@Override
public void onReceiveConsentStatus() {
final boolean acceptedAds = MRGSDidomi.getInstance().hasAcceptedAdvertising();
final boolean acceptedPersonalizedAds = MRGSDidomi.getInstance().hasAcceptedPersonalizedAdvertising();
if (acceptedAds) {
// Init sdks if needed (delegate can be called multiple times for session)
if (shouldInit) {
shouldInit = false;
IronSource.init(Activity, "<APP_KEY>", ...);
}
// Set consents to sdks
IronSource.setConsent(acceptedPersonalizedAds);
}
}
}
/// <summary>
/// View with button to show ad
/// </summary>
public class AdViewManager {
public void onShowAd() {
final boolean acceptedAds = MRGSDidomi.getInstance().hasAcceptedAdvertising();
if (acceptedAds) {
// Show loaded ad
} else {
// Show explaining window
// ...
MRGSDidomi.getInstance().showPreferences(FragmentActivity);
// If you don't show notice at app start,
// then you need to show it here:
//if (!MRGSDidomi.getInstance().hasAcceptedAgreement()) {
// MRGSDidomi.getInstance().showNotice(FragmentActivity);
//} else {
// MRGSDidomi.getInstance().showPreferences(FragmentActivity);
//}
}
}
}
/// <summary>
/// Settings window in app
/// </summary>
public class SettingsViewManager {
public boolean shouldShowTcfSettingsButton() {
return MRGSDidomi.getInstance().isConsentRequired();
}
public void onShowTCF() {
MRGSDidomi.getInstance().showPreferences(FragmentActivity);
}
}
}
Дата создания: 2024-01-29