본문으로 건너뛰기

마이그레이션

이 페이지에서는 기존 네이티브(NativeAdView)를 연동한 상태에서 네이티브 2.0(NativeAd2View)으로 마이그레이션 하는 방법을 안내합니다.

✏️ 참고
캐러셀을 구현하기 위해 제공되던 '한 번에 여러 개의 광고 로드하기', '광고 객체 재사용하기'에 대한 내용은 추후 업데이트 될 예정입니다.

기본 설정

주요 변경사항

  • 광고 레이아웃에서 NativeAdView 대신 NativeAd2View를 사용합니다.
  • 네이티브 2.0에서는 광고 할당 및 갱신을 SDK 내부에서 자동으로 수행합니다. 따라서 광고 할당을 위한 클래스인 BuzzAdNative, NativeAdRequest를 사용할 필요가 없습니다.

대체 메서드

기존 네이티브네이티브 2.0
BuzzAdNative.AdLoadListener.onAdLoaded()NativeAd2StateChangedListener.onNext()
BuzzAdNative.AdLoadListener.onLoadFailed()NativeAd2StateChangedListener.onError()

기존 네이티브 구현 예시


<com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView
    android:id="@+id/native_ad_2_view">

    <com.buzzvil.buzzad.benefit.presentation.media.MediaView
        android:id="@+id/mediaView"
        ...생략... />
    <TextView
        android:id="@+id/textTitle"
        ...생략... />
    <TextView
        android:id="@+id/textDescription"
        ...생략... />
    <ImageView
        android:id="@+id/imageIcon"
        ...생략... />
    <com.buzzvil.buzzad.benefit.presentation.media.DefaultCtaView
        android:id="@+id/ctaView"
        ...생략... />

</com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView>
// (1) NativeAdView 대신 NativeAd2View를 사용합니다.
final NativeAdView nativeAdView = findViewById(R.id.your_native_ad_view);
// (2) MedaiView, CtaView 등 다른 컴포넌트는 그대로 사용할 수 있습니다.
final MediaView mediaView = nativeAdView.findViewById(R.id.mediaView);
final TextView titleTextView = nativeAdView.findViewById(R.id.textTitle);
final TextView descriptionTextView = nativeAdView.findViewById(R.id.textDescription);
final ImageView iconImageView = nativeAdView.findViewById(R.id.imageIcon);
final DefaultCtaView ctaView = nativeAdView.findViewById(R.id.ctaView);

// (3) NativeAdRequest, BuzzAdNative를 삭제합니다.
final NativeAdRequest nativeAdRequest = new NativeAdRequest.Builder().build();
final BuzzAdNative buzzAdNative = new BuzzAdNative("YOUR_NATIVE_UNIT_ID");

buzzAdNative.loadAd(nativeAdRequest, new BuzzAdNative.AdLoadListener() {
    @Override
    public void onAdLoaded(@NotNull NativeAd nativeAd) {
        // (4) NativeAdViewBinder 대신 NativeAd2ViewBinder를 사용합니다.
        final NativeAdViewBinder viewBinder = new NativeAdViewBinder.Builder(nativeAdView, mediaView)
            .titleTextView(titleTextView)
            .descriptionTextView(descriptionTextView)
            .iconImageView(iconImageView)
            .ctaView(ctaView)
            .build();
        viewBinder.bind(nativeAd);

        // (5) NativeAd2StateChangedListener.onNext()로 작업을 옮깁니다.
    }

    @Override
    public void onLoadFailed(@NotNull AdError adError) {
        // (6) NativeAd2StateChangedListener.onError()로 작업을 옮깁니다.
    }
});

네이티브 2.0 구현 예시


<com.buzzvil.buzzad.benefit.nativead2.api.NativeAd2View
    android:id="@+id/native_ad_2_view">

    <com.buzzvil.buzzad.benefit.presentation.media.MediaView
        android:id="@+id/mediaView"
        ...생략... />
    <TextView
        android:id="@+id/textTitle"
        ...생략... />
    <TextView
        android:id="@+id/textDescription"
        ...생략... />
    <ImageView
        android:id="@+id/imageIcon"
        ...생략... />
    <com.buzzvil.buzzad.benefit.presentation.media.DefaultCtaView
        android:id="@+id/ctaView"
        ...생략... />
</com.buzzvil.buzzad.benefit.nativead2.api.NativeAd2View>
// (1) NativeAdView 대신 NativeAd2View를 사용합니다.
final NativeAd2View nativeAd2View = findViewById(R.id.nativeAd2View);
// (2) MedaiView, CtaView 등 다른 컴포넌트는 그대로 사용할 수 있습니다.
final MediaView mediaView = findViewById(R.id.mediaView);
final TextView titleTextView = findViewById(R.id.textTitle);
final TextView descriptionTextView = findViewById(R.id.textDescription);
final ImageView iconImageView = findViewById(R.id.imageIcon);
final DefaultCtaView ctaView = findViewById(R.id.ctaView);

