앱 오픈 광고

앱 오픈 광고는 앱 로드 화면을 수익화하기 위한 특수 광고 형식입니다. 언제든지 닫을 수 있으며, 사용자가 앱을 포그라운드로 가져올 때(실행 시 또는 백그라운드에서 복귀할 때) 게재되도록 설계되었습니다.

이 가이드는 Android 앱을 열 때 게재되는 광고를 연동하는 방법을 안내합니다. 코드 예시와 설명 외에도 형식별 권장 사항과 추가 자료 링크를 포함합니다.

Внимание

앱 오픈 광고는 세로 방향인 앱에만 배치할 수 있습니다. 가로 방향에서는 광고가 게재되지 않습니다.

레이아웃

앱 오픈 광고에는 사용자가 앱 안에 있음을 알고 광고를 닫을 수 있도록 Go to the app 버튼이 포함됩니다. 광고가 어떻게 보이는지 예시는 다음과 같습니다.

사전 요구 사항

  1. 빠른 시작에 설명된 SDK 통합 단계를 따릅니다.
  2. 미리 광고 SDK를 초기화합니다.
  3. Yandex Mobile Ads SDK의 최신 버전을 사용 중인지 확인합니다. 미디에이션을 사용하는 경우 통합 빌드도 최신 버전인지 확인합니다.

용어 정의

  • 콜드 스타트: RAM에 없는 앱을 시작해 새 세션을 만드는 경우입니다.
  • 핫 스타트: RAM에 일시 정지된 상태로 있는 앱을 백그라운드에서 포그라운드로 전환하는 경우입니다.

구현

  1. 앱 시작 시 SDK를 초기화합니다.
  2. AppOpenAdLoader 광고 로더 객체를 만들고 설정합니다.
  3. 광고 로드 성공·실패 알림을 위해 AppOpenAdLoadListener 콜백 메서드 리스너를 설정합니다.
  4. loadAd(AdRequestConfiguration) 메서드로 광고를 로드합니다.
  5. 앱 상태 변화를 처리하고 앱 오픈 광고를 표시하려면 LifecycleEventObserver를 사용합니다.
  6. 광고를 표시하기 전에 AppOpenAdEventListener 광고 콜백 메서드 리스너를 설정합니다.
  7. show(Activity) 메서드로 광고를 표시합니다.
  8. 리소스를 해제합니다.

