Android: получение местоположения пользователя с помощью Admob's Consent SDK
У меня проблема с новым AdMob 'Consent 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 (я, кстати, в EEA).
Если я затем выйду из приложения и перезапущу его, оно вернет "true" - это правильно. Если я затем зайду в настройки своего устройства и выполню "очистку данных" в моем приложении и перезапущу его, он снова выдаст "false".
Очевидно, это вызывает беспокойство, так как я показываю свой собственный диалог для пользователей EEA/Swizerland, а не ROW. И это должно произойти при первом запуске.
Интересно, что я попытался поместить вызов isRequestLocationInEeaOrUnknown () в мой метод doynBackground AsyncTask (я запускаю этот ASync в onCreate), а затем он возвращает "true" при первом запуске, как и вызовы, сделанные в ASync "onPostExecute". метод. Просто в onCreate обращений к нему нет (до или после запуска Async).
Я знаю, что это первые дни, но кто-нибудь сталкивался с подобными проблемами с этим?
3 ответа
Вы должны позвонить isRequestLocationInEeaOrUnknown()
после onConsentInfoUpdated
обратный вызов называется.
Это значение извлекается асинхронно 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"