Skip to content
:docs

Migration

Learn how to migrate an existing Native (NativeAdView) integration to Native 2.0 (NativeAd2View).

Basic settings

Key changes

  • Use NativeAd2View instead of NativeAdView in the ad layout.
  • Native 2.0 automatically allocates and refreshes ads within the SDK, so the allocation classes BuzzAdNative and NativeAdRequest are no longer needed.

Replacement methods

Original NativeNative 2.0
BuzzAdNative.AdLoadListener.onAdLoaded()NativeAd2StateChangedListener.onNext()
BuzzAdNative.AdLoadListener.onLoadFailed()NativeAd2StateChangedListener.onError()

Original Native example

XML

<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>
Java
// (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()로 작업을 옮깁니다.
    }
});

Native 2.0 example

XML

<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>
Java
// (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();

Advanced settings

Key changes

  • Retrieve ad information through NativeAd2 instead of NativeAd.
  • Use NativeAd2EventListener instead of NativeAdEventListener to register ad event listeners.

Replacement methods

Original NativeNative 2.0
NativeAd.addNativeAdEventListener()NativeAd2ViewBinder.addNativeAd2EventListener()

Original Native example

Java
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) {
     }
});

Native 2.0 example

Java
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();