javaandroidcounterinterstitial

How can I make the interstitial ad appear when the button counter reaches the targeted number?


When the button counter reaches the targeted clicks, I show an interstitial ad. The interstitial ad was working fine until I left the project for quite a while and today when I returned to it, it wasn't working. I have two different interstitial ads that I want to show on different amounts of clicks, but neither of them are working.

Home.java

    int countClicksNext = 0;
    int countClicksCopy = 0;
    
    int triggerClicksNav = 7;
    int triggerClicks = 3; 

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);
         
         // Ads

        MobileAds.initialize(this, initializationStatus -> {
        });

        AdView mAdView = findViewById(R.id.adView);

        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mAdView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
            }

            @Override
            public void onAdFailedToLoad(@NotNull LoadAdError adError) {
                super.onAdFailedToLoad(adError);
                mAdView.loadAd(adRequest);
            }

            @Override
            public void onAdOpened() {
                super.onAdOpened();
            }

            @Override
            public void onAdClicked() {
                super.onAdClicked();
            }

            @Override
            public void onAdClosed() {
                super.onAdClosed();
            }
        });

 }



    @SuppressLint("SetTextI18n")
    private void next() {
        countClicksNext++;
        position = (position + 1) % quotes_list.size();
        quotesTxt.setText(quotes_list.get(position));
        countTxt.setText(position + "/" + quotes_list.size());
        if (mInterstitialAd != null && countClicksNext >= triggerClicksNav) {
           showAd();
        }
    }

   


    private void copy() {
        countClicksCopy++;
        ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clipData = ClipData.newPlainText("text", quotesTxt.getText());
        if (clipboardManager != null) {
            clipboardManager.setPrimaryClip(clipData);
        }
        Toast.makeText(getApplicationContext(), "Copied", Toast.LENGTH_SHORT).show();
        if (mInterstitialAd != null && countClicksCopy >= triggerClicks) {
           showAdOth();
        }

    }

   

 private void showAd() {
        mInterstitialAd.show(HomeActivity.this);
        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
            @Override
            public void onAdDismissedFullScreenContent() {
                super.onAdDismissedFullScreenContent();
                mInterstitialAd = null;
                intertitalAd();
              
               countClicksNext = 0;
             
            }
        });
    }
    private void showAdOth() {
        mInterstitialAd.show(HomeActivity.this);
        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
            @Override
            public void onAdDismissedFullScreenContent() {
                super.onAdDismissedFullScreenContent();
                mInterstitialAd = null;
                intertitalAdOth();
                countClicksCopy = 0;
                
            }
        });
    }

    public void intertitalAd() {

        AdRequest adRequest = new AdRequest.Builder().build();


        InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest,
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                        // The mInterstitialAd reference will be null until
                        // an ad is loaded.
                        mInterstitialAd = interstitialAd;
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        // Handle the error
                        mInterstitialAd = null;
                    }
                });

    }
    public void intertitalAdOth() { 

        AdRequest adRequest = new AdRequest.Builder().build();


        InterstitialAd.load(this, "ca-app-pub-3940256099942544/8691691433", adRequest,
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                        // The mInterstitialAd reference will be null until
                        // an ad is loaded.
                        mInterstitialAd = interstitialAd;
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        // Handle the error
                        mInterstitialAd = null;
                    }
                });

    }

