Android Tutorials
Admob App Open Ads in Android – Admob Ads v-20.2.0
Admob App Open Ads are the latest Ad Formats of Admob. App open ads are a special ad format intended for publishers wishing to monetize their app load screens. App open ads can be closed at any time, and are designed to be shown when your users bring your app to the foreground.
App open ads automatically show a small branding area so users know they’re in your app.
Add these activity lifecycle dependencies in your app-level build.Gradle file.
Table of Contents
build.gradle:
//Add these inside dependencies def lifecycle_version = "2.0.0" implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
Now First, create a Utility class called AppOpenManager.
AppOpenManager.java
package com.example.admobtutorial; import android.app.Activity; import android.app.Application; import android.os.Bundle; import android.util.Log; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; import androidx.lifecycle.ProcessLifecycleOwner; import com.google.android.gms.ads.AdError; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.FullScreenContentCallback; import com.google.android.gms.ads.LoadAdError; import com.google.android.gms.ads.appopen.AppOpenAd; import java.util.Date; import static androidx.lifecycle.Lifecycle.Event.ON_START; public class AppOpenManager implements LifecycleObserver,Application.ActivityLifecycleCallbacks{ private static final String LOG_TAG = "AppOpenManager"; private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/3419835294"; private AppOpenAd appOpenAd = null; private AppOpenAd.AppOpenAdLoadCallback loadCallback; private Activity currentActivity; private final myApplication myApplication; private static boolean isShowingAd = false; private long loadTime = 0; /** Constructor */ public AppOpenManager(myApplication myApplication) { this.myApplication = myApplication; this.myApplication.registerActivityLifecycleCallbacks(this); ProcessLifecycleOwner.get().getLifecycle().addObserver(this); } /** LifecycleObserver methods */ @OnLifecycleEvent(ON_START) public void onStart() { showAdIfAvailable(); Log.d(LOG_TAG, "onStart"); } /** Request an ad */ public void fetchAd() { // We will implement this below. // Have unused ad, no need to fetch another. if (isAdAvailable()) { return; } loadCallback = new AppOpenAd.AppOpenAdLoadCallback() { /** * Called when an app open ad has loaded. * * @param ad the loaded app open ad. */ @Override public void onAdLoaded(AppOpenAd ad) { AppOpenManager.this.appOpenAd = ad; AppOpenManager.this.loadTime = (new Date()).getTime(); } /** * Called when an app open ad has failed to load. * * @param loadAdError the error. */ @Override public void onAdFailedToLoad(LoadAdError loadAdError) { // Handle the error. } }; AdRequest request = getAdRequest(); AppOpenAd.load( myApplication, AD_UNIT_ID, request, AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT, loadCallback); } public void showAdIfAvailable() { // and an ad is available. if (!isShowingAd && isAdAvailable()) { Log.d(LOG_TAG, "Will show ad."); FullScreenContentCallback fullScreenContentCallback = new FullScreenContentCallback() { @Override public void onAdDismissedFullScreenContent() { // Set the reference to null so isAdAvailable() returns false. AppOpenManager.this.appOpenAd = null; isShowingAd = false; fetchAd(); } @Override public void onAdFailedToShowFullScreenContent(AdError adError) {} @Override public void onAdShowedFullScreenContent() { isShowingAd = true; } }; appOpenAd.setFullScreenContentCallback(fullScreenContentCallback); appOpenAd.show(currentActivity); } else { Log.d(LOG_TAG, "Can not show ad."); fetchAd(); } } /** Creates and returns ad request. */ private AdRequest getAdRequest() { return new AdRequest.Builder().build(); } private boolean wasLoadTimeLessThanNHoursAgo(long numHours) { long dateDifference = (new Date()).getTime() - this.loadTime; long numMilliSecondsPerHour = 3600000; return (dateDifference < (numMilliSecondsPerHour * numHours)); } /** Utility method that checks if ad exists and can be shown. */ public boolean isAdAvailable() { return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4); } /** ActivityLifecycleCallback methods */ @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} @Override public void onActivityStarted(Activity activity) { currentActivity = activity; } @Override public void onActivityResumed(Activity activity) { currentActivity = activity; } @Override public void onActivityStopped(Activity activity) {} @Override public void onActivityPaused(Activity activity) {} @Override public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {} @Override public void onActivityDestroyed(Activity activity) { currentActivity = null; } }
Now create an Application class
myApplication.java
package com.example.admobtutorial; import android.app.Application; import com.google.android.gms.ads.MobileAds; import com.google.android.gms.ads.initialization.InitializationStatus; import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; public class myApplication extends Application { private static AppOpenManager appOpenManager; @Override public void onCreate() { super.onCreate(); MobileAds.initialize( this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) {} }); appOpenManager = new AppOpenManager(this); } }