Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

해당 문서는 BuzzAd Ext.point SDK의 광고 지면 타입 중 하나인, Feed Type 을 연동하는 문서입니다. Feed Type 은 여러개의 광고를 쉽게 피드 형태로 노출할 수 있도록 별도의 지면으로 구성되어 있습니다. 일반적으로 Native Type 의 광고에서 더보기 버튼을 통해 진입하는 형태로 사용하고 있습니다.

...

위의 과정 중 완료되지 않은 항목이 있다면, 이전 단계의 연동을 먼저 완료해야 합니다.

...

연동하기

1. 기본 설정을 적용하여 구현하기

Feed Config 및 Feed Handler 설정하기

...

  • Preload 는 버즈빌 서버에 실제 광고 할당 요청을 진행합니다. 이후 피드를 진입하여 광고를 보여줄 경우, 다시 광고를 load 하는 것이 아닌, startFeedActivity() 를 통해 Preload 로 받아둔 광고를 보여줘야 합니다.

  • 하나의 FeedHandler 인스턴스에서 광고를 load/ preload 한 경우, 그 인스턴스는 계속 같은 광고를 들고 있게 됩니다. activity 에서 유저가 이탈 여부와 상관없이, 다시 같은 인스턴스에서 startFeedActivity()를 하는 경우 같은 광고 목록이 보입니다.

  • 피드에 진입할 때마다 새로 광고가 보이게 하려면, 새로운 FeedHandler 인스턴스를 만들어startFeedActivity()를 호출해야 합니다.

...

연동하기

2. 추가 설정, 기능을 적용하기

다음 항목에 대한 확인이 필요합니다.

  •  연동하기 - [1. 기본 설정을 적용하여 구현하기] 를 통해 기본 값으로 구현을 완료한 광고 지면에서 정상적으로 광고를 확인하고 참여할 수 있는지 확인

...

  • onCreateViewHolderonBindViewHolder 를 구현해 Feed 리스트에 보여줄 itemView 의 레이아웃 및 바인딩 로직을 커스터마이징합니다.

  • CtaView의 getCtaTextView() 및 getRewardImageView() 함수를 호출하여 CtaView에 보여지는 텍스트 및 리워드 이미지에 대한 customization을 할 수 있습니다. (좀 더 유연한 customization을 위해 View를 새로 만들고 싶은 경우에는 아래 CtaView Customization 참조)

  • (optional) onImpressedonClickedonRewardRequestedonRewardedonParticipated를 오버라이드하여 광고의 임프레션, 클릭, 리워드 요청, 리워드 지급 결과, 참여완료에 대한 이벤트 콜백을 받을 수 있습니다 (콜백의 정의 및 동작은 문서 참조동작은 광고 노출/클릭/참여와 관련한 콜백 변화 문서를 참고)

Code Block
languagejava
public class CustomAdsAdapter extends AdsAdapter<AdsAdapter.NativeAdViewHolder> {

    @Override
    public NativeAdViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        final NativeAdView feedNativeAdView = (NativeAdView) inflater.inflate(R.layout.bz_view_feed_ad, parent, false);
        return new NativeAdViewHolder(feedNativeAdView);
    }

    @Override
    public void onBindViewHolder(NativeAdViewHolder holder, NativeAd nativeAd) {
        final NativeAdView view = (NativeAdView) holder.itemView;

        final Ad ad = nativeAd.getAd();
        final Creative.Type creativeType = ad.getCreative() == null ? null : ad.getCreative().getType();

        final MediaView mediaView = view.findViewById(R.id.mediaView);
        final LinearLayout titleLayout = view.findViewById(R.id.titleLayout);
        final TextView titleView = view.findViewById(R.id.textTitle);
        final ImageView iconView = view.findViewById(R.id.imageIcon);
        final TextView descriptionView = view.findViewById(R.id.textDescription);
        final CtaView ctaView = view.findViewById(R.id.ctaView);
        ctaView.setBackgroundColor(Color.parseColor(“#3976FD”)); // (선택) 변경하려는 "색상코드"
        final CtaPresenter ctaPresenter = new CtaPresenter(ctaView); // CtaView should not be null
        ctaPresenter.bind(nativeAd);

        if (mediaView != null) {
            mediaView.setCreative(ad.getCreative());
            mediaView.setVideoEventListener(new VideoEventListener() 
                // Override and implement methods
            });
        }
        if (titleView != null) {
            titleView.setText(ad.getTitle());
        }

        if (iconView != null) {
            ImageLoader.getInstance().displayImage(ad.getIconUrl(), iconView);
        }
        if (descriptionView != null) {
            descriptionView.setText(ad.getDescription());
        }

        final Collection<View> clickableViews = new ArrayList<>();
        clickableViews.add(ctaView);
        clickableViews.add(mediaView);
        clickableViews.add(titleLayout);
        clickableViews.add(descriptionView);

        view.setMediaView(mediaView);
        view.setClickableViews(clickableViews);
        view.setNativeAd(nativeAd);
        view.addOnNativeAdEventListener(new NativeAdView.OnNativeAdEventListener() {
            @Override
            public void onImpressed(final @NonNull NativeAdView view, final @NonNull NativeAd nativeAd) {

            }

            @Override
            public void onClicked(@NonNull NativeAdView view, @NonNull NativeAd nativeAd) {

            }

            @Override
            public void onRewardRequested(@NonNull NativeAdView view, @NonNull NativeAd nativeAd) {

            }

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

            }

            @Override
            public void onParticipated(final @NonNull NativeAdView view, final @NonNull NativeAd nativeAd) {
                ctaPresenter.bind(nativeAd);
            }
        });
    }
}

...