보상형 광고
보상형 광고는 사용자가 광고를 시청하면 보상을 받는 인기 있는 전체 화면 광고 형식입니다.
이 광고 유형의 표시는 예를 들어 게임에서 보너스나 추가 생명을 받으려는 사용자에 의해 활성화됩니다.
사용자 동기 부여가 높기 때문에 무료 앱에서 가장 인기 있고 수익성이 높은 광고 형식입니다.
표시 예
이 가이드는 Android 앱에 보상형 광고를 통합하는 방법을 보여줍니다. 코드 예시와 지침 외에도 형식별 권장 사항 및 추가 리소스에 대한 링크가 포함되어 있습니다.
사전 준비
- 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
- 광고 SDK를 미리 초기화하세요.
- 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.
실행
보상형 광고 통합을 위한 주요 단계:
RewardedAdLoader
광고 로더를 생성 및 구성합니다.- 광고 로드 콜백 메서드(
RewardedAdLoadListener
)에 대한 리스너를 등록합니다. - 광고를 로드합니다.
- 광고 이벤트 콜백 메서드에 대한
RewardedAdEventListener
리스너를 등록합니다. RewardedAd
를 렌더링합니다.- 광고를 시청한 사용자에게 보상을 제공합니다.
보상형 광고 통합의 특징
-
Yandex Mobile Ads SDK 메서드에 대한 모든 호출은 메인 스레드에서 이루어져야 합니다.
-
onAdFailedToLoad()
콜백에서 오류가 발생한 경우, 새로운 광고를 다시 로드하려고 시도하지 마세요. 다른 옵션이 없는 경우, 광고 로드 재시도 횟수를 제한하세요. 이렇게 하면 제한이 발생할 때 지속적인 실패 요청과 연결 문제를 방지할 수 있습니다. -
광고와의 상호 작용을 호스팅하는 화면의 수명 주기 전반에서 로더와 광고에 대한 강력한 참조를 유지하는 것이 좋습니다.
-
성과 향상을 위해 모든 광고 로드에 대해
RewardedAdLoader
의 단일 인스턴스를 사용하는 것이 좋습니다.
광고 로드
보상형 광고를 로드하려면 RewardedAdLoader
객체를 생성하고 설정합니다.
이를 위해 Activity 또는 Application 컨텍스트가 필요합니다.
광고가 로드되거나 로드에 실패했을 때 알리기 위해, RewardedAdLoader
객체에 대해 RewardedAdLoadListener
콜백 메서드 리스너를 설정하세요.
광고를 로드하려면 Partner Interface(adUnitId)의 광고 단위 식별자가 필요합니다.
사용자 관심사, 컨텍스트 앱 데이터, 위치 세부 정보 또는 기타 정보를 전달함으로써 AdRequestConfiguration.Builder()
를 통해 광고 요청 매개변수 세트를 확장할 수 있습니다. 요청에 추가적인 컨텍스트 데이터를 제공하면 광고 품질을 크게 향상할 수 있습니다. 광고 타겟팅 섹션에서 자세한 내용을 확인하세요.
onAdLoaded(rewardedAd: RewardedAd)
메서드를 호출하여 광고가 로드되면, 표시가 완료되기 전에 로드된 RewardedAd
에 대한 링크를 저장하세요.
다음 예시는 Activity에서 보상형 광고를 로드하는 방법을 보여줍니다.
class RewardedAdActivity : AppCompatActivity(R.layout.activity_rewarded_ad) {
private var rewardedAd: RewardedAd? = null
private var rewardedAdLoader: RewardedAdLoader? = null
private lateinit var binding: ActivityRewardedAdBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRewardedAdBinding.inflate(layoutInflater)
setContentView(binding.root)
// 보상 광고 로드는 SDK 초기화 후에 발생해야 합니다.
// 예를 들어 Application.onCreate 또는 Activity.onCreate에서 SDK를 가능한 빨리 초기화하세요
rewardedAdLoader = RewardedAdLoader(this).apply {
setAdLoadListener(object : RewardedAdLoadListener {
override fun onAdLoaded(rewardedAd: RewardedAd) {
this.rewardedAd = rewardedAd
// 광고가 성공적으로 로드되었습니다. 이제 광고를 표시할 수 있습니다.
}
override fun onAdFailedToLoad(adRequestError: AdRequestError) {
// AdRequestError로 광고를 로드하는 데 실패했습니다.
// onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
})
}
loadRewardedAd()
}
private fun loadRewardedAd() {
val adRequestConfiguration = AdRequestConfiguration.Builder("your-ad-unit-id").build()
rewardedAdLoader?.loadAd(adRequestConfiguration)
}
}
public class RewardedAdActivity extends AppCompatActivity {
@Nullable
private RewardedAd mRewardedAd = null;
@Nullable
private RewardedAdLoader mRewardedAdLoader = null;
private ActivityRewardedAdBinding mBinding;
public RewardedAdActivity() {
super(R.layout.activity_rewarded_ad);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityRewardedAdBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
// 전면 광고 로드는 SDK 초기화 후에 발생해야 합니다.
// 예를 들어 Application.onCreate 또는 Activity.onCreate에서 SDK를 가능한 빨리 초기화하십시오
mRewardedAdLoader = new RewardedAdLoader(this);
mRewardedAdLoader.setAdLoadListener(new RewardedAdLoadListener() {
@Override
public void onAdLoaded(@NonNull final RewardedAd rewardedAd) {
mRewardedAd = rewardedAd;
// 광고가 성공적으로 로드되었습니다. 이제 광고를 표시할 수 있습니다.
}
@Override
public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
// AdRequestError로 광고를 로드하는 데 실패했습니다.
// onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
});
loadRewardedAd();
}
private void loadRewardedAd() {
if (mRewardedAdLoader != null ) {
final AdRequestConfiguration adRequestConfiguration =
new AdRequestConfiguration.Builder("your-ad-unit-id").build();
mRewardedAdLoader.loadAd(adRequestConfiguration);
}
}
}
광고 렌더링
보상형 광고는 사용자가 광고를 시청하면 보상을 받을 수 있는 인센티브 기반 광고 형식입니다. 보상은 게임에서 추가 생명이나 다음 레벨로의 진행일 수 있습니다. 보상 형식은 앱 수준에서 결정됩니다.
보상형 광고 수명 주기를 추적하고 보상을 지급하려면 RewardedAd 객체에 대한 RewardedAdEventListener
콜백 메서드 리스너를 설정하세요.
광고를 렌더링하려면 로드된 광고의 show 메서드에 Activity를 전달해야 합니다.
private fun showAd() {
rewardedAd?.apply {
setAdEventListener(object : RewardedAdEventListener {
override fun onAdShown() {
// 광고가 표시될 때 호출됩니다.
}
override fun onAdFailedToShow(adError: AdError) {
// RewardedAd를 표시하는 데 실패했을 때 호출됩니다
}
override fun onAdDismissed() {
// 광고가 해제되었을 때 호출됩니다.
// 광고 해제 후 리소스 정리
rewardedAd?.setAdEventListener(null)
rewardedAd = null
// 이제 다음 보상형 광고를 미리 로드할 수 있습니다.
loadRewardedAd()
}
override fun onAdClicked() {
// 광고에 대한 클릭이 기록될 때 호출됩니다.
}
override fun onAdImpression(impressionData: ImpressionData?) {
// 광고에 대한 노출이 기록될 때 호출됩니다.
}
override fun onRewarded(reward: Reward) {
// 사용자가 보상을 받을 수 있을 때 호출됩니다.
}
})
show(this@Activity)
}
}
private void showAd() {
if (mRewardedAd != null) {
mRewardedAd.setAdEventListener(new RewardedAdEventListener() {
@Override
public void onAdShown() {
// 광고가 표시될 때 호출됩니다.
}
@Override
public void onAdFailedToShow(@NonNull final AdError adError) {
// InterstitialAd를 표시하는 데 실패했을 때 호출됩니다.
}
@Override
public void onAdDismissed() {
// 광고가 해제되었을 때 호출됩니다.
// 광고 해제 후 리소스 정리
if (mRewardedAd != null) {
mRewardedAd.setAdEventListener(null);
mRewardedAd = null;
}
// 이제 다음 전면 광고를 미리 로드할 수 있습니다.
loadRewardedAd();
}
@Override
public void onAdClicked() {
// 광고에 대한 클릭이 기록될 때 호출됩니다.
}
@Override
public void onAdImpression(@Nullable final ImpressionData impressionData) {
// 광고에 대한 노출이 기록될 때 호출됩니다.
}
@Override
public void onRewarded(@NonNull final Reward reward) {
// 사용자가 보상을 받을 수 있을 때 호출됩니다.
}
});
mRewardedAd.show(this);
}
}
리소스 릴리스
이전에 렌더링된 광고에 대한 링크를 저장하지 마세요. 이전에 렌더링된 광고에 대해 setAdEventListener(null)
를 호출하세요.
로더가 더 이상 사용되지 않는 경우 로더에 대해 setAdLoadListener(null)
를 호출하세요.
이는 리소스를 릴리스하고 메모리 누수를 방지합니다.
override fun onDestroy() {
super.onDestroy()
rewardedAdLoader.setAdLoadListener(null)
rewardedAdLoader = null
destroyRewardedAd()
}
private fun destroyRewardedAd() {
rewardedAd?.setAdEventListener(null)
rewardedAd = null
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mRewardedAdLoader != null) {
mRewardedAdLoader.setAdLoadListener(null);
mRewardedAdLoader = null;
}
destroyRewardedAd();
}
private void destroyRewardedAd() {
if (mRewardedAd != null) {
mRewardedAd.setAdEventListener(null);
mRewardedAd = null;
}
}
보상형 광고 통합 테스트
광고 테스트를 위한 데모 광고 단위 사용
보상형 광고 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.
모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.
데모 adUnitId: demo-rewarded-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 rewarded was integrated successfully
보상형 광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.
추가 리소스
-
GitHub 링크.