Skip to content

App Open Ads

AppLovin React Native Plugin 4.1.0 introduces the app open ad format. App open ads are similar to interstitial ads but show when the user soft launches or cold starts the app:

Cold start
creating new session of the app on device
  • the app is not in device memory
  • splash/loading screen required
Soft launch
bringing the app from background to foreground, or turning the phone on when the app is in foreground mode
  • the app is suspended in memory
  • splash/loading screen required

Best Practices

  • Use a splash/loading screen before the app open ad shows. Do this no matter how the ad is placed within the app.
    • Include a call-out to the user that tells them they will see an ad within the Splash/Loading screen.
      • For example: “Watch an ad from their sponsor while the app loads.”
    • Ensure that the user is not exposed to actual app content before the ad shows. The correct sequence is: splash/loading screen ⇒ app open ad ⇒ app content.
  • Ensure that AppLovin’s SDK initializes before you load an app open ad.
  • When an app open ad is not yet loaded (i.e. on cold start), load it first. Load any other ad formats later so that you avoid loading them in parallel with the app open ad.
    • Loading multiple ad formats in parallel is not good for the device’s resources or for ad demand SDKs.
  • To avoid over-exposing users to App Open Ads, AppLovin suggests that you consider the following strategies:
    • Use a frequency cap that you manage outside of AppLovin. This way you have full control over when the ads will serve.
    • Implement a cool down period based on user behavior in the app. For example: don’t show an ad during soft launch for some period of time before you show one again, or show an ad only during every other soft launch.
    • Wait until new users open the app and use it a few times before you show the first App Open Ad.

Retention

Always consider retention when you implement the App Open Ad format.

For app open ads, you can choose from a variety of implementation strategies.

AppLovin recommends that you test by using one or more of the techniques described below. Each application has a unique configuration that allows it to maximize revenue without impacting retention or time spent in the app. User behavior and engagement may change over time, so AppLovin recommends that you retest your App Open Ads strategies regularly. Some implementation techniques you may use to test App Open Ads include:

  • Show to the right users. Examples of this technique include:
    • Wait a variable number of days after initial install to show on cold start.
    • Only show to users that have had a session in the last several days.
    • Only show to users that have reached certain criteria in the app. For example they have completed a certain level, they have opened the app a certain number of times, or they do not engage with Rewarded offerings.
  • Avoid over-exposing ads to users. Examples of this technique include:
    • Do not show an ad on every opportunity. Instead, show on every other, third, or fourth ad opportunity.
    • Only show an ad if the app is backgrounded for a certain amount of time (i.e. 30 seconds, 2 minutes, 15 minutes).
    • If you show a cold start ad, do not show soft launch app open ads or interstitials for a certain amount of time.
    • Use a frequency cap. If possible, tailor that cap according to the user cohort.
  • Use a splash screen to inform the user.

Using an App Open Ad

To ensure your app open ad is ready when your application is brought to the foreground, you need to preload an app open ad. Implement a utility class to make ad requests before your ad needs to be shown. Create a method that shows an ad if ready. Call that method when the app is brought to the foreground.

Your app then attempts to show an ad on app open, or loads an ad if one is not not preloaded.

Cold Starts and Loading Screens

There can be a delay between when you request an ad and receive an ad to show. This can cause the user to briefly see your app before being surprised by an out-of-context ad. You should avoid this, as it is a bad user experience. The preferred way to handle cold starts is to use a loading screen to precede any initial app content, and to show the ad from the loading screen. If the app shows any of your app content after the loading screen, do not show the ad.

You may have a loading screen under the app open ad, and that loading screen completes before the ad is dismissed. In such a case, you can dismiss your loading screen in AppOpenAd.addAdHiddenEventListener.

Example

These code examples assume that app open ads show only on “soft lauch” when your app is suspended in memory. They do not include the splash/loading screen. You must handle the splash/loading screen—see Best Practices.

import AppLovinMAX, { AppOpenAd } from 'react-native-applovin-max';
const App = () => {
const appState = useRef(AppState.currentState);
useEffect(() = {
AppLovinMAX.initialize(«SDK-key», (conf: Configuration) => {
AppOpenAd.addAdLoadedEventListener((adInfo: AdInfo) => {
console.log('AppOpen ad loaded from ' + adInfo.networkName);
});
AppOpenAd.addAdLoadFailedEventListener((errorInfo: AdLoadFailedInfo) => {
console.log('AppOpen ad failed to load with code ' + errorInfo.code);
});
AppOpenAd.addAdFailedToDisplayEventListener((adInfo: AdDisplayFailedInfo) => {
AppOpenAd.loadAd(«ad-unit-ID»);
});
AppOpenAd.addAdHiddenEventListener((adInfo: AdInfo) => {
AppOpenAd.loadAd(«ad-unit-ID»);
});
AppOpenAd.loadAd(«ad-unit-ID»);
});
AppState.addEventListener("change", nextAppState => {
if (appState.current.match(/inactive|background/) && nextAppState === "active") {
showAdIfReady();
}
appState.current = nextAppState;
});
}, []);
const showAdIfReady = async () => {
const isAppOpenAdReady = await AppOpenAd.isAdReady(«app_open_ad_unit_ID»);
if (isAppOpenAdReady) {
AppOpenAd.showAd(«ad-unit-ID»);
} else {
AppOpenAd.loadAd(«ad-unit-ID»);
}
}
}

Supported Adapter Versions

Ad NetworkMinimum Adapter Version
Google Bidding and Google AdMob22.2.0.2 (Android), 10.9.0.1 (iOS)
Liftoff Monetize6.12.0.2 (Android), 6.12.0.3 (iOS)
Mintegral7.2.3.0.1 (iOS)
Pangle4.6.0.4.0 (Android), 4.6.2.2.1 (iOS)