...
Code Block |
---|
|
public class CustomFeedHeaderViewAdapter implements FeedHeaderViewAdapter {
@Override
public View onCreateView(final Context context, final ViewGroup parent) {
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return inflater.inflate(R.layout.your_feed_header_layout, parent, false);
}
@Override
public void onBindView(final View view, final int reward) {
// Display total reward on the header if needed.
valfinal TextView textView: TextView = view.findViewById(R.id.your_textview);
textView.text = setText(String.format("리워드 %d원", reward));
}
@Override
public void onDestroyView() {
// Use this this callback for clearing memory
}
} |
...
뷰 레이아웃(view_customized_cta.xml
)을 구현하세요.
다음은 레이아웃 리소스로 뷰 레이아웃을 구현한 예시입니다.
Code Block |
---|
|
<!-- view_customized_cta.xml -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
<!-- CTA 버튼의 텍스트 -->
<TextView
android:id="@+id/textCta">
<!-- CTA 버튼의 아이콘 이미지 -->
<ImageView
android:id="@+id/imageReward"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="아이콘 이미지 리소스" />
<!-- CTA 버튼의 리워드 텍스트 -->
<TextView
android:id="@+id/textReward">
</LinearLayout> |
CtaView
클래스를 상속하는 서브클래스인 CustomCtaView
를 생성하세요.
CtaView
클래스에서 사용하던 CTA View 레이아웃을 inflate
하도록 구현하세요.
사용자의 광고 참여 상태에 따라 호출되는 아래의 오버라이딩 메소드에서 CTA 버튼의 아이콘 이미지, 텍스트, 리워드 값을 구현하세요.
renderViewParticipatingState
: 사용자가 광고에 참여 중인 상태 (예: 액션형 광고의 랜딩 페이지에 진입한 상태)
renderViewParticipatedState
: 사용자가 광고 참여를 완료한 상태
renderViewRewardAvailableState
: 사용자가 아직 광고에 참여하지 않은 상태
renderViewRewardNotAvailableState
: 사용자가 획득할 리워드가 없는 광고
Code Block |
---|
|
public class CustomCtaView extends CtaView {
private final ImageView rewardImageView;
private final TextView rewardTextView;
private final TextView ctaTextView;
public CustomCtaView(@NonNull Context context) {
this(context, null);
}
public CustomCtaView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomCtaView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO: 기존에 사용하던 CTA View 레이아웃을 inflate 하도록 구현하세요.
inflate(getContext(), R.layout.view_customized_cta, this);
this.rewardImageView = findViewById(R.id.imageReward);
this.rewardTextView = findViewById(R.id.textReward);
this.ctaTextView = findViewById(R.id.textCta);
}
// CTA 텍스트 설정
public void setCtaText(String ctaText) {
ctaTextView.setText(ctaText);
}
// CTA 리워드 값 설정
public void setRewardText(String rewardText) {
rewardTextView.setText(rewardText);
}
// CTA 아이콘 설정
public void setRewardIcon(@DrawableRes int iconResId) {
rewardImageView.setImageResource(iconResId);
rewardImageView.setVisibility(View.VISIBLE);
}
// CTA 아이콘 숨기기 처리
public void hideRewardIcon() {
rewardImageView.setVisibility(View.GONE);
}
// 사용자가 광고에 참여 중인 상태
@Override
public void renderViewParticipatingState(@NonNull String callToAction) {
setCtaText("참여 확인 중");
hideRewardIcon();
setRewardText("");
}
// 사용자가 광고 참여를 완료한 상태
@Override
public void renderViewParticipatedState(@NonNull String callToAction) {
setRewardIcon(R.drawable.my_participated_icon);
setRewardText("");
setCtaText("참여 완료");
}
// 사용자가 아직 광고에 참여하지 않은 상태
@Override
public void renderViewRewardAvailableState(@NonNull String callToAction, int reward) {
setRewardIcon(R.drawable.my_reward_icon);
setRewardText(String.format(Locale.US, "+%,d", reward));
setCtaText(callToAction);
}
// 사용자가 획득할 리워드가 없는 광고
@Override
public void renderViewRewardNotAvailableState(@NonNull String callToAction) {
hideRewardIcon();
setRewardText("");
setCtaText(callToAction);
}
} |
새로 생성한 CustomCtaView
클래스의 경로를 Feed 광고 레이아웃에 설정하세요.
다음은 Feed 광고의 레이아웃 예시입니다.
Code Block |
---|
|
<com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView
android:id="@+id/native_ad_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"/>
<!-- TODO: 새로 생성한 CustomCtaView 클래스 경로를 설정합니다. -->
<com.your.packagename.CustomCtaView
android:id="@+id/customCtaView"/>
</com.buzzvil.buzzad.benefit.presentation.nativead.NativeAdView> |
다음 순서에 따라 직접 구현한 CTA 버튼을 Feed 광고에 반영하세요.
Feed 광고 레이아웃에서 NativeAdView
와 커스텀 CTA 버튼인 CustomCtaView
를 가져오세요.
loadAd()
메소드를 호출한 후 Feed 광고가 성공적으로 할당되어 onAdLoaded
콜백 메소드가 호출되면, NativeAdViewBinder
의 ctaView
속성을 customCtaView
로 설정하세요.
bind()
를 호출하여 광고 레이아웃에 광고 데이터를 광고 디자인 자체 구현하기를 참고하여 CustomAdsAdapter
를 구현하세요.
CustomAdsAdapter.onBindViewHolder
에서 CustomCtaView
를 객체화하세요.
NativeAdViewBinder.Builder
에 새로 생성한 CustomCtaView
를 바인딩하세요.
Code Block |
---|
|
//class TODO: Feed 광고 레이아웃에서 NatieAdView와 구성 요소를 가져옵니다CustomAdAdapter: AdsAdapter<AdsAdapter.NativeAdViewHolder>() {
// 생략...
final
NativeAdView nativeAdViewoverride =fun findViewById(R.id.your_native_ad_view);
//... 생략 ...
// TODO: Feed 광고 레이아웃에서 CustomCtaView를 가져옵니다.
final CustomCtaView customCtaView = nativeAdViewonBindViewHolder(holder: NativeAdViewHolder, nativeAd: NativeAd) {
super.onBindViewHolder(holder, nativeAd)
// 생략...
val customCtaView: CustomCtaView = view.findViewById(R.id.customCtaView);
final NativeAdRequest nativeAdRequest = new NativeAdRequest.Builder().build();
final BuzzAdNative buzzAdNative = new BuzzAdNative("YOUR_NATIVE_UNIT_ID");
buzzAdNative.loadAd(nativeAdRequest, new BuzzAdNative.AdLoadListener() {val viewBinder: NativeAdViewBinder = NativeAdViewBinder.Builder(view, mediaView)
// 생략...
.ctaView(customCtaView)
@Override public void onAdLoaded(@NotNull NativeAd nativeAd) {.build()
viewBinder.bind(nativeAd)
}
// 할당된 광고가 있으면 호출됩니다.} |
Info |
---|
SDK에서 제공하는 DefaultCtaView 로 구현한 CTA 버튼의 디자인을 변경하려면 CTA 버튼 커스터마이징하기 토픽을 참고하세요. |
광고 미할당 안내 디자인 자체 구현하기
Feed 지면에 진입한 시점에 노출할 광고가 없다면 광고 미할당 안내 UI가 표시됩니다. 미할당 안내 디자인은 자체 구현하여 변경할 수 있습니다.
...
광고 미할당 안내 디자인을 직접 구현하려면 다음의 절차를 따르세요.
Feed 지면에 광고가 할당되지 않았을 때의 화면에 추가할 에러 이미지(feedErrorImageView
), 타이틀(feedErrorTitle
), 상세 설명(feedErrorDescription
) 레이아웃을 작성하세요.
Code Block |
---|
<!-- custom_feed_error_view.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="40dp">
<ImageView
android:id="@+id/feedErrorImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/feedErrorTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="32dp"
android:textColor="@color/bz_text_emphasis"
android:textSize="16sp" />
<TextView
android:id="@+id/feedErrorDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:textAlignment="center"
android:textColor="@color/bz_text_description"
android:textSize="14sp" />
</LinearLayout> |
FeedErrorViewHolder
를 구현하는 커스텀 클래스 CustomErrorView
를 새로 생성하고, 자동 완성되는 GetView()
메소드를 다음과 같이 구현하세요.
Code Block |
---|
public class CustomErrorView extends FeedErrorViewHolder {
@NonNull
@Override
public View getErrorView(@NonNull Activity activity) {
// TODO: 1번에서 생성한 custom_feed_error_view 레이아웃을 inflate
View errorView = activity.getLayoutInflater().inflate(R.layout.custom_feed_error_view, null, false);
final ImageView errorImageView = errorView.findViewById(R.id.feedErrorImageView);
final TextView errorTitle = errorView.findViewById(R.id.feedErrorTitle);
final TextView errorDescription = errorView.findViewById(R.id.feedErrorDescription);
errorImageView.setImageResource(R.drawable.bz_ic_feed_profile_coin); // 에러 이미지 설정
errorTitle.setText("타이틀: 광고가 없습니다. "); // 에러 |
TODO:광고데이터를바인딩할때,ctaView속성을customCtaView로설정합니다. errorDescription.setText("디스크립션: 할당된 광고가 없습니다!"); // 에러 |
finalNativeAdViewBinderviewBinder=newNativeAdViewBinder.Builder(nativeAdView,mediaView).titleTextView(titleTextView)FeedConfig
의 feedErrorViewHolderClass
속성에 이전 단계에서 생성한 CustomErrorView
클래스를 추가하세요.
.descriptionTextView(descriptionTextView)
.iconImageView(iconImageView)
.ctaView(customCtaView)// TODO: feedErrorViewHolderClass 속성에 2번에서 생성한 CustomErrorView 클래스를 설정합니다.
final FeedConfig feedConfig = new FeedConfig.Builder(YOUR_FEED_UNIT_ID)
. |
buildfeedErrorViewHolderClass(CustomErrorView.class) |
;viewBinder.bind(nativeAd);}
//.. 생략 ...
});
...
사용자 프로필 입력 배너 노출 여부 설정하기
사용자가 출생연도 또는 성별 정보를 제공하지 않으면 헤더 영역에 프로필 정보를 입력하는 배너가 기본적으로 노출됩니다.
...