주요 단계

  1. 앱 시작 시 SDK를 초기화합니다.

    MobileAds.initialize(this) {
        // Now you can use ads
    }
    
    MobileAds.initialize(this, () -> {
        // Now you can use ads
    });
    
  2. AppOpenAdLoader 광고 로더 객체를 만들고 설정합니다.

    Yandex Advertising Network 인터페이스에서 받은 광고 단위 ID(AD_UNIT_ID)가 필요합니다.

    AdRequestConfiguration.Builder()로 사용자 관심사, 앱 컨텍스트, 위치 등의 데이터를 넣어 광고 요청 매개변수를 확장할 수 있습니다. 요청에 추가 컨텍스트를 담으면 광고 품질이 크게 향상될 수 있습니다. 자세한 내용은 광고 타기팅을 참고하세요.

    val appOpenAdLoader: AppOpenAdLoader = AppOpenAdLoader(application)
    val AD_UNIT_ID = "R-M-XXXXXX-Y" // for debugging, you can use "demo-appopenad-yandex"
    val adRequestConfiguration = AdRequestConfiguration.Builder(AD_UNIT_ID).build()
    
    final AppOpenAdLoader appOpenAdLoader = AppOpenAdLoader(application);
    final String AD_UNIT_ID = "R-M-XXXXXX-Y"; // for debugging, you can use "demo-appopenad-yandex"
    final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AD_UNIT_ID).build();
    
  3. 광고 로드 성공·실패 알림을 위해 AppOpenAdLoadListener 콜백 메서드 리스너를 설정합니다.

    val appOpenAdLoadListener = object : AppOpenAdLoadListener {
       override fun onAdLoaded(appOpenAd: AppOpenAd) {
           // The ad was loaded successfully. You can now show the ad.
           this@Activity.appOpenAd = appOpenAd
       }
    
       override fun onAdFailedToLoad(adRequestError: AdRequestError) {
           // Ad failed to load with AdRequestError.
           // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
       }
    }
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener)
    
    AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() {
        @Override
        public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
            // The ad was loaded successfully. You can now show the ad.
            mAppOpenAd = appOpenAd;
        }
    
        @Override
        public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
            // Ad failed to load with AdRequestError.
            // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
        }
    };
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener);
    
  4. loadAd(AdRequestConfiguration) 메서드로 광고를 로드합니다.

    appOpenAdLoader.loadAd(adRequestConfiguration)
    
    appOpenAdLoader.loadAd(adRequestConfiguration);
    
  5. LifecycleEventObserver로 앱 상태 변화를 처리하고 앱 오픈 광고를 표시합니다.

    val processLifecycleObserver = DefaultProcessLifecycleObserver(
        onProcessCameForeground = ::showAppOpenAd
    )
    ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleObserver)
    
    final DefaultProcessLifecycleObserver processLifecycleObserver = new DefaultProcessLifecycleObserver() {
        @Override
        public void onProcessCameForeground() {
            showAppOpenAd();
        }
    }
    
    ProcessLifecycleOwner.get().getLifecycle().addObserver(processLifecycleObserver);
    
  6. 광고를 표시하기 전에 AppOpenAdEventListener 광고 콜백 메서드 리스너를 설정합니다.

    private inner class AdEventListener : AppOpenAdEventListener {
        override fun onAdShown() {
            // Called when ad is shown.
        }
    
        override fun onAdFailedToShow(adError: AdError) {
            // Called when ad failed to show.
        }
    
        override fun onAdDismissed() {
            // Called when ad is dismissed.
            // Clean resources after dismiss and preload new ad.
            clearAppOpenAd()
            loadAppOpenAd()
        }
    
        override fun onAdClicked() {
            // Called when a click is recorded for an ad.
        }
    
        override fun onAdImpression(impressionData: ImpressionData?) {
            // Called when an impression is recorded for an ad.
            // Get Impression Level Revenue Data in argument.
        }
    }
    
    private val appOpenAdEventListener = AdEventListener()
    appOpenAd?.setAdEventListener(appOpenAdEventListener)
    
    AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() {
       @Override
       public void onAdShown() {
           // Called when ad is shown.
       }
    
       @Override
       public void onAdFailedToShow(@NonNull final AdError adError) {
           // Called when ad failed to show.
       }
    
       @Override
       public void onAdDismissed() {
           // Called when ad is dismissed.
           // Clean resources after dismiss and preload new ad.
           clearAppOpenAd();
           loadAppOpenAd();
       }
    
       @Override
       public void onAdClicked() {
           // Called when a click is recorded for an ad.
       }
    
       @Override
       public void onAdImpression(@Nullable final ImpressionData impressionData) {
           // Called when an impression is recorded for an ad.
       }
    };
    
    if (mAppOpenAd != null) {
       mAppOpenAd.setAdEventListener(appOpenAdEventListener);
    }
    
  7. show 메서드로 광고를 표시합니다.

    private fun showAppOpenAd() {
        appOpenAd?.show(activity)
    }
    
    private void showAppOpenAd() {
        if (mAppOpenAd != null) {
           mAppOpenAd.show(activity);
        }
    }
    

    Примечание

    이미 광고가 게재된 상태에서 show(Activity)를 호출하면 AppOpenAdEventListener.onAdFailedToShow(AdError)에 표시 오류가 반환됩니다.

  8. 리소스를 해제합니다.

    메모리 누수를 방지합니다.

    private fun clearAppOpenAd() {
        appOpenAd?.setAdEventListener(null)
        appOpenAd = null
    }
    
    private void clearAppOpenAd() {
        if (mAppOpenAd != null) {
            mAppOpenAd.setAdEventListener(null);
            mAppOpenAd = null;
        }
    }
    

