앱 오픈 광고
앱 실행 광고는 앱 로드 화면을 수익화하기 위한 특별한 광고 형식입니다. 이러한 광고는 언제든지 종료할 수 있으며, 사용자가 앱을 전면으로 가져올 때, 즉 앱을 시작할 때 또는 백그라운드에서 돌아올 때 제공되도록 설계되었습니다.
이 가이드는 Android 앱을 열 때 게재되는 광고를 연동하는 방법을 안내합니다. 코드 예시와 설명 외에도 형식별 권장 사항과 추가 자료 링크를 포함합니다.
Внимание
앱 실행 광고는 세로 방향의 앱에만 배치할 수 있습니다. 가로 방향에서는 광고가 제공되지 않습니다.
레이아웃
앱 오픈 광고에는 사용자가 앱 안에 있음을 알고 광고를 닫을 수 있도록 Go to the app 버튼이 포함됩니다. 광고가 어떻게 보이는지 예시는 다음과 같습니다.
사전 요구 사항
- 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
- 광고 SDK를 미리 초기화하세요.
- 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 미디에이션을 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.
용어 정의
- 콜드 스타트: RAM에 없는 앱을 시작해 새 세션을 만드는 경우입니다.
- 핫 스타트: RAM에 일시 정지된 상태로 있는 앱을 백그라운드에서 포그라운드로 전환하는 경우입니다.
구현
- 앱 시작 시 SDK를 초기화합니다.
AppOpenAdLoader광고 로더 객체를 만들고 설정합니다.- 광고 로드 성공·실패 알림을 위해
AppOpenAdLoadListener콜백 메서드 리스너를 설정합니다. loadAd(AdRequestConfiguration)메서드로 광고를 로드합니다.- 앱 상태 변화를 처리하고 앱 오픈 광고를 표시하려면 LifecycleEventObserver를 사용합니다.
- 광고를 표시하기 전에
AppOpenAdEventListener광고 콜백 메서드 리스너를 설정합니다. show(Activity)메서드로 광고를 표시합니다.- 리소스를 해제합니다.
주요 단계
-
앱 시작 시 SDK를 초기화합니다.
KotlinJavaYandexAds.initialize(this) { // Now you can use ads }YandexAds.initialize(this, () -> { // Now you can use ads }); -
AppOpenAdLoader광고 로더 객체를 만들고 설정합니다.Yandex Advertising Network 인터페이스에서 받은 광고 단위 ID(
AD_UNIT_ID)가 필요합니다.AdRequestConfiguration.Builder()로 사용자 관심사, 앱 컨텍스트, 위치 등의 데이터를 넣어 광고 요청 매개변수를 확장할 수 있습니다. 요청에 추가 컨텍스트를 담으면 광고 품질이 크게 향상될 수 있습니다. 자세한 내용은 광고 타기팅을 참고하세요.KotlinJavaval 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(); -
광고 로드 성공·실패 알림을 위해
AppOpenAdLoadListener콜백 메서드 리스너를 설정합니다.KotlinJavaval 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); -
loadAd(AdRequestConfiguration)메서드로 광고를 로드합니다.KotlinJavaappOpenAdLoader.loadAd(adRequestConfiguration)appOpenAdLoader.loadAd(adRequestConfiguration); -
LifecycleEventObserver로 앱 상태 변화를 처리하고 앱 오픈 광고를 표시합니다.KotlinJavaval processLifecycleObserver = DefaultProcessLifecycleObserver( onProcessCameForeground = ::showAppOpenAd ) ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleObserver)final DefaultProcessLifecycleObserver processLifecycleObserver = new DefaultProcessLifecycleObserver() { @Override public void onProcessCameForeground() { showAppOpenAd(); } } ProcessLifecycleOwner.get().getLifecycle().addObserver(processLifecycleObserver); -
광고를 표시하기 전에
AppOpenAdEventListener광고 콜백 메서드 리스너를 설정합니다.KotlinJavaprivate 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); } -
show메서드로 광고를 표시합니다.KotlinJavaprivate fun showAppOpenAd() { appOpenAd?.show(activity) }private void showAppOpenAd() { if (mAppOpenAd != null) { mAppOpenAd.show(activity); } }Примечание
광고가 이미 제공된 경우,
show(Activity)메서드를 호출하면AppOpenAdEventListener.onAdFailedToShow(AdError)에서 표시 오류가 반환됩니다. -
리소스를 해제합니다.
메모리 누수를 방지합니다.
KotlinJavaprivate fun clearAppOpenAd() { appOpenAd?.setAdEventListener(null) appOpenAd = null }private void clearAppOpenAd() { if (mAppOpenAd != null) { mAppOpenAd.setAdEventListener(null); mAppOpenAd = null; } }
앱 오픈 광고 연동의 특징
- Yandex Mobile Ads SDK 메서드 호출은 모두 메인 스레드에서 수행해야 합니다.
- 로드에는 시간이 걸릴 수 있으므로, 광고가 아직 로드되지 않았다면 콜드 스타트 시간을 늘리지 마세요.
- 핫 스타트 시 이후 표시를 위해 광고를 미리 로드하세요.
- 앱 실행 직후에는 운영 데이터를 받는 중일 수 있으므로 앱 오픈 광고와 다른 광고 형식을 동시에 로드하지 않는 것을 권장합니다. 기기와 네트워크에 부하가 걸려 광고 로드가 더 길어질 수 있습니다.
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
광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.
권장 사항
-
스플래시 화면 전에 앱 오픈 광고를 표시하지 마세요.
스플래시를 보여 주면 앱 경험이 매끄럽고 쾌적해집니다. 사용자가 놀라거나 혼란스러워하지 않고 올바른 앱을 열었다고 느끼게 할 수 있습니다. 같은 화면에서 곧 광고가 나온다고 안내할 수 있습니다. 로딩 인디케이터나, 광고 후에 앱 콘텐츠로 돌아간다는 짧은 문구만 써도 됩니다.
-
요청과 표시 사이에 지연이 있으면 사용자가 잠깐 앱을 연 뒤 콘텐츠와 무관한 광고를 예기치 않게 볼 수 있습니다. 경험에 악영향을 줄 수 있으므로 피하는 것이 좋습니다. 한 가지 방법은 메인 콘텐츠 전에 스플래시를 쓰고 이 화면에서 광고 표시를 시작하는 것입니다. 스플래시 뒤에 바로 어떤 콘텐츠를 연다면 광고를 표시하지 않는 편이 낫습니다.
-
신규 사용자는 앱을 몇 번 열고 사용한 뒤에 앱 오픈 광고를 표시하세요. 앱에서 일정 조건을 충족한 사용자에게만 표시하세요(예: 특정 레벨 통과, 앱 실행 횟수, 리워드 오퍼 미참여 등). 설치 직후에는 광고를 표시하지 마세요.
-
사용자 행동에 맞춰 광고 표시 빈도를 조절하세요. 콜드·핫 스타트마다 표시하지 마세요.
-
앱이 백그라운드에 일정 시간(예: 30초, 2분, 15분) 있었을 때만 광고를 표시하세요.
-
앱마다 특성이 다르므로 이탈이나 체류 시간을 해치지 않으면서 수익을 높이려면 충분한 테스트를 수행하세요. 사용자 행동과 참여는 시간에 따라 달라질 수 있으므로 앱 오픈 광고 전략을 주기적으로 점검하는 것을 권장합니다.
추가 자료
-
GitHub 링크.