// (3) NativeAdRequest, BuzzAdNative를 삭제합니다.
// (4) NativeAdViewBinder 대신 NativeAd2ViewBinder를 사용합니다.
NativeAd2ViewBinder binder = new NativeAd2ViewBinder.Builder()
        .nativeAd2View(nativeAd2View)
        .mediaView(mediaView)
        .titleTextView(titleTextView)
        .descriptionTextView(descriptionTextView)
        .iconImageView(iconImageView)
        .ctaView(ctaView)
        .build("YOUR_NATIVE_UNIT_ID");

binder.addNativeAd2StateChangedListener(new NativeAd2StateChangedListener() {
    @Override
    public void onRequested() {
    }
    
    @Override
    public void onNext(NativeAd2 nativeAd2) {
        // (5) BuzzAdNative.AdLoadListener.onAdLoaded() 작업을 여기로 옮깁니다.
    }

    @Override
    public void onComplete() {
    }

    @Override
    public void onError(@NonNull AdError adError) {
        // (6) BuzzAdNative.AdLoadListener.onLoadFailed() 작업을 여기로 옮깁니다.
    }
});

binder.bind();

고급 설정

주요 변경사항

  • NativeAd 대신 NativeAd2를 통해 광고 정보를 가져옵니다.
  • NativeAdEventListener 대신 NativeAd2EventListener를 광고 이벤트 리스너 등록에 사용합니다.

대체 메서드

기존 네이티브네이티브 2.0
NativeAd.addNativeAdEventListener()NativeAd2ViewBinder.addNativeAd2EventListener()

기존 네이티브 구현 예시

final NativeAdViewBinder viewBinder = new NativeAdViewBinder.Builder(nativeAdView, mediaView)
    .titleTextView(titleTextView)
    .descriptionTextView(descriptionTextView)
    .iconImageView(iconImageView)
    .ctaView(ctaView)
    .build();

// (1) bind 이후에 호출하던 이벤트 리스너 등록 메서드를 bind 이전에 호출하도록 변경해야 합니다.
viewBinder.bind(nativeAd);

// (2) NativeAd 대신 NativeAd2ViewBinder에 이벤트 리스너를 등록합니다.
nativeAd.addNativeAdEventListener(new NativeAdEventListener() {
    @Override
    public void onImpressed(@NonNull NativeAd nativeAd) {
        // (3) `NativeAd` 대신 `NativeAd2`를 통해 광고에 대한 정보를 가져올 수 있습니다.
    }

    @Override
    public void onClicked(@NonNull NativeAd nativeAd) {
    }

    @Override
    public void onRewardRequested(@NonNull NativeAd nativeAd) {
    }

    @Override
    public void onRewarded(@NonNull NativeAd nativeAd, @Nullable RewardResult rewardResult) {
    }

    @Override
    public void onParticipated(@NonNull NativeAd nativeAd) {
     }
});

네이티브 2.0 구현 예시

NativeAd2ViewBinder binder = new NativeAd2ViewBinder.Builder()
        .nativeAd2View(nativeAd2View)
        .mediaView(mediaView)
        .titleTextView(titleTextView)
        .descriptionTextView(descriptionTextView)
        .iconImageView(iconImageView)
        .ctaView(ctaView)
        .build("YOUR_NATIVE_UNIT_ID");

binder.addNativeAd2StateChangedListener(new NativeAd2StateChangedListener() {
    @Override
    public void onRequested() {
    }
    // ...생략
});

// (1) bind를 호출하기 전에 addNativeAd2EventListener를 호출합니다.
// (2) `NativeAd` 대신 `NativeAd2ViewBinder`에 이벤트 리스너를 등록합니다.
// 로그 기록, 단순 알림 외에 다른 동작을 추가하는 것을 권장하지 않습니다. 직접 구현한 동작이 네이티브에서 제공하는 기능(광고 자동 갱신 등)과 충돌할 수 있습니다.
binder.addNativeAd2EventListener(new NativeAd2EventListener() {
    @Override
    public void onImpressed(@NonNull NativeAd2 nativeAd2) {
        // (3) `NativeAd` 대신 `NativeAd2`를 통해 광고에 대한 정보를 가져올 수 있습니다.
    }

    @Override
    public void onClicked(@NonNull NativeAd2 nativeAd2) {
    }

    @Override
    public void onRewardRequested(@NonNull NativeAd2 nativeAd2) {
    }

    @Override
    public void onRewarded(@NonNull NativeAd2 nativeAd2, @NonNull RewardResult rewardResult) {
    }

    @Override
    public void onParticipated(@NonNull NativeAd2 nativeAd2) {
    }
});

binder.bind();

✏️  참고
리워드 적립 결과(RewardResult) 종류는 리워드 적립 결과(RewardResult) 종류를 참고하세요.