android – LAYOUT ENCOURAGES ACCIDENTAL CLICKS – INTERSTITIAL ADS:-ThrowExceptions

Exception or error:

Please any one help Now my app has disable by admob due to wrong interstitial code as

“Interstitial ads that load unexpectedly while a user is viewing the
app’s content”.

what to do? Please some one correct me…

    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    import android.support.v7.app.AppCompatActivity;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;

    import com.google.android.gms.ads.AdListener;
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.AdView;
    import com.google.android.gms.ads.InterstitialAd;

    public class a2 extends AppCompatActivity {

        AdView mAdView;
        InterstitialAd mInterstitialAd;
        WebView WebViewWithCSS;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_a2);

            WebViewWithCSS = (WebView)findViewById(R.id.webView);

            WebSettings webSetting = WebViewWithCSS.getSettings();
            webSetting.setJavaScriptEnabled(true);

            WebViewWithCSS.setWebViewClient(new WebViewClient());
            WebViewWithCSS.loadUrl("file:///android_asset/2.html");

            mAdView = (AdView) findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder()
                    .build();
            mAdView.loadAd(adRequest);

            mInterstitialAd = new InterstitialAd(this);

            // set the ad unit ID
            mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));

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

            // Load ads into Interstitial Ads
            mInterstitialAd.loadAd(adRequest);

            mInterstitialAd.setAdListener(new AdListener() {
                public void onAdLoaded() {
                    showInterstitial();
                }
            });
        }

        @Override
        public void onPause() {
            if (mAdView != null) {
                mAdView.pause();
            }
            super.onPause();
        }

        @Override
        public void onResume() {
            super.onResume();
            if (mAdView != null) {
                mAdView.resume();
            }
        }

        @Override
        public void onDestroy() {
            if (mAdView != null) {
                mAdView.destroy();
            }
            super.onDestroy();
        }


        private void showInterstitial() {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            }
        }
    }
How to solve:

from admobs own guidelines

“A common issue is that even though you may intend for the ad to load in between page content, the ad itself appears shortly after a new page of content has loaded due to carrier latency.”

Your code shows the interstitial when it has finished loading – this won’t give the user any warning so they’ll be in the middle of looking at the webview and suddenly the interstitial appears. Pre-load it and show it at a natural break.

Your code calls showInterstitial() in onAdLoaded() – it needs to call mInterstitialAd.loadAd() in advance of the ad being needed, and set a flag to say that it is present. It can then call the showInterstitial() before loading the webview and show the web view when the interstitial ad is dismissed

###

Ads are disabled on my app after a couple of warnings, even I followed AdMob guidelines. I found the following key points in my research:

  • Show Interstitial between pages
  • Show Interstitial when a game level is completed
  • Avoid accidental clicks
  • Show on RIGHT TIME

The only issue I had was with right time. When is the right time for loading Interstitial? It all depends on you but in my case, an Interstitial was loading and showing after few seconds activity. This was happening because of slow internet connection. What basically happens is that activity shows and a user start interaction but Interstitial is not loaded yet. But the Interstitial loads and shows in the mid of interaction which causes an accidental click – which is against the policy.

Here are some corrective measures I took for my app:

  • Limit showing an ad for a person
  • Check if an ad is loaded and then display it while leaving an activity

For the first point, I used AdMob settings to limit the Frequency Cap to limit displaying an ad for a person. I show one ad in five minutes.

Frequency capping: Limits the number of times ads are shown to the same
person per minute, per hour, or per day.
Google AdMob

And I also used counter in an activity to show an ad when a user visits an activity a couple of times.

For the second point, I show an ad when a user goes back to the previous screen.

In the onCreate() method:

counter = sharedPreferences.getInt(AD_COUNT, 0);
editor = sharedPreferences.edit();

if(2 == counter) {
    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId(getString(R.string.interstitial_unitID));
    interstitialAd.loadAd(adRequest);
} else {
    editor.putInt(AD_COUNT, sharedPreferences.getInt(AD_COUNT, 0) + 1).apply();
}

And onBackPressed() method:

@Override
public void onBackPressed() {
    if (2 == counter && interstitialAd.isLoaded()) {
        interstitialAd.show();

        //Reset the counter
        editor.putInt(AD_COUNT, sharedPreferences.getInt(AD_COUNT, 0)).apply();
    }
    super.onBackPressed();
}

###

Here is how to fix “LAYOUT ENCOURAGES ACCIDENTAL CLICKS – INTERSTITIAL ADS” violation and other possible violations

http://hackerseve.com/how-to-implement-admob-s-interstitial-ad-the-right-way-in-android-apps/

Leave a Reply

Your email address will not be published. Required fields are marked *