개요

이 문서에서 가이드 하는 내용은 BuzzAd SDK의 Feed 지면 이용 시 기획에 따라 선택적으로 적용할 수 있습니다.

개인정보 수집 동의 UI 설정

개인정보 보호법과 구글 정책에 따라, 개인정보 수집 및 사용에 대한 유저의 동의가 필요합니다. 미동의 시 Feed 지면을 이용할 수 없습니다. 버즈빌 SDK에서는 개인정보 수집 동의 UI를 제공하고 있으며 아래 그림에서 UI를 확인할 수 있습니다.

개인정보 수집 동의 UI와 관련한 API는 다음과 같습니다.

// 개인정보 수집 동의 UI를 보여주는 API
BuzzAdBenefit.getPrivacyPolicyManager().showContentUI(context, listener);

// 개인정보 수집 동의에 대해 `동의함`을 표시
BuzzAdBenefit.getPrivacyPolicyManager().grantConsent();
// 개인정보 수집 동의에 대해 `동의하지 않음`을 표시
BuzzAdBenefit.getPrivacyPolicyManager().revokeConsent();
// 개인정보 수집 동의에 `동의함` 여부를 확인
BuzzAdBenefit.getPrivacyPolicyManager().isConsentGranted();

동의를 받지 않은 상태에서는 Feed 지면을 이용할 수 없습니다.

앱에서 자체적으로 개인정보 수집 동의를 받고 있다면, 아래의 API를 통해 버즈빌의 개인정보 취급방침 동의 UI를 숨길 수 있습니다.

BuzzAdBenefit.getPrivacyPolicyManager().grantConsent();

FeedFragment를 사용하여 Feed 보여주기

기본적으로 제공되는 FeedActivity를 사용하는 방식을 권장하지만, Fragment로도 Feed 지면을 연동할 수 있습니다.

1. layout xml 에 다음과 같이 추가합니다.

<fragment
    android:id="@+id/feed_fragment"
    android:name="com.buzzvil.buzzad.benefit.presentation.feed.FeedFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. XML에 추가 후 코드에서 아래와 같이 init을 호출해야 합니다.

class MyActivity extends Actvity {
  private FeedHandler feedHandler;

  @Override
  public void onCreate() {
    super.onCreate();
    ...생략...
    
    // 광고를 새로 받기 위해 필요한 부분입니다.
    feedHandler = new FeedHandler(context, "YOUR_FEED_UNIT_ID");
    
    final FeedFragment feedFragment = (FeedFragment) getSupportFragmentManager().findFragmentById(R.id.feed_fragment);
    if (feedFragment != null) {
      feedFragment.init(YOUR_FEED_CONFIG);
    }
  }

  ...생략...
}

FeedFragment에서도 FeedActivity에서 제공하는 Customization 옵션 중 Toolbar를 제외한 AdsAdapter와 Header, Image 타입 광고의 경우 feedConfig에 추가하는 방식을 통해 Customize가 가능합니다.

Feed 무한 스크롤 기능 비활성화

마지막 광고까지 스크롤이 된 경우, 더 많은 광고를 보여줄 수 있도록 추가로 광고를 할당합니다. 이 기능을 원치 않는 경우에는 아래 코드를 통해 비활성화할 수 있습니다.

final FeedConfig feedConfig = new FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
    ...생략...
    .autoLoadingEnabled(false)
    .build();

광고 분류 기능: Tab 과 Filter

많은 광고 속에서 사용자가 보고 싶은 광고를 분류하여 볼 수 있도록, Tab과 Filter 기능이 기본으로 제공됩니다. Tab은 일반 광고와 쇼핑 적립형 광고를 구분하는 역할을 합니다. Filter는 보다 광고를 카테고리 별로 세분화하여 볼 수 있게 합니다. 이 기능들을 원하지 않는 경우, 이 문서에서 설명하는 방식으로 설정하여 사용하지 않게 할 수 있습니다.

Feed Tab 비활성화

FeedConfig를 생성할 때 tabUiEnabled(false) 를 호출하여 Tab을 사용하지 않게 할 수 있습니다.

final FeedConfig feedConfig = new FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
    ...생략...
    .tabUiEnabled(false)  // tab UI를 사용하고 싶지 않을 때, false로 설정합니다.
    .build();

Tab은 커스터마이징이 가능합니다. 이에 대해서는 다음 링크를 참조해 주세요.

Tab을 비활성화하면 Filter도 비활성화됩니다.

Filter 비활성화

Tab은 사용하지만 Filter는 사용하고 싶지 않은 경우, FeedConfig를 생성할 때 filterUiEnabled(false) 를 호출하면 됩니다.

final FeedConfig feedConfig = new FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
    ...생략...
    .filterUiEnabled(false)  // Filter UI를 사용하고 싶지 않을 때, false로 설정합니다.
    .build();

Filter는 커스터마이징이 가능합니다. 이에 대해서는 다음 링크를 참조해 주세요.

광고 미할당 안내 디자인 자체 구현하기

