리워드 광고

보상형 광고는 사용자가 광고를 시청하면 보상을 받는 인기 있는 전체 화면 광고 형식입니다.

이 광고 유형의 표시는 예를 들어 게임에서 보너스나 추가 생명을 받으려는 사용자에 의해 활성화됩니다.

사용자 동기 부여가 높기 때문에 무료 앱에서 가장 인기 있고 수익성이 높은 광고 형식입니다.

표시 형태

이 가이드는 Jetpack Compose 확장을 사용해 Android 앱에 리워드 광고를 통합하는 방법을 설명합니다. 코드 예시와 절차 외에도 이 광고 형식 사용 권장 사항과 추가 자료 링크를 제공합니다.

사전 요건

  1. 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
  2. 광고 SDK를 미리 초기화하세요.
  3. 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 미디에이션을 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.

Compose 확장을 사용하려면 build.gradle.kts에 의존성을 추가합니다.

dependencies {
    implementation("com.yandex.android:mobileads:8.0.0")
    implementation("com.yandex.android:mobileads-compose:8.0.0")

    // Compose BOM (minimum 2024.01.00)
    implementation(platform("androidx.compose:compose-bom:2025.03.00"))
}

구현

리워드 광고 통합의 주요 단계:

  • rememberRewardedAdLoader()로 광고 로더를 생성합니다.
  • loadAd() suspend 함수로 광고를 로드하고 RewardedAdLoadResult를 처리합니다.
  • 광고 이벤트 콜백용 리스너 RewardedAdEventListener를 등록합니다.
  • RewardedAd를 표시합니다.
  • 광고 시청에 대한 사용자 보상을 지급합니다.

리워드 광고 통합 시 유의 사항

  1. Yandex Mobile Ads SDK 메서드 호출은 모두 메인 스레드에서 수행해야 합니다.

  2. RewardedAdLoadResult.Failure로 오류가 오면 즉시 새 광고를 다시 로드하지 마세요. 재시도가 필요하면 재로드 횟수를 제한해 제한 환경에서 연속 실패 요청과 연결 문제를 피하세요.

  3. 광고 상호작용이 일어나는 화면이 살아 있는 동안에는 광고에 대한 강한 참조를 유지하는 것이 좋습니다.

  4. Composable이 컴포지션 트리에서 사라지면 cancelLoading()이 자동으로 호출되므로 로더 리소스를 명시적으로 해제할 필요가 없습니다.

광고 로드

리워드 광고는 rememberRewardedAdLoader()로 로드합니다. 로드는 suspend 함수 loadAd()로 수행되며, 반환 타입은 RewardedAdLoadResult입니다.

광고를 로드하려면 Yandex Advertising Network 인터페이스에서 받은 광고 유닛 ID(adUnitId)가 필요합니다.

AdRequest.Builder()로 사용자 관심 데이터, 페이지 컨텍스트, 위치 등 추가 데이터를 넘겨 광고 요청 매개변수를 확장할 수 있습니다. 요청에 컨텍스트 데이터를 더하면 광고 품질을 크게 높일 수 있습니다. 자세한 내용은 광고 타겟팅을 참고하세요.

리워드 광고를 로드하는 예시는 다음과 같습니다.

import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.compose.rememberRewardedAdLoader
import com.yandex.mobile.ads.rewarded.RewardedAdLoadResult

@Composable
fun MyScreen(activity: Activity) {
    var rewardedAd by remember { mutableStateOf<RewardedAd?>(null) }

    val loader = rememberRewardedAdLoader()

    LaunchedEffect(Unit) {
        when (val result = loader.loadAd(AdRequest.Builder("your-ad-unit-id").build())) {
            is RewardedAdLoadResult.Success -> rewardedAd = result.ad
            is RewardedAdLoadResult.Failure -> {
                // Ad failed to load with AdRequestError.
                // Attempting to load a new ad from here is strongly discouraged.
            }
        }
    }
}

광고 표시

보상형 광고는 사용자가 광고를 시청하면 보상을 받을 수 있는 인센티브 기반 광고 형식입니다. 보상은 게임에서 추가 생명이나 다음 레벨로의 진행일 수 있습니다. 보상 형식은 앱 수준에서 결정됩니다.

리워드 광고 수명 주기 이벤트를 추적하고 보상을 받으려면 RewardedAd 객체에 RewardedAdEventListener 콜백 리스너를 설정합니다.

show() 메서드 호출 시 보상은 onRewarded 콜백으로 직접 전달됩니다.

@Composable
fun MyScreen(activity: Activity) {
    var rewardedAd by remember { mutableStateOf<RewardedAd?>(null) }

    val loader = rememberRewardedAdLoader()

    LaunchedEffect(Unit) {
        when (val result = loader.loadAd(AdRequest.Builder("your-ad-unit-id").build())) {
            is RewardedAdLoadResult.Success -> rewardedAd = result.ad
            is RewardedAdLoadResult.Failure -> {
                // Ad failed to load with AdRequestError.
            }
        }
    }

    LaunchedEffect(rewardedAd) {
        rewardedAd?.apply {
            setAdEventListener(object : RewardedAdEventListener {
                override fun onAdShown() {
                    // Called when ad is shown.
                }

                override fun onAdFailedToShow(adError: AdError) {
                    // Called when an RewardedAd failed to show.
                    // Now you can preload the next rewarded ad.
                    loadRewardedAd()
                }

                override fun onAdDismissed() {
                    // Called when ad is dismissed.
                    // Now you can preload the next rewarded ad.
                    loadRewardedAd()
                }

                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.
                }

                override fun onRewarded(reward: Reward) {
                    // Called when the user can be rewarded.
                }
            })
            show(activity)
        }
    }
}

리워드 광고 통합 테스트

광고 테스트를 위한 데모 광고 단위 사용

보상형 광고 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.

모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.

데모 adUnitId: demo-rewarded-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 rewarded was integrated successfully

보상형 광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.

추가 자료