광고 슬라이더
네이티브 광고는 앱 측에서 레이아웃을 정의할 수 있는 광고 유형입니다. 이 기능을 통해 앱 디자인의 특성을 고려하여 광고의 시각적 스타일과 배치를 변경할 수 있습니다.
광고 렌더링은 광고 성능과 폼질을 높이는 네이티브 플랫폼 도구로 수행됩니다.
네이티브 광고는 광고 경험을 향상합니다. 그 결과 사용자 관심을 잃지 않으면서 광고를 더 많이 표시할 수 있습니다. 그러면 장기적으로 광고를 통한 최대 수익이 보장됩니다.
사전 준비
- 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
- 광고 SDK를 미리 초기화하세요.
- 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.
실행
네이티브 광고(슬라이더) 통합을 위한 주요 단계:
SliderAdLoader
광고 로더를 생성 및 구성합니다.- 광고 로더 이벤트 리스너(
SliderAdLoadListener
)를 등록합니다. - 광고를 로드합니다.
- 로드된 광고를 표시합니다.
네이티브 광고 통합의 특징
-
Yandex Mobile Ads SDK 메서드에 대한 모든 호출은 메인 스레드에서 이루어져야 합니다.
-
onAdFailedToLoad()
콜백에서 오류가 발생한 경우, 새로운 광고를 다시 로드하려고 시도하지 마세요. 다른 옵션이 없는 경우, 광고 로드 재시도 횟수를 제한하세요. 이렇게 하면 제한이 발생할 때 지속적인 실패 요청과 연결 문제를 방지할 수 있습니다. -
광고와 상호 작용하는 화면의 수명 주기 동안
SliderAd
광고 객체와 그 로더SliderAdLoader
에 대한 강한 참조를 유지하는 것이 좋습니다. -
슬라이더가 로드되면 모든 자산을 렌더링해야 합니다. 광고에서 사용할 수 있는 자산 목록을
SliderAd
객체에서 가져올 수 있습니다. -
슬라이더는 각각 표시해야 하는 광고 세트를 포함합니다.
-
슬라이더 내의 각 광고는 자산 세트를 포함합니다. 광고에서 사용할 수 있는 구성 요소 목록을
NativeAd
광고 객체에서 가져올 수 있습니다. 필요한 모든 광고 자산을 렌더링해야 합니다. 광고 자산에 대한 설명은 네이티브 광고 자산 페이지에서 찾을 수 있습니다. -
광고 콘텐츠를 기반으로 광고 컨테이너의 크기를 계산하는 것을 권장합니다.
-
슬라이더의 광고는 동일한 공유 컨테이너 내에 표시되어야 합니다. 그렇지 않으면 광고 노출이 계수되지 않습니다.
-
동영상이 포함된 광고는 일반적으로 성과가 더 높습니다. 동영상 광고를 표시하려면 광고 컨테이너와
MediaView
구성 요소의 크기가 최소 300x160dp(밀도 독립 화소)여야 합니다. -
가능한 자산의 전체 세트를 포함하는 레이아웃을 사용하는 것을 권장합니다. Yandex의 경험에 따르면, 전체 자산 세트를 포함하는 레이아웃의 전환이 더 효과적입니다.
슬라이더 로딩
네이티브 광고 슬라이더를 로드하려면 SliderAdLoader
객체를 생성합니다.
광고 요청 매개변수는 NativeAdRequestConfiguration.Builder
클래스 객체를 사용해 구성됩니다. 요청 매개변수로 광고 단위 ID, 이미지 로드 방법, 나이, 성별 및 광고 선택 품질을 향상할 수 있는 기타 데이터를 사용할 수 있습니다.
광고 로딩 결과에 대한 알림을 받으려면 SliderAdLoadListener
인스턴스를 생성하여 광고 슬라이드 로더에 대한 이벤트 리스너로 설정합니다.
광고를 로드하려면 loadAd()
메서드를 호출합니다.
아래 예시는 Activity의 네이티브 광고를 로드하는 방법을 보여줍니다.
class SliderNativeAdActivity : AppCompatActivity(R.layout.activity_slider_native_ad) {
private val nativeAdView get() = binding.nativeAd.root
private var sliderAdLoader: SliderAdLoader? = null
private lateinit var binding: ActivityCustomNativeAdBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityCustomNativeAdBinding.inflate(layoutInflater)
setContentView(binding.root)
sliderAdLoader = createSliderAdLoader()
sliderAdLoader?.loadSlider(
// 여기서 NativeAdRequestConfiguration.Builder 클래스의 메서드를 사용하여 개별 옵션 설정을 지정할 수 있습니다.
NativeAdRequestConfiguration.Builder("your-ad-unit-id").build()
)
}
private fun createSliderAdLoader(): SliderAdLoader {
return sliderAdLoader ?: SliderAdLoader(this).apply {
setSliderAdLoadListener(object : SliderAdLoadListener {
override fun onSliderAdLoaded(p0: SliderAd) {
// 슬라이더 광고가 성공적으로 로드되었습니다. 이제 로드된 광고를 표시할 수 있습니다.
}
override fun onSliderAdFailedToLoad(p0: AdRequestError) {
// AdRequestError로 광고를 로드하는 데 실패했습니다.
// onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
})
}
}
}
class CustomSliderNativeAdActivity extends AppCompatActivity {
private NativeAdView mNativeAdView = mBinding.nativeAd.getRoot();
@Nullable
private SliderAdLoader mSliderAdLoader = null;
private ActivityCustomNativeAdBinding mBinding;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityCustomNativeAdBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
mSliderAdLoader = createSliderAdLoader();
if (mSliderAdLoader != null) {
// 여기서 NativeAdRequestConfiguration.Builder 클래스의 메서드를 사용하여 개별 옵션 설정을 지정할 수 있습니다.
mSliderAdLoader.loadSlider(
new NativeAdRequestConfiguration.Builder("your-ad-unit-id").build()
);
}
}
private SliderAdLoader createSliderAdLoader() {
if (mSliderAdLoader != null) {
return mSliderAdLoader;
}
final SliderAdLoader newSliderAdLoader = new SliderAdLoader(this);
newSliderAdLoader.setSliderAdLoadListener(new SliderAdLoadListener() {
@Override
public void onSliderAdLoaded(@NonNull SliderAd sliderAd) {
// 슬라이더 광고가 성공적으로 로드되었습니다. 이제 로드된 광고를 표시할 수 있습니다.
}
@Override
public void onSliderAdFailedToLoad(@NonNull final AdRequestError error) {
// AdRequestError로 광고를 로드하는 데 실패했습니다.
// onAdFailedToLoad() 메서드에서 새 광고를 로드하려는 시도는 권장되지 않습니다.
}
});
return mSliderAdLoader;
}
}
네이티브 광고 슬라이더 렌더링
슬라이더가 로드되면 모든 자산을 렌더링해야 합니다.
성공적으로 로드된 슬라이더는 동일한 컨텍스트를 가진 하나 이상의 네이티브 광고를 포함합니다. 슬라이더의 광고는 동일한 공유 컨테이너 내에 표시되어야 합니다. 그렇지 않으면 광고 노출이 계수되지 않습니다.
슬라이더 레이아웃을 구성하는 방법은 두 가지입니다.
- 템플릿을 사용한 레이아웃
- 네이티브 광고 슬라이더의 레이아웃 수동 설정
템플릿을 사용한 레이아웃
네이티브 광고 슬라이더를 다루는 가장 쉬운 방법은 표준 레이아웃 템플릿을 사용하는 것입니다. 기본 버전에서는 몇 줄의 코드만 필요하기 때문입니다.
템플릿에는 이미 필요한 자산의 전체 세트가 포함되어 있으며, 이들의 상호 배치를 정의합니다. 템플릿은 지원되는 모든 유형의 네이티브 광고와 함께 작동합니다.
템플릿을 사용하여 슬라이더를 만드는 것은 쉽습니다. SliderAd
객체를 루트 NativeAdView
컨테이너에 연결하고 슬라이더의 모든 광고를 템플릿에 연결하세요.
코드 예시
private fun showAd(sliderAd: SliderAd) {
try {
val sliderViewBinder = NativeAdViewBinder.Builder(sliderAdView).build()
sliderAd.bindSliderAd(sliderViewBinder)
val nativeAds = sliderAd.nativeAds
for (nativeAd in nativeAds) {
val nativeBannerView = NativeBannerView(this)
nativeBannerView.setAd(nativeAd)
sliderAdView.addView(nativeBannerView)
}
} catch (exception: NativeAdException) {
//오류 기록
}
}
private void showAd(@NonNull final SliderAd sliderAd) {
try {
final NativeAdViewBinder sliderViewBinder = new NativeAdViewBinder.Builder(mSliderAdView).build();
sliderAd.bindSliderAd(sliderViewBinder);
final List<NativeAd> nativeAds = sliderAd.getNativeAds();
for (final NativeAd nativeAd : nativeAds) {
final NativeBannerView nativeBannerView = new NativeBannerView(this);
nativeBannerView.setAd(nativeAd);
mSliderAdView.addView(nativeBannerView);
}
} catch (final NativeAdException exception) {
// 오류 기록
}
}
네이티브 광고 슬라이더 템플릿을 사용자 정의할 수 있습니다. 템플릿을 사용한 레이아웃 설정에서 이에 대한 자세한 내용을 확인할 수 있습니다.
네이티브 광고 슬라이더의 레이아웃 수동 설정
템플릿 설정만으로 원하는 결과를 얻을 수 없는 경우, 네이티브 광고 슬라이더의 레이아웃을 수동으로 구성할 수 있습니다.
이 방법을 사용하면 광고 구성 요소를 서로 상대적으로 배치하여 네이티브 광고를 위한 슬라이더를 구성할 수 있습니다. 광고에는 필수 및 선택적 표시 자산이 모두 포함될 수 있습니다. 전체 목록은 네이티브 광고 자산에서 찾을 수 있습니다.
Совет
슬라이더의 각 광고에 대해 가능한 자산의 전체 세트를 포함하는 레이아웃을 사용하는 것이 좋습니다. Yandex의 경험에 따르면 자산의 전체 세트를 포함한 레이아웃의 클릭 가능성이 더 높습니다.
SliderAd
객체를 루트 NativeAdView
객체에 연결하고 슬라이더의 각 광고를 하위 NativeAdView
객체에 연결하세요.
슬라이더의 각 광고는 표준 네이티브 광고 레이아웃 메서드를 사용하여 배치됩니다.
코드 예시
private fun showAd(sliderAd: SliderAd) {
try {
val sliderViewBinder = NativeAdViewBinder.Builder(sliderAdView).build()
sliderAd.bindSliderAd(sliderViewBinder)
val nativeAds = sliderAd.nativeAds
for (nativeAd in nativeAds) {
val nativeAdView: NativeAdView =
mLayoutInflater.inflate(R.layout.widget_native_ad, sliderAdView, false)
val viewBinder = NativeAdViewBinder.Builder(nativeAdView)
.setAgeView(age)
.setBodyView(body)
.setCallToActionView(callToAction)
.setDomainView(domain)
.setFaviconView(favicon)
.setFeedbackView(feedback)
.setIconView(icon)
.setMediaView(media)
.setPriceView(price)
.setRatingView(rating)
.setReviewCountView(reviewCount)
.setSponsoredView(sponsored)
.setTitleView(title)
.setWarningView(warning)
.build()
nativeAd.bindNativeAd(viewBinder)
sliderAdView.addView(nativeAdView)
}
} catch (exception: NativeAdException) {
//오류 기록
}
}
private void showAd(@NonNull final SliderAd sliderAd) {
try {
final NativeAdViewBinder sliderViewBinder = new NativeAdViewBinder.Builder(mSliderAdView).build();
sliderAd.bindSliderAd(sliderViewBinder);
final List<NativeAd> nativeAds = sliderAd.getNativeAds();
for (final NativeAd nativeAd : nativeAds) {
final NativeAdView nativeAdView = mLayoutInflater.inflate(R.layout.widget_native_ad, mSliderAdView, false);
final NativeAdViewBinder viewBinder = new NativeAdViewBinder.Builder(nativeAdView)
.setAgeView(age)
.setBodyView(body)
.setCallToActionView(callToAction)
.setDomainView(domain)
.setFaviconView(favicon)
.setFeedbackView(feedback)
.setIconView(icon)
.setMediaView(media)
.setPriceView(price)
.setRatingView(rating)
.setReviewCountView(reviewCount)
.setSponsoredView(sponsored)
.setTitleView(title)
.setWarningView(warning)
.build();
nativeAd.bindNativeAd(viewBinder);
mSliderAdView.addView(nativeAdView);
}
} catch (final NativeAdException exception) {
// 오류 기록
}
}
네이티브 광고 슬라이더의 통합 테스트
광고 테스트를 위한 데모 광고 단위 사용
네이티브 광고 슬라이더 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.
모든 슬라이더 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.
네이티브 광고 슬라이더에 대한 데모 adUnitId
: demo-native-slider-yandex
.
Важно
앱을 스토어에 게시하기 전에 데모 광고 단위 ID를 Partner Interface에서 가져온 실제 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] Slider native ad was integrated successfully
네이티브 광고 슬라이더 통합에 문제가 있는 경우 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.