앱 실행 광고
앱 실행 광고는 앱의 스플래시 화면을 수익화하기 위한 특별한 광고 형식입니다. 광고는 언제든지 해제할 수 있으며, 사용자가 앱을 전면으로 가져올 때, 즉 앱을 시작할 때 또는 백그라운드에서 돌아올 때 표시되도록 설계되었습니다.
이 가이드는 Android 앱을 실행할 때 제공되는 광고를 통합하는 방법을 보여줍니다. 코드 예시와 지침 외에도 형식별 권장 사항 및 추가 리소스에 대한 링크가 포함되어 있습니다.
Внимание
앱 실행 광고는 세로 방향의 애플리케이션에만 배치할 수 있습니다. 가로 방향에서는 광고가 선택되지 않습니다.
레이아웃
앱 실행 광고에는 Go to the app 버튼이 포함되어 있어 사용자가 자신이 앱에 있다는 것을 인지하고 광고를 종료할 수 있습니다. 다음은 광고가 어떻게 표시되는지에 대한 예시입니다.
사전 준비
- 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
- 광고 SDK를 미리 초기화하세요.
- 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.
용어 및 정의
- 콜드 스타트는 RAM에 없는 앱을 시작하여 새로운 앱 세션을 만드는 것입니다.
- 핫 스타트는 RAM에서 앱이 일시 중지되었을 때 백그라운드 모드에서 포그라운드 모드로 전환하는 것입니다.
실행
- 앱 시작 시 SDK를 초기화합니다.
AppOpenAdLoader
광고 로더 객체를 생성 및 설정합니다.- 광고가 로드에 성공 또는 실패할 때의 알림을 위한
AppOpenAdLoadListener
콜백 메서드 리스너를 설정합니다. loadAd(AdRequestConfiguration)
메서드를 사용하여 광고를 로드합니다.- LifecycleEventObserver를 사용하여 앱 상태 변경을 처리하고 앱 실행 광고를 표시합니다.
- 광고를 렌더링하기 전에
AppOpenAdEventListener
광고 콜백 메서드 리스너를 설정하세요. show(Activity)
메서드를 사용하여 광고를 렌더링합니다.- 리소스를 릴리스합니다.
주요 단계
-
앱 시작 시 SDK를 초기화합니다.
KotlinJavaMobileAds.initialize(this) { // 이제 광고를 사용할 수 있습니다 }
MobileAds.initialize(this, () -> { // 이제 광고를 사용할 수 있습니다 });
-
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();
-
광고가 로드에 성공 또는 실패할 때의 알림을 위한
AppOpenAdLoadListener
콜백 메서드 리스너를 설정합니다.KotlinJavaval 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);
-
loadAd(AdRequestConfiguration)
메서드를 사용하여 광고를 로드합니다.
appOpenAdLoader.loadAd(adRequestConfiguration)
appOpenAdLoader.loadAd(adRequestConfiguration);
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);
-
광고를 렌더링하기 전에
AppOpenAdEventListener
광고 콜백 메서드 리스너를 설정하세요.KotlinJavaprivate 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); }
-
show
메서드를 사용하여 광고를 렌더링합니다.
private fun showAppOpenAd() {
appOpenAd?.show(activity)
}
private void showAppOpenAd() {
if (mAppOpenAd != null) {
mAppOpenAd.show(activity);
}
}
-
리소스를 릴리스합니다.
이는 메모리 누수를 방지합니다.
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를 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
광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.
권장 사항
-
시작 화면 전에 앱 실행 광고를 렌더링하지 마세요.
시작 화면을 표시함으로써 사용자의 앱 경험을 향상시켜 더 매끄럽고 즐거운 경험을 제공합니다. 그러면 사용자가 놀라거나 혼란스러워하지 않고 원하는 앱을 열었다는 확신을 얻을 수 있습니다. 같은 화면에서 예정된 광고에 대해 사용자에게 알릴 수 있습니다. 로딩 표시기를 사용하거나 광고 후에 앱 콘텐츠를 다시 볼 수 있다는 텍스트 메시지를 사용하면 됩니다.
-
광고 요청과 렌더링 사이에 지연이 있으면 사용자가 앱을 잠시 실행했다가 예상치 못하게 콘텐츠와 관련 없는 광고를 볼 수 있습니다. 그러면 사용자 경험에 부정적인 영향을 미칠 수 있으므로 이러한 상황은 방지해야 합니다. 한 가지 해결책은 메인 앱 콘텐츠를 표시하기 전에 시작 화면을 사용하고 이 화면에서 광고 렌더링을 시작하는 것입니다. 시작 화면 후에 앱이 일부 콘텐츠를 열면 광고를 렌더링하지 않는 것이 좋습니다.
-
새로운 사용자가 앱을 실행하여 몇 차례 사용할 때까지 기다린 후에 앱 실행 광고를 렌더링하세요. 앱에서 특정 기준을 충족한 사용자에게만 광고를 렌더링하세요(예: 특정 레벨을 통과했거나, 앱을 특정 횟수만큼 실행했거나, 보상 제공에 참여하지 않는 경우 등). 앱 설치 직후에 광고를 렌더링하지 마세요.
-
앱 사용자 행동에 따라 광고 렌더링 빈도를 조절하세요. 앱을 콜드/핫 스타트할 때마다 광고를 렌더링하지 마세요.
-
앱이 일정 시간 동안 백그라운드에 있었을 때만 광고를 렌더링하세요(예: 30초, 2분, 15분).
-
각 앱은 고유하며, 유지 시간이나 앱 사용 시간을 줄이지 않으면서 수익을 극대화하는 특별한 접근법이 필요하므로 철저한 테스트를 수행해야 합니다. 사용자 행동과 참여는 시간이 지남에 따라 변할 수 있으므로 앱 실행 광고에 사용하는 전략을 주기적으로 테스트할 것을 권장합니다.
추가 리소스
-
GitHub 링크.