Я понял это, используя комбинацию Consent SDK и моего собственного кода. Каждый раз, когда пользователь входит в приложение (не знаю, должен ли я делать это так часто), я инициализирую SDK Consent.
private fun getConsentStatus() {
val consentInformation = ConsentInformation.getInstance(requireContext())
consentInformation.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
consentInformation.debugGeography = DebugGeography.DEBUG_GEOGRAPHY_EEA
val ids = arrayOf("pub-77777777777")
consentInformation.requestConsentInfoUpdate(ids, object : ConsentInfoUpdateListener {
override fun onConsentInfoUpdated(consentStatus: ConsentStatus) {
// User's consent status successfully updated.
if (consentInformation.isRequestLocationInEeaOrUnknown) {
when (consentStatus) {
ConsentStatus.UNKNOWN -> displayConsentForm()
ConsentStatus.PERSONALIZED -> proceed(true, true)
ConsentStatus.NON_PERSONALIZED -> proceed(false, true)
}
} else {
// Not in EU, displaying personalized ads
proceed(true, false)
}
}
override fun onFailedToUpdateConsentInfo(errorDescription: String) {
// User's consent status failed to update.
AdvertisingInitialization(requireContext(), prefs, false)
proceedWithoutUpdate()
}
})
}
private fun proceedWithoutUpdate(isInEu: Boolean = false){
AdvertisingInitialization(requireContext(), prefs, isInEu)
(activity as LandingActivity).navigateToContentActivity()
}
/**
* Save the consent status in prefs and initialize ads. Then navigate to the other activity
*/
private fun proceed(isPersonalized: Boolean, isInEu: Boolean = false) {
val consentInfo = ConsentInformation.getInstance(requireContext())
consentInfo.consentStatus = if (isPersonalized) ConsentStatus.PERSONALIZED else ConsentStatus.NON_PERSONALIZED
prefs.setCanShowPersonalizedAds(isPersonalized)
AdvertisingInitialization(requireContext(), prefs, isInEu)
(activity as LandingActivity).navigateToContentActivity()
}
Если пользователь находится в ЕС и никогда не выбирал, хочет ли он персонализировать или не персонализированные объявления. Я бы направил его к другому фрагменту, который имеет: 1 TextView (описание со сменной строкой, направленное на веб-страницу рекламных сетей), 2 кнопки, одна из которых «Да, я согласен», а другая «Нет, спасибо»
Тогда я бы сохранял их выбор
consentInfo.consentStatus = if (isPersonalized) ConsentStatus.PERSONALIZED else ConsentStatus.NON_PERSONALIZED
prefs.setCanShowPersonalizedAds(isPersonalized)
И каждый раз, когда я запрашивал объявление, я делал это так:
fun getAdRequest(isPersonalized: Boolean): AdRequest {
val adRequest: AdRequest
adRequest = if (isPersonalized) {
AdRequest.Builder().build()
} else {
val extras = Bundle()
extras.putString("npa", "1")
AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter::class.java, extras)
.build()
}
return adRequest
}
Возможно, вы заметили класс AdvertisingInitialization , Я использую этот класс для перенаправления выбора пользователя в рекламные сети, с которыми я использую посредничество. Одна часть кода выглядит следующим образом:
init {
initAppLovin()
initAdColony()
initChartboost()
initIronSource()
initMoPub()
initUnityAds()
initVungle()
initInMobi()
MobileAds.initialize(context)
}
Информация о каждой реализации приведена здесь: https://developers.google.com/admob/android/eu-consent