앱 오프닝 광고는 앱 로드 화면에서 수익을 창출하려는 게시자를 위해 개발된 광고 형식입니다. 사용자는 언제든지 앱 오프닝 광고를 닫을 수 있습니다. 사용자가 앱을 포그라운드로 가져올 때 앱 오프닝 광고를 표시합니다.
자세한 내용은 앱 오프닝 광고 안내를 참고하세요.이 가이드에서는 앱 오프닝 광고를 Android 앱에 통합하는 방법을 설명합니다.
시작하기 전에
계속하기 전에 다음을 수행하세요.
- GMA Next-Gen SDK을 설정합니다.
- 테스트 앱 오프닝 광고 단위 ID
/21775744923/example/app-open을 사용합니다.- 앱을 빌드하고 테스트할 때는 운영 중인 실제 광고 대신 테스트 광고를 사용하세요. 테스트 광고 단위 ID를 사용하지 않으면 Google에서 계정을 정지할 수 있습니다.
- 앱을 게시하기 전에 이 ID를 광고 단위 ID로 바꿔야 합니다.
- GMA Next-Gen SDK 테스트 광고에 관한 자세한 내용은 테스트 광고 사용 설정을 참고하세요.
광고 사전 로드 이해하기 (베타)
GMA Next-Gen SDK의 광고 사전 로드 (베타)는 광고 로드 및 캐싱을 자동화합니다.
광고 사전 로드를 사용하면 다음과 같은 혜택이 있습니다.
- 참조 관리: 광고가 표시될 때까지 참조를 유지합니다.
- 자동 새로고침: 캐시에서 광고를 가져올 때 새 광고를 로드합니다.
- 관리되는 재시도: 광고가 로드되지 않으면 새 광고를 로드합니다.
- 만료 처리: 만료되기 전에 광고를 새로고침합니다.
- 캐시 최적화: 우선순위가 가장 높은 광고를 게재하기 위해 캐시 순서를 최적화합니다.
광고 사전 로드 시작
광고 미리 로드를 시작하려면 앱 시작 시 start 메서드를 한 번 호출합니다. start 메서드를 호출하면 GMA Next-Gen SDK가 자동으로 광고를 미리 로드하고 미리 로드된 구성에 대해 실패한 요청을 다시 시도합니다.
다음 예에서는 광고 미리 로드를 시작하는 방법을 보여줍니다.
Kotlin
자바
AD_UNIT_ID를 광고 단위 ID로 바꿉니다.
이전 예시에서는 광고 단위 ID를 미리 로드 ID로 사용하는 방법을 보여줍니다. 프리로드 ID는 광고 사전 로드 구성을 식별하기 위해 만드는 문자열 식별자입니다. 앱에 동일한 광고 단위 ID에 대한 타겟팅 구성이 여러 개 필요한 경우 맞춤 문자열 식별자를 전달하세요.
미리 로드된 광고 가져오기 및 표시
광고를 표시하려면 pollAd 메서드를 호출합니다.
GMA Next-Gen SDK는 사용 가능한 광고를 가져오고 백그라운드에서 다음 광고를 자동으로 미리 로드합니다. 사용 가능한 광고가 없으면 GMA Next-Gen SDK는 광고를 반환하지 않습니다.
show 메서드를 호출하여 광고를 표시합니다.
다음 예에서는 미리 로드된 광고를 가져와서 표시하는 방법을 보여줍니다.
Kotlin
자바
광고를 게재할 준비가 될 때까지 pollAd 메서드를 호출하지 마세요. 광고 응답 정보를 표시하지 않고 읽으려면 응답 정보 읽기를 참고하세요.
광고 이벤트 수신 대기
광고를 표시하기 전에 광고 이벤트를 수신 대기합니다. 다음 예에서는 광고 이벤트의 콜백을 등록합니다.
Kotlin
private fun listenToAdEvents() { // Listen for ad events. val ad = appOpenAd if (ad == null) { Log.e(TAG, "App open ad is not ready yet.") return } ad.adEventCallback = object : AppOpenAdEventCallback { override fun onAdShowedFullScreenContent() { // App open ad did show. } override fun onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: ${fullScreenContentError.message}") } override fun onAdImpression() { // App open ad did record an impression. } override fun onAdClicked() { // App open ad did record a click. } } }
자바
private void listenToAdEvents() { // Listen for ad events. if (appOpenAd == null) { Log.e(TAG, "App open ad is not ready yet."); return; } appOpenAd.setAdEventCallback( new AppOpenAdEventCallback() { @Override public void onAdShowedFullScreenContent() { // App open ad did show. } @Override public void onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null; } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: " + fullScreenContentError.getMessage()); } @Override public void onAdImpression() { // App open ad did record an impression. } @Override public void onAdClicked() { // App open ad did record a click. } }); }
선택사항: 미리 로드 이벤트 수신 대기
광고 미리 로드를 시작할 때 광고가 성공적으로 미리 로드되거나, 미리 로드에 실패하거나, 광고 캐시가 소진될 때 알림을 받도록 미리 로드 이벤트를 등록합니다.
다음 예에서는 광고 미리 로드 이벤트를 등록하는 방법을 보여줍니다.
Kotlin
val preloadCallback = object : PreloadCallback { override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) { Log.d(TAG, "App open preload ad $preloadId failed to load with error: ${adError.message}") } override fun onAdsExhausted(preloadId: String) { Log.i(TAG, "App open preload ad $preloadId is not available") } override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) { Log.i(TAG, "App open preload ad $preloadId is available") } } val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
자바
PreloadCallback preloadCallback = new PreloadCallback() { @Override public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) { Log.d( TAG, String.format( "App open preload ad %s failed to load with error: %s", preloadId, adError.getMessage())); } @Override public void onAdsExhausted(@NonNull String preloadId) { Log.i(TAG, String.format("App open preload ad %s is not available", preloadId)); } @Override public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) { Log.i(TAG, String.format("App open preload ad %s is available", preloadId)); } }; AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
광고가 로드되지 않으면 GMA Next-Gen SDK가 자동으로 광고를 미리 로드하고 미리 로드된 구성에 대해 실패한 요청을 다시 시도합니다.
선택사항: 광고 사용 가능 여부 확인
광고를 사용할 수 있는지 확인해야 하는 경우 광고 사용 가능 여부를 확인하세요. 다음 예에서는 미리 로드된 광고가 사용 가능한지 확인합니다.
Kotlin
private fun isAdAvailable(adUnitId: String): Boolean { return AppOpenAdPreloader.isAdAvailable(adUnitId) }
자바
private boolean isAdAvailable(String adUnitId) { return AppOpenAdPreloader.isAdAvailable(adUnitId); }
선택사항: 버퍼 크기 설정
버퍼 사이즈는 메모리에 보관되는 미리 로드된 광고 수를 제어합니다. 기본적으로 Google은 메모리 소비와 광고 게재 지연 시간을 균형 있게 유지하도록 버퍼 크기를 최적화합니다. 맞춤 버퍼 크기를 설정하여 메모리에 보관되는 광고 수를 늘릴 수 있습니다. 미리 로드된 광고 2개의 버퍼 크기를 사용하는 것이 좋습니다.
다음 예는 버퍼 크기를 설정하는 방법을 보여줍니다.
Kotlin
val adRequest = AdRequest.Builder(adUnitId).build() // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2) AppOpenAdPreloader.start(adUnitId, preloadConfig)
자바
AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2); AppOpenAdPreloader.start(adUnitId, preloadConfig);
미리 로드 캐시 한도
GMA Next-Gen SDK는 모든 광고 단위와 미리 로드 ID에서 미리 로드된 광고의 총수에 앱 전체 제한을 적용합니다.
- 기본 한도: Google은 메모리에 최대 6개의 미리 로드된 광고를 보유합니다. 이 한도는 모든 형식과 미리 로드 ID 간에 공유됩니다.
- 각 미리 로드 ID에 대해 버퍼 사이즈를 2로 유지하는 것이 좋습니다.
선택사항: 광고 미리 로드 중지
세션에서 특정 미리 로드 ID의 광고를 다시 표시할 필요가 없는 경우 광고 미리 로드를 중지할 수 있습니다. 특정 미리 로드 ID의 광고 로드를 중지하려면 미리 로드 ID와 함께 destroy 메서드를 호출합니다. destroy 메서드를 호출하면 캐시에서 미리 로드 ID와 연결된 모든 미리 로드된 광고가 삭제됩니다.
다음 예에서는 광고 미리 로드를 중지하는 방법을 보여줍니다.
Kotlin
private fun stopPreloading(adUnitId: String) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId) }
자바
private void stopPreloading(String adUnitId) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId); }
선택사항: 응답 정보 읽기
캐시에서 광고를 삭제하지 않고 다음 미리 로드된 광고의 응답 정보를 읽습니다.
다음 예에서는 다음 미리 로드된 광고 응답 정보를 읽는 방법을 보여줍니다.
Kotlin
val responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId) if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info.") return } Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")
자바
ResponseInfo responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId); if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info."); return; } Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
콜드 스타트 및 로드 화면 처리
콜드 스타트는 앱이 디스크에서 실행될 때 발생하고 웜 스타트는 메모리에서 앱을 다시 열 때 발생합니다. 콜드 스타트 중에는 즉시 표시할 수 있는 미리 로드된 광고가 없습니다. 콜드 스타트와 달리, 웜 스타트 중에는 미리 로드된 광고가 표시될 준비가 되어 있을 수 있습니다.
콜드 스타트 중에 사용자는 앱이 로드되고 광고가 표시되기 전에 앱과 상호작용할 수 있습니다. 사용자 환경을 저해하지 않으려면 앱 확장 소재가 로드되는 동안 로드 화면에서만 콜드 스타트 시 앱 오프닝 광고를 표시하세요. 애셋 로드가 완료되고 광고가 로드되기 전에 사용자가 기본 콘텐츠에 도달하면 광고를 표시하지 마세요.
추천
앱 오프닝 광고에 관한 다음 권장사항을 따르세요.
- 앱을 처음 시작할 때 앱 오프닝 광고를 표시하지 마세요.
- 광고가 표시되는 동안 로드 화면의 로드가 완료되면 광고가 닫힌 콜백 메서드에서 로드 화면을 닫습니다.
- 앱 오프닝 광고는 로드 후 4시간이 지나면 만료됩니다. 4시간 이상 로드된 앱 오프닝 광고를 표시하지 마세요.