Solution

  • This is my old app I implemented InterstitialAd on it

    first, create two vars one for interstitial ad and the other to store the number of the clicks

    private static byte clickNumber = 0;
    private InterstitialAd interstitialAd;
    

    second in onCreate prepare the advertisement

    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    interstitialAd.loadAd(new AdRequest.Builder().build());
    

    the ad method shows the ad when the targeted click is reached e.g 3 clicks

      public static void detailsActivityInterstitial(){
            interstitialAd.setAdListener(new AdListener() {
                @Override
                public void onAdLoaded() {
                    // Code to be executed when an ad finishes loading.
                    if(clickNumber == 3){
                        interstitialAd.show();
                    }else {
                        clickNumber++;
                    }
    
                }
    
                @Override
                public void onAdFailedToLoad(int errorCode) {
                    // Code to be executed when an ad request fails.
                    Log.e("onAdFailedToLoad","detailsActivityInterstitial" + errorCode);
                }
    
                @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.
                    clickNumber = 0;
                }
    
                @Override
                public void onAdClosed() {
                    // Code to be executed when the interstitial ad is closed.
                    clickNumber = 0;
    
                }
            });
        }
    

    and finally, call the method in onStart method when user is connected

     if(Utils.hasNetworkAccess(this)) {
    MobileAds.initialize(this, getString(R.string.ADMOB_APP_ID));
    detailsActivityInterstitial();
    }
    

    Also, there are Google sample ads on GitHub for every type of AdMob ads, you can use it as a reference, the following one is for interstitial, It simulates the display of an ad in a game

    the layout

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MyActivity"
        tools:ignore="MergeRootFrame">
    
        <TextView
            android:id="@+id/game_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="50dp"
            android:text="@string/impossible_game"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <TextView
            android:id="@+id/timer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/game_title"
            android:layout_centerHorizontal="true"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <Button
            android:id="@+id/retry_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="Retry" />
    
    </RelativeLayout>
    

    The activity class

    /**
     * Main Activity. Inflates main activity xml.
     */
    @SuppressLint("SetTextI18n")
    public class MyActivity extends AppCompatActivity {
    
        private static final long GAME_LENGTH_MILLISECONDS = 3000;
        private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/1033173712";
        private static final String TAG = "MyActivity";
    
        private InterstitialAd interstitialAd;
        private CountDownTimer countDownTimer;
        private Button retryButton;
        private boolean gameIsInProgress;
        private long timerMilliseconds;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
    
            // Log the Mobile Ads SDK version.
            Log.d(TAG, "Google Mobile Ads SDK Version: " + MobileAds.getVersion());
    
            // Initialize the Mobile Ads SDK.
            MobileAds.initialize(this, new OnInitializationCompleteListener() {
                @Override
                public void onInitializationComplete(InitializationStatus initializationStatus) {}
            });
    
        loadAd();
    
            // Create the "retry" button, which tries to show an interstitial between game plays.
            retryButton = findViewById(R.id.retry_button);
            retryButton.setVisibility(View.INVISIBLE);
            retryButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showInterstitial();
                }
            });
    
            startGame();
        }
    
      public void loadAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(
            this,
            AD_UNIT_ID,
            adRequest,
            new InterstitialAdLoadCallback() {
              @Override
              public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                // The mInterstitialAd reference will be null until
                // an ad is loaded.
                MyActivity.this.interstitialAd = interstitialAd;
                Log.i(TAG, "onAdLoaded");
                Toast.makeText(MyActivity.this, "onAdLoaded()", Toast.LENGTH_SHORT).show();
                interstitialAd.setFullScreenContentCallback(
                    new FullScreenContentCallback() {
                      @Override
                      public void onAdDismissedFullScreenContent() {
                        // Called when fullscreen content is dismissed.
                        // Make sure to set your reference to null so you don't
                        // show it a second time.
                        MyActivity.this.interstitialAd = null;
                        Log.d("TAG", "The ad was dismissed.");
                      }
    
                      @Override
                      public void onAdFailedToShowFullScreenContent(AdError adError) {
                        // Called when fullscreen content failed to show.
                        // Make sure to set your reference to null so you don't
                        // show it a second time.
                        MyActivity.this.interstitialAd = null;
                        Log.d("TAG", "The ad failed to show.");
                      }
    
                      @Override
                      public void onAdShowedFullScreenContent() {
                        // Called when fullscreen content is shown.
                        Log.d("TAG", "The ad was shown.");
                      }
                    });
              }
    
              @Override
              public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                // Handle the error
                Log.i(TAG, loadAdError.getMessage());
                interstitialAd = null;
    
                String error =
                    String.format(
                        "domain: %s, code: %d, message: %s",
                        loadAdError.getDomain(), loadAdError.getCode(), loadAdError.getMessage());
                Toast.makeText(
                        MyActivity.this, "onAdFailedToLoad() with error: " + error, Toast.LENGTH_SHORT)
                    .show();
              }
            });
      }
    
        private void createTimer(final long milliseconds) {
            // Create the game timer, which counts down to the end of the level
            // and shows the "retry" button.
            if (countDownTimer != null) {
                countDownTimer.cancel();
            }
    
            final TextView textView = findViewById(R.id.timer);
    
            countDownTimer = new CountDownTimer(milliseconds, 50) {
                @Override
                public void onTick(long millisUnitFinished) {
                    timerMilliseconds = millisUnitFinished;
                    textView.setText("seconds remaining: " + ((millisUnitFinished / 1000) + 1));
                }
    
                @Override
                public void onFinish() {
                    gameIsInProgress = false;
                    textView.setText("done!");
                    retryButton.setVisibility(View.VISIBLE);
                }
            };
        }
    
        @Override
        public void onResume() {
            // Start or resume the game.
            super.onResume();
    
            if (gameIsInProgress) {
                resumeGame(timerMilliseconds);
            }
        }
    
        @Override
        public void onPause() {
            // Cancel the timer if the game is paused.
            countDownTimer.cancel();
            super.onPause();
        }
    
        private void showInterstitial() {
        // Show the ad if it's ready. Otherwise toast and restart the game.
        if (interstitialAd != null) {
          interstitialAd.show(this);
            } else {
                Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
                startGame();
            }
        }
    
        private void startGame() {
        // Request a new ad if one isn't already loaded, hide the button, and kick off the timer.
        if (interstitialAd == null) {
          loadAd();
            }
    
            retryButton.setVisibility(View.INVISIBLE);
            resumeGame(GAME_LENGTH_MILLISECONDS);
        }
    
        private void resumeGame(long milliseconds) {
            // Create a new timer for the correct length and start it.
            gameIsInProgress = true;
            timerMilliseconds = milliseconds;
            createTimer(milliseconds);
            countDownTimer.start();
        }
    }
    

    This video from the Google Admob channel shows the Best practices to win with AdMob interstitial ads