App Open Ads는 interstitial ads와 유사하지만, 사용자가 앱을 소프트 런칭(soft launch)하거나 콜드 스타트(cold start)할 때 표시됩니다.
Fire OS 애플리케이션은 지원되지 않습니다.
App Open Ad 포맷을 구현할 때는 항상 리텐션을 고려해야 합니다.
App Open Ads의 경우 다양한 구현 전략 중에서 선택할 수 있습니다.
AppLovin은 아래에 설명된 기술 중 하나 이상을 사용하여 테스트할 것을 권장합니다. 각 애플리케이션은 리텐션이나 앱 체류 시간에 영향을 주지 않으면서 수익을 극대화할 수 있는 고유한 구성을 가지고 있습니다. 사용자 행동과 인게이지먼트는 변경될 수 있으므로, AppLovin은 App Open Ads 전략을 자주 재테스트할 것을 권장합니다. App Open Ads를 테스트하는 데 사용할 수 있는 몇 가지 구현 기술은 다음과 같습니다:
사용자가 애플리케이션을 포그라운드로 가져올 때 App Open Ad가 준비되도록 하려면 MaxAppOpenAd를 미리 로드(preload)해야 합니다.
유틸리티 클래스를 생성하고 이를 Application 클래스에서 인스턴스화하세요.
그러면 해당 클래스는 광고를 표시해야 하기 전에 광고 요청을 보낼 수 있습니다.
광고가 준비되면 광고를 표시하는 메서드를 만드세요.
이 메서드를 Lifecycle.Event.ON_START 수명 주기 이벤트 내에서 호출하세요.
그러면 앱은 앱이 열릴 때 광고 표시를 시도하거나, 미리 로드된 광고가 없는 경우 광고를 로드합니다.
앱 포그라운드 이벤트를 알림 받으려면 LifecycleObserver를 등록하세요.
애플리케이션 수준의 build.gradle 파일에 수명 주기 라이브러리를 추가해야 할 수 있습니다:
implementation("androidx.lifecycle:lifecycle-process:2.2.0")
광고를 요청하는 시점과 표시할 광고를 수신하는 시점 사이에는 지연이 존재합니다. 앱을 제대로 설계하지 않으면 사용자가 잠시 앱을 보았다가 맥락에 맞지 않는 광고가 갑자기 나타나 당황할 수 있습니다. 이러한 나쁜 사용자 경험을 방지하세요. 앱 콘텐츠가 표시되기 전에 로딩 화면을 보여주고, 로딩 화면이 끝난 후에 광고를 보여주는 방식으로 콜드 스타트를 처리할 수 있습니다. 로딩 화면 이후에 앱 콘텐츠가 이미 표시되고 있다면 광고를 보여주지 마세요.
App Open Ad 아래에 로딩 화면이 있을 수 있으며, 사용자가 광고를 닫기 전에 해당 로딩 화면이 완료될 수 있습니다.
이 경우 onAdHidden() 메서드에서 로딩 화면을 닫을 수 있습니다.
이 코드 예제는 앱이 메모리에 일시 중단되어 있는 "소프트 런칭" 시에만 App Open Ads가 표시된다고 가정합니다. 스플래시/로딩 화면은 포함되어 있지 않습니다. 앱 개발자는 스플래시/로딩 화면을 직접 처리해야 합니다. 권장 사항을 참조하세요.
public class MyApplication extends Application
{
private final ExampleAppOpenManager appOpenManager;
@Override
public void onCreate()
{
super.onCreate();
AppLovinSdk.initializeSdk( this, new AppLovinSdk.SdkInitializationListener()
{
@Override
public void onSdkInitialized(final AppLovinSdkConfiguration configuration)
{
appOpenManager = new ExampleAppOpenManager( MyApplication.this );
}
} );
}
}
public class ExampleAppOpenManager
implements DefaultLifecycleObserver, MaxAdListener
{
private final MaxAppOpenAd appOpenAd;
private final Context context;
public ExampleAppOpenManager(final Context context)
{
ProcessLifecycleOwner.get().getLifecycle().addObserver( this );
this.context = context;
appOpenAd = new MaxAppOpenAd( "«ad-unit-ID»", this );
appOpenAd.setListener( this );
appOpenAd.loadAd();
}
private void showAdIfReady()
{
if ( appOpenAd == null || !AppLovinSdk.getInstance( context ).isInitialized() ) return;
if ( appOpenAd.isReady() )
{
appOpenAd.showAd( "«test-placement»" );
}
else
{
appOpenAd.loadAd();
}
}
@Override
public void onStart(@NonNull LifecycleOwner owner)
{
showAdIfReady();
}
@Override
public void onAdLoaded(final MaxAd ad) {}
@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error) {}
@Override
public void onAdDisplayed(final MaxAd ad) {}
@Override
public void onAdClicked(final MaxAd ad) {}
@Override
public void onAdHidden(final MaxAd ad)
{
appOpenAd.loadAd();
}
@Override
public void onAdDisplayFailed(final MaxAd ad, final MaxError error)
{
appOpenAd.loadAd();
}
}
class MyApplication : Application()
{
private lateinit var appOpenManager: ExampleAppOpenManager
override fun onCreate()
{
super.onCreate()
AppLovinSdk.getInstance( this ).initializeSdk({ configuration: AppLovinSdkConfiguration ->
appOpenManager = ExampleAppOpenManager(applicationContext)
})
}
}
class ExampleAppOpenManager(applicationContext: Context?) : DefaultLifecycleObserver, MaxAdListener
{
private lateinit var appOpenAd: MaxAppOpenAd
private lateinit var context: Context
init
{
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
context = applicationContext
appOpenAd = MaxAppOpenAd("«ad-unit-ID»", this)
appOpenAd.setListener(this)
appOpenAd.loadAd()
}
private fun showAdIfReady()
{
if (appOpenAd == null || !AppLovinSdk.getInstance(context).isInitialized) return
if (appOpenAd.isReady)
{
appOpenAd.showAd("«test-placement»")
}
else
{
appOpenAd.loadAd()
}
}
override fun onStart(owner: LifecycleOwner)
{
showAdIfReady()
}
override fun onAdLoaded(ad: MaxAd) {}
override fun onAdLoadFailed(adUnitId: String, error: MaxError) {}
override fun onAdDisplayed(ad: MaxAd) {}
override fun onAdClicked(ad: MaxAd) {}
override fun onAdHidden(ad: MaxAd)
{
appOpenAd.loadAd()
}
override fun onAdDisplayFailed(ad: MaxAd, error: MaxError)
{
appOpenAd.loadAd()
}
}
| Ad network | 최소 어댑터 버전 |
|---|---|
| BIGO Ads | 4.5.1.0 |
| Google Bidding and Google AdMob | 22.2.0.2 |
| Liftoff Monetize | 6.12.0.2 |
| Mintegral | 16.6.61.1 |
| Pangle | 4.6.0.4.0 |