Feed 지면에 진입한 시점에 노출할 광고가 없다면 광고 미할당 안내 UI가 표시됩니다. 미할당 안내 디자인은 자체 구현하여 변경할 수 있습니다.

광고 미할당 안내 디자인을 직접 구현하려면 다음의 절차를 따르세요.

  1. Feed 지면에 광고가 할당되지 않았을 때의 화면에 추가할 에러 이미지(feedErrorImageView), 타이틀(feedErrorTitle), 상세 설명(feedErrorDescription) 레이아웃을 작성하세요.

    <!-- 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>
  2. FeedErrorViewHolder를 구현하는 커스텀 클래스 CustomErrorView를 새로 생성하고, 자동 완성되는 GetView() 메소드를 다음과 같이 구현하세요.

    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("타이틀: 광고가 없습니다. "); // 에러 타이틀 텍스트 설정
            errorDescription.setText("디스크립션: 할당된 광고가 없습니다!"); // 에러 상세 텍스트 설정
            
            return errorView;
        }
    }
  3. FeedConfigfeedErrorViewHolderClass 속성에 이전 단계에서 생성한 CustomErrorView 클래스를 추가하세요.

    // Feed 지면 초기화
    // TODO: feedErrorViewHolderClass 속성에 2번에서 생성한 CustomErrorView 클래스를 설정합니다.
    final FeedConfig feedConfig = new FeedConfig.Builder(YOUR_FEED_UNIT_ID)
                    .feedErrorViewHolderClass(CustomErrorView.class)
                    .build();

프로필 입력 배너

사용자의 출생년도와 성별 정보를 설정하지 않으면 Feed 상단에 프로필 정보 입력을 권장하는 배너가 표시됩니다. 이 배너를 원하지 않는 경우, 이 문서에서 설명하는 방법을 통해 비활성화할 수 있습니다.

사용자의 출생년도와 성별 정보를 입력하는 방법은 이 문서를 참고하시기 바랍니다.

프로필 입력 배너 비활성화

FeedConfig를 생성할 때 profileBannerEnabled(false) 를 호출하여 프로필 입력 배너가 보이지 않게 할 수 있습니다.

final FeedConfig feedConfig = new FeedConfig.Builder(context, "YOUR_FEED_UNIT_ID")
    ...생략...
    .profileBannerEnabled(false) // 프로필 배너를 노출하고 싶지 않을 때 false로 설정합니다.
    .build(); 

Feed 효율 높이기

Feed에 광고 지면을 추가하여 매출 증가를 노릴 수 있습니다.

액션형 광고의 랜딩 BottomSheet에 배너 광고 노출

액션형 광고가 랜딩되는 BottomSheet에 배너 광고를 추가할 수 있습니다.

배너 광고는 애드 네트워크(ADN)에서 내려오는 광고만 보여줍니다.

배너 광고 지면은 피드와 다른 별도의 지면이므로, 이를 사용하기 위해서는 별도의 Unit ID가 필요합니다. 버즈빌 담당자를 통해 BottomSheet의 배너 광고를 위한 Unit ID의 발급을 요청하시기 바랍니다.

아래 FeedConfig를 생성하는 코드에서 YOUR_FEED_BOTTOM_SHEET_UNIT_ID 부분에 발급 받은 배너 전용 Unit ID를 넣어줍니다.

private void initializeBuzzAdBenefit(Context context) {
    final FeedConfig feedConfig = new FeedConfig.Builder(context, YOUR_FEED_UNIT_ID)
        ...생략...
        .bottomSheetUnitId(YOUR_FEED_BOTTOM_SHEET_UNIT_ID)
        .build();
    final BuzzAdBenefitConfig buzzAdBenefitConfig = configBuilder
        .setFeedConfig(feedConfig)
        .build();
    BuzzAdBenefit.init(context, buzzAdBenefitConfig);
} 

애드 네트워크 설정

Feed 종료 시 인터스티셜 광고 지면이나 액션형 광고의 랜딩 BottomSheet에 배너 지면에 사용하는 광고는 애드 네트워크 광고 입니다. 애드 네트워크를 이용하기 위해서는 다음의 종속성 설정이 필요합니다.

dependencies {
    implementation("com.buzzvil.mediation:sdk-adfit:3.4.0.1")
    implementation("com.buzzvil.mediation:sdk-outbrain:3.9.2.1")
    implementation("com.buzzvil.mediation:sdk-five:1.1.0")
}

Pop 사용하기

아래 코드와 같이 FeedConfig를 생성할 때 Pop을 사용하도록 설정하면 Pop을 이용할 수 있습니다.

FeedConfig feedConfig = new FeedConfig.Builder(getApplicationContext(), YOUR_FEED_UNIT_ID)
        ...생략...
        .optInFeatureList(Collections.singletonList(OptInFeature.Pop))
        .build();
final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
        ...생략...
        .setFeedConfig(feedConfig)
        .build();
BuzzAdBenefit.init(this, buzzAdBenefitConfig);

이를 적용하면 Feed 지면에 Pop 옵트인 버튼이 노출됩니다. 자세한 사항은 여기에서 확인할 수 있습니다.