【问题标题】:AdMob never loads on certain devicesAdMob 永远不会在某些设备上加载
【发布时间】:2020-03-11 11:05:47
【问题描述】:

我在 Play 商店中有一款不错的应用,有几千名用户,而且我已经使用 AdMob 插页式广告和横幅广告几年了。最近我注意到在某些设备上广告永远不会加载。

我已经检查了所有内容,而且这几天我一直在摸不着头脑。在这些设备上,AdMob 已初始化,但插页式广告和横幅永远不会加载。

        MobileAds.initialize( this, (InitializationStatus initializationStatus) -> {
        Log.d( TAG, "initAds: " + initializationStatus );
        loadInterstitialAd();
        //loadRewardedVideoAd();
    } );

以上返回 com.google.android.gms.internal.ads.z​​zahg@xxxxxx

有类似经历的朋友吗?

每次我尝试展示广告时,插页式广告的状态都是“加载中”。这可能发生在我所有客户端设备的大约 10-15% 和我的一个带有 Android API 22 的模拟器上。

我还检查了我的日志,可以说这些设备与 Android 8,9 和 10 以及三星、LGE、摩托罗拉和谷歌的设备不同。

我什至尝试过使用测试广告单元 ID。结果是一样的。

更新->代码

  private void loadInterstitialAd() {
    if (mInterstitialAd == null) {
        mInterstitialAd = new InterstitialAd( MainActivity.this );
        mInterstitialAd.setAdUnitId( ADMOB_INTERSTITIAL );//REAL
    }

    List<String> testDevices = new ArrayList<>();
    testDevices.add(AdRequest.DEVICE_ID_EMULATOR);
    testDevices.add( ADMOB_TEST_DEVICE_1 );
    testDevices.add( ADMOB_TEST_DEVICE_2 );
    RequestConfiguration requestConfiguration
            = new RequestConfiguration.Builder()
            .setTestDeviceIds(testDevices)
            .build();
    MobileAds.setRequestConfiguration(requestConfiguration);

    final AdRequest request = new AdRequest.Builder()
            .build();
    mInterstitialAd.loadAd( request );


    mInterstitialAd.setAdListener( new AdListener() {
        @Override
        public void onAdClosed() {
            //Log.d( TAG, "onAdClosed: Before" );
            new Handler().postDelayed( () -> EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) ), 200 );
            //Log.d( TAG, "onAdClosed: After" );s
            mInterstitialAd.loadAd( request );
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            if (!mInterstitialAd.isLoading()) {
                mInterstitialAd.loadAd( request );
            }
            Log.d( TAG, "onAdFailedToLoad: " + errorCode );
        }

        @Override
        public void onAdLoaded() {
            Log.d( TAG, "onAdLoaded: " );
            super.onAdLoaded();
        }

    } );
    Log.d( TAG, "loadInterstitialAd: 4 " + (mInterstitialAd == null ? "NULL" : "NOT NULL") );
}



  public void showInterstitial() {
    Log.d( TAG, "showInterstitial: 0" );
    try {
        if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
            Log.d( TAG, "showInterstitial: 1" );
        } else {
            EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) );
            loadInterstitialAd();
            Log.d( TAG, "showInterstitial: 2" );
            SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences( mContext ).edit();
            editor.putLong( "mLastAdShownTime" + appSuffix, 0 );
            editor.commit();

        }
        if (mInterstitialAd.isLoading()) {
            Log.d( TAG, "showInterstitial: LOADING" );
            Crashlytics.log( TAG + " -showInterstitial - " + getAccountID( mContext ) );
            Crashlytics.logException( new RuntimeException() );
        }
    } catch (Exception e) {
        Log.d( TAG, "showInterstitial: 3" );
        Crashlytics.log( TAG + " -showInterstitial - " + e.toString() );
        Crashlytics.logException( e );
        EventBus.getDefault().post( new MessageEvent( EVENT_MESSAGE_ADMOB, EVENT_ACTION_AD_FINISHED, new Bundle() ) );
        e.printStackTrace();
        loadInterstitialAd();
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences( mContext ).edit();
        editor.putLong( "mLastAdShownTime" + appSuffix, 0 );
        editor.commit();

    }
}

【问题讨论】:

  • 能否分享加载广告和展示广告的详细代码sn-ps。
  • 嗨 Daxesh,我已经用我的加载和显示代码更新了线程。感谢您的帮助。
  • 是某些设备的问题吧?
  • 请从 onAdFailedToLoad() 中删除加载广告,因为强烈建议不要尝试从 onAdFailedToLoad() 方法加载新广告。如果您必须从 onAdFailedToLoad() 加载广告,请限制广告加载重试次数,以避免在网络连接受限等情况下不断失败的广告请求。
  • 在代码中,您设置了实时广告 id 并设置了 2 个测试设备。但如果测试设备 id 与代码不匹配,那么在测试应用时设置测试插页式 id 效果会更好。

标签: android admob interstitial


【解决方案1】:

当您在调试模式下工作时,请确保您设置了测试广告 ID,因为 Admob 在应用发布之前从不投放实时广告。

测试应用ID:ca-app-pub-3940256099942544~3347511713

Test Ads

在清单中声明

  <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-3940256099942544~3347511713" />

代码片段

private InterstitialAd interstitialAd;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    loadFullscreenAd();
}

private void loadFullscreenAd() {

    if (mInterstitialAd != null) {
        if (!mInterstitialAd.isLoading() && !mInterstitialAd.isLoaded()) {
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }
        return;
    }
    mInterstitialAd = new InterstitialAd(getActivity());
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            // Code to be executed when an ad finishes loading.
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            loadFullscreenAd();
        }

        @Override
        public void onAdOpened() {
            // Code to be executed when the ad is displayed.

        }

        @Override
        public void onAdLeftApplication() {
            // Code to be executed when the user has left the app.
        }

        @Override
        public void onAdClosed() {

            loadFullscreenAd();
        }
    });
}

 public void showFullScreenAds() {
    if (mInterstitialAd != null) {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }else if(!mInterstitialAd.isLoading()){
            loadFullscreenAd();
        }
    }else {
        loadFullscreenAd();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多