Search code examples
androidadmobadsgoogle-mobile-ads

Can't show interstial ad in my app (still in developement)


I swear i have tried many many ways to resolve this problem, but i'ml tired and it's saturday and i'm still workin on only this problem...

Please help!!

  • I registred my device as a test device
  • My admob account is validated a few weeks ago
  • Google test ads work fine on the same device
  • Tested with two real devices without success

Here is my myactivity.java:

       MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });
        if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
        }
        // Create the InterstitialAd and set the adUnitId.
        mInterstitialAd = new InterstitialAd(this);
        // Defined in res/values/strings.xml
        mInterstitialAd.setAdUnitId(AD_UNIT_ID);
        RequestConfiguration configuration = new RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("BDB.....")).build();
        MobileAds.setRequestConfiguration(configuration);

        mInterstitialAd .setAdListener(
                new AdListener() {
                    @Override
                    public void onAdLoaded() {
                        Toast.makeText(MainActivity.this, "onAdLoaded()", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAdFailedToLoad(LoadAdError loadAdError) {
                        String error =
                                String.format(
                                        "domain: %s, code: %d, message: %s",
                                        loadAdError.getDomain(), loadAdError.getCode(), loadAdError.getMessage());
                        Toast.makeText(
                                MainActivity.this, "onAdFailedToLoad() with error: " + error, Toast.LENGTH_SHORT)
                                .show();
                    }

                    @Override
                    public void onAdClosed() {
                        //startGame();
                    }
                });


        if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
        }

And the gradle of the app :

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"
    defaultConfig {
        applicationId "com....."
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true 
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary 'org.apache.http.legacy'
}

dependencies {

    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.brewtab.json:json:1.0.0'
    implementation 'com.android.volley:volley:1.1.0'

    implementation 'com.google.firebase:firebase-ads:19.7.0'
    implementation 'com.google.firebase:firebase-auth:20.0.2'
    implementation 'com.google.android.gms:play-services-ads:19.7.0'
    implementation 'androidx.appcompat:appcompat:1.2.0'

}

Solution

  • i use this simplified solution for my interstitial ads and it always works but make sure you use a testing unit id

        //variables
        private InterstitialAd interstitialAd;
        
        //place this in your oncreate method
        public void loadAD()
        {
            interstitialAd= new InterstitialAd(this);
            interstitialAd.setAdUnitId(getString(R.string.ad_id));
            AdRequest adRequest = new AdRequest.Builder().build();
            interstitialAd.loadAd(adRequest);
        }
        //place this method where you want your ad to load (ex: onclick of a button)
        public void showAd()
        {
                if (interstitialAd.isLoaded()) 
                {
                    interstitialAd.show();
                    System.out.println("add shown");
                } 
                else 
                {
                    Log.d("TAG", "The interstitial wasn't loaded yet.");
                }
        }