앱 실행 광고
앱 실행 광고는 앱의 스플래시 화면을 수익화하기 위한 특별한 광고 형식입니다. 광고는 언제든지 해제할 수 있으며, 사용자가 앱을 전면으로 가져올 때, 즉 앱을 시작할 때 또는 백그라운드에서 돌아올 때 표시되도록 설계되었습니다.
이 가이드는 Unity 앱에 앱 실행 광고를 통합하는 방법을 보여줍니다. 코드 예시와 지침 외에도 형식별 권장 사항 및 추가 리소스에 대한 링크가 포함되어 있습니다.
Внимание
앱 실행 광고는 세로 방향의 애플리케이션에만 배치할 수 있습니다. 가로 방향에서는 광고가 선택되지 않습니다.
레이아웃
앱 실행 광고에는 Go to the app 버튼이 포함되어 있어 사용자가 자신이 앱에 있다는 것을 인지하고 광고를 종료할 수 있습니다. 다음은 광고가 어떻게 표시되는지에 대한 예시입니다.
사전 준비
- Yandex Mobile Ads Unity Plugin을 통합하려면 빠른 시작의 프로세스를 수행하세요.
- 최신 Yandex Mobile Ads Unity Plugin 버전을 실행하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.
용어 및 정의
- 콜드 스타트는 RAM에 없는 앱을 시작하여 새로운 앱 세션을 만드는 것입니다.
- 핫 스타트는 RAM에서 앱이 일시 중지되었을 때 백그라운드 모드에서 포그라운드 모드로 전환하는 것입니다.
실행
AppOpenAdLoader
광고 로더를 생성하고 광고 로딩 이벤트에 대한 리스너를 등록합니다.- 광고 로드 매개변수를
AdRequestConfiguration
에 설정합니다. AppOpenAdLoader.LoadAd(AdRequestConfiguration)
메서드로 광고를 로드합니다.- 사용자가 광고와 상호 작용하는 이벤트에 대한 리스너를 등록합니다.
AppStateObserver
를 사용하여 앱 상태 변경을 처리하고 앱 실행 광고를 표시합니다.- 메서드
AppOpenAd.Show()
를 호출하여 광고를 표시합니다. - 리소스를 릴리스합니다.
주요 단계
AppOpenAdLoader
광고 로더를 생성하고 광고 로딩 이벤트에 대한 리스너를 등록합니다.
using UnityEngine;
using YandexMobileAds;
using YandexMobileAds.Base;
public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
{
private AppOpenAdLoader appOpenAdLoader;
private AppOpenAd appOpenAd;
private void SetupLoader()
{
appOpenAdLoader = new AppOpenAdLoader();
appOpenAdLoader.OnAdLoaded += HandleAdLoaded;
appOpenAdLoader.OnAdFailedToLoad += HandleAdFailedToLoad;
// ...
}
public void HandleAdLoaded(object sender, AppOpenAdLoadedEventArgs args)
{
// 광고가 성공적으로 로드되었습니다. 이제 처리할 수 있습니다.
appOpenAd = args.AppOpenAd;
}
public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
// 광고 {args.AdUnitId}(이)가 {args.Message}와(과) 함께 로드에 실패함
// OnAdFailedToLoad 이벤트에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
}
-
광고 로드 매개변수를
AdRequestConfiguration
에 설정합니다.string adUnitId = "demo-appopenad-yandex"; // "R-M-XXXXXX-Y"로 교체 AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(adUnitId).Build();
AdUnitId
: 파트너 인터페이스에서 발급된 고유 식별자로, 다음과 같이 표시됩니다. R-M-XXXXXX-Y.Совет
테스트 목적으로 데모 광고 단위 ID "demo-appopenad-yandex"를 사용할 수 있습니다. 광고를 게시하기 전에 데모 단위 ID를 실제 광고 단위 ID로 교체하십시오.
사용자 관심사, 컨텍스트 앱 데이터, 위치 세부 정보 또는 기타 정보를 전달함으로써
AdRequestConfiguration.Builder
를 통해 광고 요청 매개변수 세트를 확장할 수 있습니다. 요청에 추가적인 컨텍스트 데이터를 제공하면 광고 품질을 크게 향상할 수 있습니다. -
LoadAd
메서드로 광고를 로드하고,AdRequestConfiguration
를 인수로 전달합니다.
appOpenAdLoader.LoadAd(adRequestConfiguration);
-
사용자가 광고와 상호 작용하는 이벤트에 대한 리스너를 등록합니다.
using System; // ... appOpenAd.OnAdClicked += HandleAdClicked; appOpenAd.OnAdShown += HandleAdShown; appOpenAd.OnAdFailedToShow += HandleAdFailedToShow; appOpenAd.OnAdDismissed += HandleAdDismissed; appOpenAd.OnAdImpression += HandleImpression; // ... public void HandleAdClicked(object sender, EventArgs args) { // 광고에 대한 클릭이 기록될 때 호출됩니다. } public void HandleAdShown(object sender, EventArgs args) { // 광고가 표시되었을 때 호출됩니다. } public void HandleAdFailedToShow(object sender, AdFailureEventArgs args) { // 광고를 표시하는 데 실패했을 때 호출됩니다. } public void HandleAdDismissed(object sender, EventArgs args) { // 광고가 해제되었을 때 호출됩니다. } public void HandleImpression(object sender, ImpressionData impressionData) { // 광고에 대한 노출이 기록될 때 호출됩니다. }
-
AppStateObserver
를 사용하여 앱 상태 변경을 처리하고 앱 실행 광고를 표시합니다.
using YandexMobileAds;
public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
{
public void Awake()
{
// AppStateObserver를 사용하여 애플리케이션 열기/종료 이벤트를 수신합니다.
AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
}
public void OnDestroy()
{
// 이벤트 구독을 취소하여 메모리 누수를 방지하세요.
AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
}
}
-
메서드
AppOpenAd.Show()
를 호출하여 광고를 표시합니다.private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args) { if (!args.IsInBackground) { ShowAppOpenAd(); } } private void ShowAppOpenAd() { if (appOpenAd != null) { appOpenAd.Show(); } }
-
표시된 광고에 대해
Destroy()
를 호출하고 현재 화면에서 더 이상 사용되지 않는 링크를 삭제합니다.이는 리소스를 릴리스하고 메모리 누수를 방지합니다.
public void DestroyAppOpenAd() { if (appOpenAd != null) { appOpenAd.Destroy(); appOpenAd = null; } }
전체 코드 예시
using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;
public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
{
private AppOpenAdLoader appOpenAdLoader;
private AppOpenAd appOpenAd;
private var isColdStartAdShown = false;
private void Awake()
{
DontDestroyOnLoad(gameObject);
SetupLoader();
AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
RequestAppOpenAd();
}
private void OnDestroy()
{
AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
}
private void SetupLoader()
{
appOpenAdLoader = new AppOpenAdLoader();
appOpenAdLoader.OnAdLoaded += HandleAdLoaded;
appOpenAdLoader.OnAdFailedToLoad += HandleAdFailedToLoad;
}
private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args)
{
if (!args.IsInBackground)
{
ShowAppOpenAd();
}
}
private void ShowAppOpenAd()
{
if (appOpenAd != null)
{
appOpenAd.Show();
}
}
private void RequestAppOpenAd()
{
string adUnitId = "demo-appopenad-yandex"; // "R-M-XXXXXX-Y"로 교체
AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(adUnitId).Build();
appOpenAdLoader.LoadAd(adRequestConfiguration);
}
public void HandleAdLoaded(object sender, AppOpenAdLoadedEventArgs args)
{
// 광고가 성공적으로 로드되었습니다. 이제 처리할 수 있습니다.
appOpenAd = args.AppOpenAd;
// 광고 동작에 대한 이벤트 처리기 추가
appOpenAd.OnAdClicked += HandleAdClicked;
appOpenAd.OnAdShown += HandleAdShown;
appOpenAd.OnAdFailedToShow += HandleAdFailedToShow;
appOpenAd.OnAdDismissed += HandleAdDismissed;
appOpenAd.OnAdImpression += HandleImpression;
if (!isColdStartAdShown) {
ShowAppOpenAd();
isColdStartAdShown = true;
}
}
public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
// 광고 {args.AdUnitId}(이)가 {args.Message}와(과) 함께 로드에 실패함
// OnAdFailedToLoad 이벤트에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
public void HandleAdDismissed(object sender, EventArgs args)
{
// 광고가 해제되었을 때 호출됩니다.
// 광고 해제 후 리소스를 정리합니다.
DestroyAppOpenAd();
// 이제 다음 광고를 미리 로드할 수 있습니다.
RequestAppOpenAd();
}
public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
{
// 광고를 표시하는 데 실패했을 때 호출됩니다.
// 리소스를 정리합니다.
DestroyAppOpenAd();
// 이제 다음 광고를 미리 로드할 수 있습니다.
RequestAppOpenAd();
}
public void HandleAdClicked(object sender, EventArgs args)
{
// 광고에 대한 클릭이 기록될 때 호출됩니다.
}
public void HandleAdShown(object sender, EventArgs args)
{
// 광고가 표시되었을 때 호출됩니다.
}
public void HandleImpression(object sender, ImpressionData impressionData)
{
// 광고에 대한 노출이 기록될 때 호출됩니다.
}
public void DestroyAppOpenAd()
{
if (appOpenAd != null)
{
appOpenAd.Destroy();
appOpenAd = null;
}
}
}
앱 실행 광고 통합의 특징
- 로딩에 시간이 걸릴 수 있으므로 광고가 로드되지 않은 경우 콜드 부팅 시간을 늘리지 마세요.
- 핫 스타트 시 후속 표시를 위해 광고를 미리 로드하세요.
- 앱 시작 시 앱 실행 광고와 다른 광고 형식을 병렬로 로드하는 것을 권장하지 않습니다. 이때 앱이 작동 데이터를 다운로드할 수 있기 때문입니다. 이는 장치와 인터넷 연결에 과부하를 주어 광고 로드 시간이 길어질 수 있습니다.
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
광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.
광고 테스트를 위한 데모 광고 단위 사용
앱 실행 광고 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.
모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.
데모 adUnitId: demo-appopenad-yandex
.
Важно
앱을 스토어에 게시하기 전에 데모 광고 배치 ID를 Partner Interface에서 가져온 실제 ID로 교체해야 합니다.
사용 가능한 데모 광고 배치 ID 목록은 테스트용 데모 광고 단위 섹션에서 찾을 수 있습니다.
광고 통합 테스트
네이티브 콘솔 도구를 사용하여 광고 통합을 테스트할 수 있습니다.
자세한 로그를 보려면 YMAMobileAds
클래스의 enableLogging
메서드를 호출하세요.
YMAMobileAds.enableLogging()
SDK 로그를 보려면 콘솔 도구로 이동하여 Subsystem = com.mobile.ads.ads.sdk
를 설정하세요. 카테고리와 오류 수준별로 로그를 필터링할 수도 있습니다.
광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.

