AppOpen 광고

App Open Ads는 interstitial ads와 유사하지만, 사용자가 앱을 소프트 런칭(soft launch)하거나 콜드 스타트(cold start)할 때 표시됩니다.

콜드 스타트(Cold start)
기기에서 앱의 새 세션을 생성하는 것
  • 앱이 기기 메모리에 없음
  • 스플래시/로딩 화면이 필요함
소프트 런칭(Soft launch)
앱을 백그라운드에서 포그라운드로 가져오거나, 앱이 포그라운드 모일 때 휴대폰을 활성화하는 것
  • 앱이 메모리에 일시 중단되어 있음
  • 스플래시/로딩 화면이 필요함

Fire OS 애플리케이션은 지원되지 않습니다.

권장 사항

  • App Open Ad를 표시하기 전에 스플래시/로딩 화면을 표시하세요. 광고를 어떻게 배치하든 이 작업을 수행해야 합니다.
    • 스플래시/로딩 화면에서 사용자에게 광고가 표시될 것임을 알리는 문구를 포함하세요.
      • 예: “앱이 로드되는 동안 스폰서의 광고를 시청해 주세요.”
    • 광고가 표시되기 전에 사용자가 실제 앱 콘텐츠에 노출되지 않도록 하세요. 올바른 순서는 다음과 같습니다: 스플래시/로딩 화면 ⇒ App Open Ad ⇒ 앱 콘텐츠.
  • App Open Ad를 로드하기 전에 AppLovin SDK가 초기화되었는지 확인하세요.
  • App Open Ad가 아직 로드되지 않은 경우(즉, 콜드 스타트 시) 먼저 로드하세요. 다른 ad format은 나중에 로드하여 App Open Ad와 병렬로 로드되지 않도록 하세요.
    • 여러 ad format을 병렬로 로드하는 것은 기기 리소스나 광고 디맨드 SDK에 좋지 않습니다.
  • 사용자가 App Open Ads에 과도하게 노출되는 것을 방지하기 위해, AppLovin은 다음과 같은 전략을 고려할 것을 제안합니다:
    • AppLovin 외부에서 관리하는 빈도 제한(frequency cap)을 사용하세요. 이렇게 하면 광고가 게재되는 시점을 완전히 제어할 수 있습니다.
    • 앱 내 사용자 행동을 기반으로 쿨다운 기간을 구현하세요. 예를 들어, 소프트 런칭 중에 광고를 다시 표시하기 전 일정 시간 동안 광고를 표시하지 않거나, 소프트 런칭을 할 때마다 한 번씩 광고를 표시합니다.
    • 신규 사용자가 앱을 열고 몇 번 사용할 때까지 기다린 후에 첫 번째 App Open Ad를 표시하세요.

리텐션(Retention)

App Open Ad 포맷을 구현할 때는 항상 리텐션을 고려해야 합니다.

App Open Ads의 경우 다양한 구현 전략 중에서 선택할 수 있습니다.

AppLovin은 아래에 설명된 기술 중 하나 이상을 사용하여 테스트할 것을 권장합니다. 각 애플리케이션은 리텐션이나 앱 체류 시간에 영향을 주지 않으면서 수익을 극대화할 수 있는 고유한 구성을 가지고 있습니다. 사용자 행동과 인게이지먼트는 변경될 수 있으므로, AppLovin은 App Open Ads 전략을 자주 재테스트할 것을 권장합니다. App Open Ads를 테스트하는 데 사용할 수 있는 몇 가지 구현 기술은 다음과 같습니다:

  • 적절한 사용자에게 표시합니다. 이 기술의 예는 다음과 같습니다:
    • 최초 설치 후 콜드 스타트 시 광고를 표시하기까지 가변적인 일수 동안 대기합니다.
    • 지난 며칠 동안 세션이 있었던 사용자에게 표시합니다.
    • 앱에서 특정 기준에 도달한 사용자에게 표시합니다. 예를 들어 특정 레벨을 완료했거나, 앱을 특정 횟수만큼 열었거나, Rewarded 제공 사항에 참여하지 않는 사용자입니다.
  • 사용자에게 광고가 과도하게 노출되지 않도록 합니다. 이 기술의 예는 다음과 같습니다:
    • 모든 기회마다 광고를 표시하지 마세요. 대신 두 번, 세 번 또는 네 번의 광고 기회마다 한 번씩 표시하세요.
    • 사용자가 일정 시간(예: 30초, 2분, 15분) 동안 앱을 백그라운드로 전환한 경우에만 광고를 표시하세요.
    • 콜드 스타트 광고를 표시하는 경우, 일정 시간 동안 소프트 런칭 App Open Ads나 interstitial을 표시하지 마세요.
    • 빈도 제한(frequency cap)을 사용하세요. 가능한 경우 해당 제한을 사용자 코호트에 맞게 조정하세요.
  • 스플래시 화면을 사용하여 사용자에게 알립니다.

App Open Ad 사용하기

사용자가 애플리케이션을 포그라운드로 가져올 때 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();
  }
}

지원되는 어댑터 버전

Ad network최소 어댑터 버전
BIGO Ads4.5.1.0
Google Bidding and Google AdMob22.2.0.2
Liftoff Monetize6.12.0.2
Mintegral16.6.61.1
Pangle4.6.0.4.0

search