3

我对 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” - 这是正确的。如果我然后进入我的设备设置并在我的应用程序上执行“清除数据”并重新启动它,它再次返回“假”。

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

有趣的是,我尝试在我的 AsyncTask 的doInBackground方法中调用isRequestLocationInEeaOrUnknown()(我在 onCreate 中关闭了这个 ASync),然后它第一次启动时返回“true”,就像在 ASync 的“onPostExecute”中调用它一样方法。只是在 onCreate 中对其进行的调用不会(在异步启动之前或之后)。

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

4

3 回答 3

5

您必须在调用回调isRequestLocationInEeaOrUnknown()onConsentInfoUpdated 调用。

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

于 2018-11-29T11:00:47.610 回答
2

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

添加此用于测试仅在生产中删除它们并确保在请求同意之前添加它们

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)
                        }
                    }
                }
            }
        })
于 2018-08-10T12:17:10.750 回答
1

我也面临同样的问题,有些国家是正确的,有些则不是。我也试过“ https://adservice.google.com/getconfig/pubvendors

于 2018-05-27T10:24:15.767 回答