권장 사항
-
시작 화면 전에 앱 실행 광고를 렌더링하지 마세요.
시작 화면을 표시함으로써 사용자의 앱 경험을 향상시켜 더 매끄럽고 즐거운 경험을 제공합니다. 그러면 사용자가 놀라거나 혼란스러워하지 않고 원하는 앱을 열었다는 확신을 얻을 수 있습니다. 같은 화면에서 예정된 광고에 대해 사용자에게 알릴 수 있습니다. 로딩 표시기를 사용하거나 광고 후에 앱 콘텐츠를 다시 볼 수 있다는 텍스트 메시지를 사용하면 됩니다.
-
광고 요청과 렌더링 사이에 지연이 있으면 사용자가 앱을 잠시 실행했다가 예상치 못하게 콘텐츠와 관련 없는 광고를 볼 수 있습니다. 그러면 사용자 경험에 부정적인 영향을 미칠 수 있으므로 이러한 상황은 방지해야 합니다. 한 가지 해결책은 메인 앱 콘텐츠를 표시하기 전에 시작 화면을 사용하고 이 화면에서 광고 렌더링을 시작하는 것입니다. 시작 화면 후에 앱이 일부 콘텐츠를 열면 광고를 렌더링하지 않는 것이 좋습니다.
-
새로운 사용자가 앱을 실행하여 몇 차례 사용할 때까지 기다린 후에 앱 실행 광고를 렌더링하세요. 앱에서 특정 기준을 충족한 사용자에게만 광고를 렌더링하세요(예: 특정 레벨을 통과했거나, 앱을 특정 횟수만큼 실행했거나, 보상 제공에 참여하지 않는 경우 등). 앱 설치 직후에 광고를 렌더링하지 마세요.
-
앱 사용자 행동에 따라 광고 렌더링 빈도를 조절하세요. 앱을 콜드/핫 스타트할 때마다 광고를 렌더링하지 마세요.
-
앱이 일정 시간 동안 백그라운드에 있었을 때만 광고를 렌더링하세요(예: 30초, 2분, 15분).
-
각 앱은 고유하며, 유지 시간이나 앱 사용 시간을 줄이지 않으면서 수익을 극대화하는 특별한 접근법이 필요하므로 철저한 테스트를 수행해야 합니다. 사용자 행동과 참여는 시간이 지남에 따라 변할 수 있으므로 앱 실행 광고에 사용하는 전략을 주기적으로 테스트할 것을 권장합니다.
추가 리소스
-
GitHub 링크.