Android: получение местоположения пользователя с помощью Admob's Consent SDK - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с новым 'Consent SDK' AdMob ; руководство по интеграции говорит, что в 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 (I am в EEA попуть).

Если я затем выйду из приложения и перезапущу его, он вернет «true» - это правильно.Если затем я зайду в настройки своего устройства и выполню «очистку данных» в моем приложении и перезапущу его, он снова выдаст «false».

Очевидно, это вызывает беспокойство, так как я показываю свое собственное согласиедиалог для пользователей EEA / Swizerland, чем я ROW.И это должно произойти при первом запуске.

Интересно, что я попытался поставить вызов isRequestLocationInEeaOrUnknown () в моем методе AsyncTask ' doInBackground (я отключаю этот ASyncв onCreate), а затем возвращает 'true' при первом запуске, так же как и вызовы к нему, сделанные в методе onynSostExecute в ASync.Просто звонки, сделанные в onCreate, не выполняются (до или после запуска Async).

Я знаю, что это рано, но кто-нибудь сталкивался с подобными проблемами с этим?

Ответы [ 3 ]

0 голосов
/ 10 августа 2018

Поскольку я столкнулся с той же проблемой, а доки немного сбивают с толку, я попытаюсь объяснить, как это работает.

добавьте это для тестирования, удалите их только в производстве и убедитесь, что вы добавляете их, прежде чем запрашивать согласие

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)
                        }
                    }
                }
            }
        })
0 голосов
/ 29 ноября 2018

Вы должны вызывать isRequestLocationInEeaOrUnknown() после вызова onConsentInfoUpdated.

Это значение асинхронно извлекается requestConsentInfoUpdate(), поэтому оно неверно при первом запуске, но затем кэшируется так во второмзапустить у вас правильное значение.

0 голосов
/ 27 мая 2018

Я сталкиваюсь с тем же, некоторые страны правы, некоторые нет.Я пытался "https://adservice.google.com/getconfig/pubvendors" тоже

...