해당 문서는 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. 기본 설정을 적용하여 구현하기] 를 통해 기본 값으로 구현을 완료한 광고 지면에서 정상적으로 광고를 확인하고 참여할 수 있는지 확인
...
onCreateViewHolder
,onBindViewHolder
를 구현해 Feed 리스트에 보여줄itemView
의 레이아웃 및 바인딩 로직을 커스터마이징합니다.CtaView의 getCtaTextView() 및 getRewardImageView() 함수를 호출하여 CtaView에 보여지는 텍스트 및 리워드 이미지에 대한 customization을 할 수 있습니다. (좀 더 유연한 customization을 위해 View를 새로 만들고 싶은 경우에는 아래 CtaView Customization 참조)
(optional)
onImpressed
,onClicked
,onRewardRequested
,onRewarded
,onParticipated
를 오버라이드하여 광고의 임프레션, 클릭, 리워드 요청, 리워드 지급 결과, 참여완료에 대한 이벤트 콜백을 받을 수 있습니다 (콜백의 정의 및 동작은 문서 참조동작은 광고 노출/클릭/참여와 관련한 콜백 변화 문서를 참고)
Code Block | ||
---|---|---|
| ||
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); } }); } } |
...