앱 실행 광고

앱 실행 광고는 앱의 스플래시 화면을 수익화하기 위한 특별한 광고 형식입니다. 광고는 언제든지 해제할 수 있으며, 사용자가 앱을 전면으로 가져올 때, 즉 앱을 시작할 때 또는 백그라운드에서 돌아올 때 표시되도록 설계되었습니다.

이 가이드는 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) {
        // 이제 광고를 사용할 수 있습니다
    }
    
    MobileAds.initialize(this, () -> {
        // 이제 광고를 사용할 수 있습니다
    });
    
  2. AppOpenAdLoader 광고 로더 객체를 생성 및 설정합니다.

Partner Interface(AD_UNIT_ID)의 광고 단위 ID가 필요합니다.

사용자 관심사, 컨텍스트 앱 데이터, 위치 세부 정보 또는 기타 정보를 전달함으로써 AdRequestConfiguration.Builder()를 통해 광고 요청 매개변수 세트를 확장할 수 있습니다. 요청에 추가적인 컨텍스트 데이터를 제공하면 광고 품질을 크게 향상할 수 있습니다. 광고 타겟팅 섹션에서 자세한 내용을 확인하세요.

val appOpenAdLoader: AppOpenAdLoader = AppOpenAdLoader(application)
val AD_UNIT_ID = "R-M-XXXXXX-Y" // 디버깅의 경우 "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"; // 디버깅의 경우 "demo-appopenad-yandex"를 사용할 수 있습니다
final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AD_UNIT_ID).build();
  1. 광고가 로드에 성공 또는 실패할 때의 알림을 위한 AppOpenAdLoadListener 콜백 메서드 리스너를 설정합니다.

    val appOpenAdLoadListener = object : AppOpenAdLoadListener {
       override fun onAdLoaded(appOpenAd: AppOpenAd) {
           // 광고가 성공적으로 로드되었습니다. 이제 광고를 표시할 수 있습니다.
           this@Activity.appOpenAd = appOpenAd
       }
    
       override fun onAdFailedToLoad(adRequestError: AdRequestError) {
           // AdRequestError로 광고를 로드하는 데 실패했습니다.
           // onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
       }
    }
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener)
    
    AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() {
        @Override
        public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
            // 광고가 성공적으로 로드되었습니다. 이제 광고를 표시할 수 있습니다.
            mAppOpenAd = appOpenAd;
        }
    
        @Override
        public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
            // AdRequestError로 광고를 로드하는 데 실패했습니다.
            // onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
        }
    };
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener);
    
  2. loadAd(AdRequestConfiguration) 메서드를 사용하여 광고를 로드합니다.

appOpenAdLoader.loadAd(adRequestConfiguration)
appOpenAdLoader.loadAd(adRequestConfiguration);
  1. 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);
  1. 광고를 렌더링하기 전에 AppOpenAdEventListener 광고 콜백 메서드 리스너를 설정하세요.

    private inner class AdEventListener : AppOpenAdEventListener {
        override fun onAdShown() {
            // 광고가 표시되었을 때 호출됩니다.
        }
    
        override fun onAdFailedToShow(adError: AdError) {
            // 광고를 표시하는 데 실패했을 때 호출됩니다.
        }
    
        override fun onAdDismissed() {
            // 광고가 해제되었을 때 호출됩니다.
            // 해제 후 리소스를 정리하고 새 광고를 미리 로드하세요.
            clearAppOpenAd()
            loadAppOpenAd()
        }
    
        override fun onAdClicked() {
            // 광고에 대한 클릭이 기록될 때 호출됩니다.
        }
    
        override fun onAdImpression(impressionData: ImpressionData?) {
            // 광고에 대한 노출이 기록될 때 호출됩니다.
            // 노출 수준 수익 데이터를 인수로 가져옵니다.
        }
    }
    
    private val appOpenAdEventListener = AdEventListener()
    appOpenAd?.setAdEventListener(appOpenAdEventListener)
    
    AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() {
       @Override
       public void onAdShown() {
           // 광고가 표시되었을 때 호출됩니다.
       }
    
       @Override
       public void onAdFailedToShow(@NonNull final AdError adError) {
           // 광고를 표시하는 데 실패했을 때 호출됩니다.
       }
    
       @Override
       public void onAdDismissed() {
           // 광고가 해제되었을 때 호출됩니다.
           // 해제 후 리소스를 정리하고 새 광고를 미리 로드하세요.
           clearAppOpenAd();
           loadAppOpenAd();
       }
    
       @Override
       public void onAdClicked() {
           // 광고에 대한 클릭이 기록될 때 호출됩니다.
       }
    
       @Override
       public void onAdImpression(@Nullable final ImpressionData impressionData) {
           // 광고에 대한 노출이 기록될 때 호출됩니다.
       }
    };
    
    if (mAppOpenAd != null) {
       mAppOpenAd.setAdEventListener(appOpenAdEventListener);
    }
    
  2. show 메서드를 사용하여 광고를 렌더링합니다.

private fun showAppOpenAd() {
    appOpenAd?.show(activity)
}
private void showAppOpenAd() {
    if (mAppOpenAd != null) {
       mAppOpenAd.show(activity);
    }
}
  1. 리소스를 릴리스합니다.

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

    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를 Partner Interface에서 가져온 실제 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. 각 앱은 고유하며, 유지 시간이나 앱 사용 시간을 줄이지 않으면서 수익을 극대화하는 특별한 접근법이 필요하므로 철저한 테스트를 수행해야 합니다. 사용자 행동과 참여는 시간이 지남에 따라 변할 수 있으므로 앱 실행 광고에 사용하는 전략을 주기적으로 테스트할 것을 권장합니다.

추가 리소스