如何通过调解在各种广告网络中使用admob时请求对个性化广告的同意



我想通过使用AdMob在Android应用程序中使用中介。因此,我连接了不同的广告网络(Vungle、AdColony、MoPub等(,并将它们集成到我的AdMob账户的"中介"中。我注意到我必须遵守GDPR,并且我必须征得用户的同意才能显示个性化广告。我从谷歌了解到了consent SDK,它可以做很多功能。其中一个功能是显示的对话框(https://developers.google.com/admob/images/android_eu_consent_form.png)。但是我读到,如果我使用中介,我就不能使用这个对话框。那么,如何在使用中介的同时实现这一点呢?

谢谢!!

我通过使用Consent SDK和我自己的代码的组合来解决这个问题。每次用户进入应用程序(不知道我是否应该这样做,经常这样(,我都会初始化同意SDK。

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文本视图(具有指向广告网络的网页的可扩展字符串的描述(,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

最新更新