...
Pop 디자인 customize 관련 자세한 사항은 Pop 디자인 가이드 문서에서 확인 가능합니다.
[
...
Feed의 광고 리스트 아이템 뷰를 커스터마이징하고 광고 이벤트에 대한 콜백을 등록할 수 있습니다.
AdsAdapter
를 상속받는 class 를 구현합니다.
...
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);
}
});
}
} |
...
FeedConfig
빌드 시점에 해당 AdsAdapter
class 를 지정합니다.
Code Block | ||
---|---|---|
| ||
final FeedConfig feedConfig = new FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
...
.adsAdapterClass(CustomAdsAdapter.class)
.build(); |
[Ad] CTA Color 변경
여기에서는 CTA color 변경을 설명합니다. Color 변경 외에 CtaView를 Default로 제공되는 View가 아닌, 다른 모양의 View로 만들고 싶으신 경우, 아래의 ‘CtaView (버튼) Customization’ 항목을 참조해주세요.
...
기본 Color
...
변경 된 Color
project 의 colors.xml 파일에 아래의 color resource 값을 추가 하면 CTA color 가 변경됩니다. (Benefit 의 모든 CTA Color 가 변경됩니다.)
benefit_native_bg_cta_button_normal
CTA 가 노출 됐을 때benefit_native_bg_cta_button_pressed
CTA 가 눌렸을 때benefit_native_bg_cta_button_disabled
CTA 가 비활성화 상태 일 때
Code Block | ||
---|---|---|
| ||
<resources>
...
<color name="benefit_native_bg_cta_button_normal">#1290FF</color>
<color name="benefit_native_bg_cta_button_pressed">#0072E1</color>
<color name="benefit_native_bg_cta_button_disabled">#DDDEDF</color>
</resources> |
[Ad] CtaView (버튼) Customization
CtaView를 Default로 제공되는 View가 아닌, 다른 모양의 View로 만들고 싶으신 경우 다음과 같이 설정을 진행하면 됩니다.
Code Block | ||
---|---|---|
| ||
@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();
...
// View를 상속받는 CustomCtaView class를 생성하여 원하는 모양의 CtaView를 사용 할 수 있습니다.
final CustomCtaView customizedCtaView = view.findViewById(R.id.customCtaView);
// 아래 정보를 이용하여 cta view를 업데이트
final String callToAction = nativeAd.getAd().getCallToAction();
final int reward = nativeAd.getAd().getReward(); // 주의사항 참조
final boolean participated = nativeAd.isParticipated();
// 다음과 같은 function을 CustomCtaView class에 생성하여 텍스트 및 아이콘을 업데이트 할 수 있습니다.
customizedCtaView.setCtaText(callToAction);
customizedCtaView.setRewardText(reward);
customizedCtaView.setRewardIcon(R.drawable.your_reward_icon);
customizedCtaView.setParticiapted(participated); // 참여 완료된 광고에 대해서 UI를 처리하는 부분
customizedCtaView.setBackgroundColor(Color.parseColor(“#3976FD”)); // 변경하려는 "색상코드"
...
final List<View> clickableViews = new ArrayList<>();
clickableViews.add(customizedCtaView);
...
nativeAdView.addOnNativeAdEventListener(new NativeAdView.OnNativeAdEventListener() {
...
@Override
public void onParticipated(@NonNull NativeAdView view, @NonNull NativeAd nativeAd) {
// 매체사 기획에 따라 UI 처리
// Customize 된 CtaView를 participated 상태에 맞게 업데이트
final boolean participated = nativeAd.isParticipated();
customizedCtaView.setParticipated(participated);
}
});
} |
※ 주의사항
유저가 적립을 받은지 시간이 얼마 지나지 않아서 리워드가 부여되지 않거나 또는 원래 광고 자체가 리워드를 가지고 있지 않은 경우가 있을 수 있습니다. 따라서 광고 레이아웃을 구성할 때 Ad Properties를 Assign 하는 과정에서 rewardImage와 rewardText에 대해서 reward > 0 인지 체크해서 리워드를 보여줄지 말지 결정하는 로직이 필요합니다 (아래의 샘플 코드 참조).
Code Block | ||
---|---|---|
| ||
if (reward > 0) {
customizedCtaVIew.showRewardImage(CtaView.ImageType.Default);
customizedCtaVIew.setRewardText(String.format(Locale.US, "+%d", reward));
} else {
customizedCtaVIew.showRewardImage(null);
customizedCtaVIew.setRewardText(null);
} |
[Preview Message] CustomPreviewMessage
...
methods | Description |
---|---|
| 피드 오픈 베이스 리워드 피드백을 보여줍니다. |
| 광고 적립 피드백을 보여줍니다. |
| 포또 Potto 한번 더 뽑기 피드백을 보여줍니다. |
| 포또 Potto 뽑기가 가능한 상태일 때를 알려주는 피드백을 보여줍니다. 해당 피드백은 한 번 만 노출됩니다. |
...