Android:使用 Admob 的同意 SDK 获取用户的位置信息



我对AdMob的新"意见征求SDK"有问题;集成指南说要将以下内容放入onCreate...

public class MainActivity extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
ConsentInformation consentInformation = ConsentInformation.getInstance(context);
String[] publisherIds = {"pub-xxxxxxxxxxxxxxxx"};
consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
@Override
public void onConsentInfoUpdated(ConsentStatus consentStatus) {
// User's consent status successfully updated.
}
@Override
public void onFailedToUpdateConsentInfo(String errorDescription) {
// User's consent status failed to update.
}
});
...
}
...
}

然后拨打电话:

ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown()

我遇到的问题是,当应用程序首次安装/启动时,isRequestLocationInEeaOrUnknown((总是返回"false"(顺便说一下,我在欧洲经济区(。

如果我然后退出应用程序并重新启动它,它会返回"true"——这是正确的。 如果我然后进入我的设备设置并在我的应用程序上执行"清除数据"并重新启动它,它会再次返回"false"。

显然,这令人担忧,因为我向 EEA/瑞士用户展示我自己的自定义同意对话框,而不是 ROW。这需要在首次发布时发生。

有趣的是,我尝试在我的AsyncTask的doInBackground方法中调用isRequestLocationInEeaOrUnknown(((我在onCreate中启动了这个ASync(,然后它在首次启动时确实返回"true",就像在ASync的"onPostExecute"方法中对它的调用一样。只是在onCreate中对它的调用不会(在异步启动之前或之后(。

我知道现在还为时过早,但是有没有人偶然发现类似的问题?

您必须在调用回调后调用onConsentInfoUpdatedisRequestLocationInEeaOrUnknown()

此值由requestConsentInfoUpdate()异步检索,因此它在第一次启动时不正确,但随后会缓存,因此在第二次启动时您拥有正确的值。

由于我遇到了同样的问题,并且码头有点混乱,我将尝试解释它是如何工作的。

添加此内容进行测试 仅在生产中删除它们,并确保在请求同意之前添加它们

ConsentInformation.getInstance(this@MainActivity).addTestDevice("DEVICE_ID") // add your device id for testing
ConsentInformation.getInstance(this@MainActivity).debugGeography = DebugGeography.DEBUG_GEOGRAPHY_EEA // test if user in EEA
ConsentInformation.getInstance(this@MainActivity).consentStatus = ConsentStatus.UNKNOWN // this sets the state to unknown, useful to reset the consent state in between tests careful to remove this if you want to see the flow for a returning user 

请求同意状态,如下所示:

val consentInformation = ConsentInformation.getInstance(this@MainActivity)
val publisherIds = arrayOf(ADMOB_PUBLISHER_ID)
consentInformation.requestConsentInfoUpdate(publisherIds, object: ConsentInfoUpdateListener {
override fun onFailedToUpdateConsentInfo(reason: String?) {
// consent request failed so probably you sould display non personalized ads
log("MAIN ACTIVITY", "FAILED TO UPDATE CONSENT SHOW NOT PERSONALIZED")
initializeAds(NON_PERSONALIZED)
// YOU COULD RETRY HERE OR IT WILL RETRY ON NEXT SESSION 
}
override fun onConsentInfoUpdated(consentStatus: ConsentStatus?) {
when (consentStatus) {
ConsentStatus.PERSONALIZED -> {
log("MAIN ACTIVITY", "USER OPTED FOR PERSONALIZED")
// USER ALREADY GAVE HIS CONSENT FOR YOUR PUBLISHER ID SO YOU CAN DISPLAY PERSONALIZED ADS
initializeAds(PERSONALIZED)
}
ConsentStatus.NON_PERSONALIZED -> {
log("MAIN ACTIVITY", "USER OPTED FOR NON_PERSONALIZED")
// USER OPTED FOR NON_PERSONALIZED ADS SO INCLUDE THAT IN YOUR ADD REQUEST                            
initializeAds(NON_PERSONALIZED)
}
ConsentStatus.UNKNOWN -> {
log("MAIN ACTIVITY", "USER CONSENT STATUS IS UNKNOWN ")
// USER WAS NEVER PROMPTED TO GIVE HIS CONSENT (DEFAULT STATE FOR ALL USERS) 
if (consentInformation.isRequestLocationInEeaOrUnknown) {
log("MAIN ACTIVITY", "USER IS IN EEA REQUEST CONSENT ")
// USER IS IN THE EEA AREA SO WE NEED TO REQUEST HIS CONSENT (WE SHOW THE PROMPT HERE) YOU SHOULD UPDATE CONSENT WITH HIS OPTION SO THIS FUNCTION WILL NEVER GET CALLED AGAIN
requestConsentFromUser()  
} else {
log("MAIN ACTIVITY", "USER NOT IN EEA INITIALIZE ADS ")
// USER IS NOT IN EEA SO WE ARE NOT REQUIRED TO REQUEST CONSENT (YOU COULD STILL REQUEST IT IF YOU LIKE)
initializeAds(PERSONALIZED)
}
}
}
}
})

我面对同样的情况,有些国家是正确的,有些则不是。 我也尝试了"https://adservice.google.com/getconfig/pubvendors">

最新更新