我们应该先调用 MobileAds.setRequestConfiguration 还是 MobileAds.initialize?

Should we first call MobileAds.setRequestConfiguration or MobileAds.initialize?

这方面的文档不多。我在想,我们是不是应该先打电话给

RequestConfiguration conf= new RequestConfiguration.Builder()
        .setMaxAdContentRating(
                MAX_AD_CONTENT_RATING_T)
        .build();

MobileAds.setRequestConfiguration(conf);
MobileAds.initialize(context, APP_ID);

MobileAds.initialize(context, APP_ID);
RequestConfiguration conf= new RequestConfiguration.Builder()
        .setMaxAdContentRating(
                MAX_AD_CONTENT_RATING_T)
        .build();

MobileAds.setRequestConfiguration(conf);

https://developers.google.com/admob/android/quick-start

尽管Google建议尽早致电MobileAds.initialize

Before loading ads, have your app initialize the Mobile Ads SDK by calling MobileAds.initialize() which initializes the SDK and calls back a completion listener once initialization is complete (or after a 30-second timeout). This needs to be done only once, ideally at app launch.

他们还提到 "request-specific flags" 需要在 MobileAds.initialize 之前设置。

Warning: Ads may be preloaded by the Mobile Ads SDK or mediation partner SDKs upon calling MobileAds.initialize(). If you need to obtain consent from users in the European Economic Area (EEA), set any request-specific flags (such as tagForChildDirectedTreatment or tag_for_under_age_of_consent), or otherwise take action before loading ads, ensure you do so before initializing the Mobile Ads SDK.

所以,不太清楚应该先调用哪个。

根据官方documentation

Before loading ads, have your app initialize the Mobile Ads SDK by calling MobileAds.initialize() which initializes the SDK and calls back a completion listener once initialization is complete (or after a 30-second timeout). This needs to be done only once, ideally at app launch.

所以,你应该先初始化MobileAds,看看官方文档中的例子here:

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MobileAds.initialize(this, new OnInitializationCompleteListener() {
        @Override
        public void onInitializationComplete(InitializationStatus initializationStatus) {
        }
    });
    mAdView = findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
}

根据Google开发者支持,以下是正确的做法

https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/android/17oVu0sABjs

RequestConfiguration conf= new RequestConfiguration.Builder()
        .setMaxAdContentRating(
                MAX_AD_CONTENT_RATING_T)
        .build();

MobileAds.setRequestConfiguration(conf);
MobileAds.initialize(context, APP_ID);

就这样完成了:

MobileAds.RequestConfiguration =
    new RequestConfiguration
        .Builder()
        .SetTagForChildDirectedTreatment(RequestConfiguration.TagForChildDirectedTreatmentTrue)
        .SetMaxAdContentRating(RequestConfiguration.MaxAdContentRatingG)
#if DEBUG
        .SetTestDeviceIds(new[] { "..." })
#endif
        .Build();