앱 오픈 광고 연동의 특징

  1. Yandex Mobile Ads SDK 메서드 호출은 모두 메인 스레드에서 수행해야 합니다.
  2. 로드에는 시간이 걸릴 수 있으므로, 광고가 아직 로드되지 않았다면 콜드 스타트 시간을 늘리지 마세요.
  3. 핫 스타트 시 이후 표시를 위해 광고를 미리 로드하세요.
  4. 앱 실행 직후에는 운영 데이터를 받는 중일 수 있으므로 앱 오픈 광고와 다른 광고 형식을 동시에 로드하지 않는 것을 권장합니다. 기기와 네트워크에 부하가 걸려 광고 로드가 더 길어질 수 있습니다.
  5. onAdFailedToLoad() 콜백에서 오류가 발생하면 바로 새 광고를 다시 로드하지 마세요. 부득이하면 재로드 시도 횟수를 제한하세요. 제한이 걸린 환경에서 반복적인 실패 요청과 연결 문제를 줄이는 데 도움이 됩니다.

실행 시 광고 연동 테스트

광고 테스트를 위한 데모 광고 유닛 사용

앱 오픈 광고 통합과 앱 자체를 테스트하려면 테스트 광고 사용을 권장합니다.

모든 광고 요청에 테스트 광고가 반환되도록 특별한 데모 광고 게재 ID를 만들었습니다. 광고 통합 확인에 사용하세요.

데모 adUnitId: demo-appopenad-yandex.

Важно

스토어에 앱을 게시하기 전에 데모 광고 게재 ID를 Yandex Advertising Network 인터페이스에서 받은 실제 ID로 반드시 바꾸세요.

사용 가능한 데모 광고 게재 ID 목록은 테스트용 데모 광고 유닛 섹션에서 확인할 수 있습니다.

광고 통합 테스트

SDK에 내장된 분석기로 앱 오픈 광고 통합을 확인할 수 있습니다.

이 도구는 앱 오픈 광고가 올바르게 통합되었는지 검사하고 로그에 자세한 보고서를 출력합니다. 보고서를 보려면 Android 앱 디버깅용 Logcat 도구에서 키워드 YandexAds로 검색하세요.

adb logcat -v brief '*:S YandexAds'

통합이 성공하면 다음 메시지가 표시됩니다.

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type App Open Ad was integrated successfully

광고 통합에 문제가 있으면 문제점과 수정 권장 사항이 담긴 자세한 보고서를 받을 수 있습니다.

권장 사항

  1. 스플래시 화면 전에 앱 오픈 광고를 표시하지 마세요.

    스플래시를 보여 주면 앱 경험이 매끄럽고 쾌적해집니다. 사용자가 놀라거나 혼란스러워하지 않고 올바른 앱을 열었다고 느끼게 할 수 있습니다. 같은 화면에서 곧 광고가 나온다고 안내할 수 있습니다. 로딩 인디케이터나, 광고 후에 앱 콘텐츠로 돌아간다는 짧은 문구만 써도 됩니다.

  2. 요청과 표시 사이에 지연이 있으면 사용자가 잠깐 앱을 연 뒤 콘텐츠와 무관한 광고를 예기치 않게 볼 수 있습니다. 경험에 악영향을 줄 수 있으므로 피하는 것이 좋습니다. 한 가지 방법은 메인 콘텐츠 전에 스플래시를 쓰고 이 화면에서 광고 표시를 시작하는 것입니다. 스플래시 뒤에 바로 어떤 콘텐츠를 연다면 광고를 표시하지 않는 편이 낫습니다.

  3. 신규 사용자는 앱을 몇 번 열고 사용한 뒤에 앱 오픈 광고를 표시하세요. 앱에서 일정 조건을 충족한 사용자에게만 표시하세요(예: 특정 레벨 통과, 앱 실행 횟수, 리워드 오퍼 미참여 등). 설치 직후에는 광고를 표시하지 마세요.

  4. 사용자 행동에 맞춰 광고 표시 빈도를 조절하세요. 콜드·핫 스타트마다 표시하지 마세요.

  5. 앱이 백그라운드에 일정 시간(예: 30초, 2분, 15분) 있었을 때만 광고를 표시하세요.

  6. 앱마다 특성이 다르므로 이탈이나 체류 시간을 해치지 않으면서 수익을 높이려면 충분한 테스트를 수행하세요. 사용자 행동과 참여는 시간에 따라 달라질 수 있으므로 앱 오픈 광고 전략을 주기적으로 점검하는 것을 권장합니다.

추가 자료