Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Android를 위한 BuzzAdPush SDK 개발 시작하기

BuzzAdPush SDK를 안드로이드에 연동하기 위한 문서입니다. BuzzAdPush는 BuzzAd의 광고 상품 중 하나로 Push를 광고 지면으로 이용해 광고를 유저에게 보여줍니다.

SDK를 앱에 연동하기 전, 아래 사항을 먼저 준비해야 합니다.

  • Buzzvil의 BD 매니저를 통해 전달받은 app_id와 unit_id

  • Buzzvil 서버로부터 포인트 적립 요청을 받을 수 있는 매체사 API 서버 - 포인트 postback API 연동문서

    • Postback 수신 url 세팅 후 Buzzvil BD 매니저에게 전달

  • 테스트/라이브 하기 전 유저에게 제공할 Push를 받을 시간 옵션과 각 시간별 Push에 노출할 메세지를 BD 매니저에게 전달해주셔야 합니다. 따로 설정하지 않을 시 디폴트 시간 옵션과 메세지가 노출됩니다.

Prerequisite

  • Android Studio 3.2 혹은 그 이상

  • minSdkVersion 15 혹은 그 이상

  • compileSdkVersion 29 혹은 그 이상


Index


Step 1: 설치

BuzzAdPush Sdk는 maven 를 통해 다운받으실 수 있습니다. 다음 코드를 build.gradle 에 추가해 주십시오.

build.gradle: Project

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://dl.bintray.com/buzzvil/maven/" }
    }
}

build.gradle: app Module

dependencies {
    implementation "com.buzzvil:buzzad-benefit-push:2.7.0"
    implementation 'com.android.support:multidex:1.0.3' 
}

BuzzAdPush는 BuzzAdBenefit SDK에 통합되어 배포되고 있습니다.

build.gradle: app Module - compileOptions 해결

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
…

Step 2: BuzzAdPush SDK 초기화

BuzzAdPop은 BuzzAdBenefit SDK에 통합되어 관리되고 있기 때문에 Pop을 초기화 하기 위해서 BuzzAdBenefit을 초기화 해야 합니다. 초기화 코드는 앱 실행시 한번만 실행하면 됩니다. 아래 코드는 init() 함수를 Application에서 호출해 주는 코드의 예시입니다.

  • APP_ID: 전달받은 app id 로 변경

  • UNIT_ID_PUSH: 전달받은 unit id 로 변경

package ...
import ...
import com.buzzvil.buzzad.benefit.BuzzAdBenefit;
import com.buzzvil.buzzad.benefit.BuzzAdBenefitConfig;

public class App extends MultiDexApplication {

    public static final String APP_ID = "APP_ID";
    public static final String UNIT_ID_PUSH = "UNIT_ID_PUSH";
    
    @Override
    public void onCreate() {
        super.onCreate();
        
        BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(APP_ID)
                .build();
        BuzzAdBenefit.init(this, buzzAdBenefitConfig);
    }
}

Step 3: 로그인

유저가 매체사 앱에 로그인한 시점에 아래와 같이 UserProfile 을 세팅합니다. 설정값 수정 시, 기존 user profile 값을 호출하여 수정 가능합니다.

주의 : User ID와 타게팅 정보 (성별, 연령)는 원활한 서비스 운영을 위해 제공해야 할 필수 항목입니다. 해당 값을 입력하는 setUserProfile 함수가 호출되지 않으면 광고가 제공되지 않습니다.

  • userId : 매체사 서비스 유저를 unique 하게 구분할 수 있는 식별값

    • 매체사 서비스에서 유니크하다고 판단되는 유저에 대하여, userId 값이 복수 개 연동되거나 변경될 가능성이 있을 경우 사전에 BD 매니저와 논의해야 합니다.

    • 예: 매체사 앱 삭제 후 재설치 시 userId 값이 변경되는 경우

  • gender

    • UserProfile.Gender.MALE: 남성

    • UserProfile.Gender.FEMALE: 여성

  • birthYear: 출생년도

final UserProfile.Builder builder = new UserProfile.Builder(BuzzAdBenefit.getUserProfile());
final UserProfile userProfile = builder
        .userId("Your_Service_User_ID")
        .gender(UserProfile.Gender.MALE)
        .birthYear(1985)
        .build();
  
BuzzAdBenefit.setUserProfile(userProfile);

로그아웃 시에는 UserProfile을 null로 설정해 주는 작업이 필요합니다.

BuzzAdBenefit.setUserProfile(null);

Step 4. Register/Unregister

그림 1. register 설명 다이얼로그 그림 2. register(시간설정) 다이얼로그

Register

Push 를 활성화 하기 위해서buzzAdPush.registerWithDialog() or buzzAdPush.register() 를 호출합니다. 한번 활성화 하면 설정된 시간에 광고 Notification 을 보여주게 됩니다.

  • FeedConfig 설정: FeedConfig 를 설정합니다.

    • feedToolbarHolderClass: 피드의 타이틀을 설정합니다. 자세한 내용은 toolbar customize를 확인해주세요.

    • closeToastEnabled: 피드를 나갈 때 ‘한번 더 클릭 시 종료된다’는 토스트를 띄웁니다.

  • RewardNotificationConfig 설정: Reward 를 받았을 때 보여주는 Notification 의 Config 를 설정합니다.

  • NotificationConfig 설정: Push 의 Notification 관련 config 를 설정합니다.

    • .putExtra(FeedActivity.EXTRA_CONFIG, feedConfig) 위에서 생성한 FeedConfig 를 설정합니다.

NotificationConfig 는 아래와 같이 NotificationWorker 를 상속받은 CustomNotificationWorker 클래스의 getNotificationConfig 함수를 오버라이딩 해서 설정합니다.

public class CustomNotificationWorker extends NotificationWorker {
    public CustomNotificationWorker(@NonNull Context context,
                                    @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @Override
    @NonNull
    public NotificationConfig getNotificationConfig() {
        final FeedConfig feedConfig = new FeedConfig.Builder(getApplicationContext(), App.UNIT_ID_NOTI_PLUS)
                .closeToastEnabled(true)
                .build();
        final RewardNotificationConfig rewardNotificationConfig = new RewardNotificationConfig.Builder().build();
        return new NotificationConfig.Builder(App.UNIT_ID_PUSH)
                .putExtra(FeedActivity.EXTRA_CONFIG, feedConfig)
                .build();
    }
}
  • PushDialogConfig 설정: PushDialog 관련 config 입니다.

    • colorConfirm: 확인버튼 색상 color resource id

    • colorCancel: 취소버튼 색상 color resource id

    • imageRegisterLogo: register dialog 로고 이미지 drawable resource id

    • imageUnregisterLogo: unregister dialog 로고 이미지 drawable resource id

  • RestartReceiver 에서도 사용하므로 Application 클래스에 static 함수로 구현합니다.

public class App extends MultiDexApplication {
    ...
    public static PushDialogConfig getPushDialogConfig() {
        return new PushDialogConfig.Builder()
                .colorConfirm(R.color.colorAccent)
                .colorCancel(R.color.colorPrimary)
                .imageRegisterLogo(R.drawable.benefit_push_dialog_image_logo)
                .imageUnregisterLogo(R.drawable.benefit_push_dialog_image_logo)
                .build();
    }
}
  • BuzzAdPush 초기화

    • unitId: Push unit id

    • notificationWorkerClass: CustomNotificationWorker

    • pushDialogConfig: PushDialog 관련 config

BuzzAdPush buzzAdPush = 
    new BuzzAdPush(
            App.UNIT_ID_PUSH,
            CustomNotificationWorker.class,
            App.getPushDialogConfig()
    );

1) Register with Description

Push 활성화 설명 다이얼로그(그림 1)가 먼저 보이고, 그 후에 Push Register(시간설정) 다이얼로그(그림 2)가 뜹니다.

buzzAdPush.registerWithDialog(this, new BuzzAdPush.OnRegisterListener() {
    @Override
    public void onSuccess() {
        switchAdNotiRegister.setChecked(true);
    }

    @Override
    public void onCanceled() {
        switchAdNotiRegister.setChecked(false);
    }
});

2) Register without Description

Push 설명 다이얼로그(그림 1)가 뜨지 않고, 바로 Push Register(시간설정) 다이얼로그(그림 2)가 뜹니다.

buzzAdPush.registerWithDialog(this, false, new BuzzAdPush.OnRegisterListener() {
    @Override
    public void onSuccess() {
        switchAdNotiRegister.setChecked(true);
    }

    @Override
    public void onCanceled() {
        switchAdNotiRegister.setChecked(false);
    }
});

Unregister

그림 3. unregister 다이얼로그

Push 를 비활성화 하기 위해서buzzAdPush.unregisterWithDialog() 를 호출합니다.

1) Unregister with Description

Push unregister 다이얼로그(그림 3)가 보이고 구독 취소를 누르면 unregister 합니다.

buzzAdPush.unregisterWithDialog(this, new BuzzAdPush.OnRegisterListener() {
    @Override
    public void onSuccess() {
        switchAdNotiRegister.setChecked(false);
    }

    @Override
    public void onCanceled() {
        switchAdNotiRegister.setChecked(true);
    }
});

Register 상태 확인

Push 가 활성화 상태인지 확인하기 위해 boolean isRegistered(Context context) 를 호출합니다.

buzzAdPush.isRegistered(context)

Step5. Restart receiver 등록

단말을 껐다켜거나 앱 업데이트 시, 다시 Push sdk 가 동작 할 수 있도록하는 BroadcastReciever 입니다

  • RestartReceiver class 생성

public class RestartReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())
                || Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction())) {
            final BuzzAdPush buzzAdPush = new BuzzAdPush(App.UNIT_ID_PUSH, CustomNotificationWorker.class, App.getPushDialogConfig());
            buzzAdPush.registerWorkerIfNeeded(context);
        }
    }
}
  • Manifest 등록

<manifest ... >
    ...
    <application ... >
        ...
        <receiver
            android:name=".RestartReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

Step 6. (Optional) CustomFeedAdsAdapter 사용: reward 적립 notification 사용 (NativeAdView.OnNativeAdEventListener 등록)

그림 4. reward 적립 notification

  • Application class 에 RewardNotification 을 BuzzAdPush 에서 가져오기 위해 static 함수를 등록합니다

public static RewardNotificationConfig rewardNotificationConfig;
public static RewardNotificationConfig getRewardNotificationConfig() {
    if (rewardNotificationConfig == null) {
        rewardNotificationConfig = new RewardNotificationConfig.Builder().build();
    }
    return rewardNotificationConfig;
}
  • DefaultAdsAdapter 를 상속받는 CustomFeedAdsAdapter 생성하고 onRewarded 를 아래와 같이 처리

public class CustomFeedAdsAdapter extends DefaultAdsAdapter {

    private final NativeAdView.OnNativeAdEventListener listener = new NativeAdView.OnNativeAdEventListener() {
        @Override
        public void onImpressed(final @NonNull NativeAdView view, final @NonNull NativeAd nativeAd) {
            Toast.makeText(view.getContext(), "onImpressed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onClicked(@NonNull NativeAdView view, @NonNull NativeAd nativeAd) {
            Toast.makeText(view.getContext(), "onClicked", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRewardRequested(@NonNull NativeAdView view, @NonNull NativeAd nativeAd) {
            Toast.makeText(view.getContext(), "onRewardRequested", Toast.LENGTH_SHORT).show();
        }
        
        @Override
        public void onRewarded(@NonNull NativeAdView nativeAdView, @NonNull NativeAd nativeAd, @Nullable RewardResult rewardResult) {
            Toast.makeText(nativeAdView.getContext(), "onRewarded: " + rewardResult, Toast.LENGTH_SHORT).show();
            if (rewardResult == RewardResult.SUCCESS) {
                BuzzAdPush.showRewardNotification(nativeAdView.getContext(), App.getRewardNotificationConfig(), nativeAd.getAd().getReward());
            }
        }

        @Override
        public void onParticipated(final @NonNull NativeAdView view, final @NonNull NativeAd nativeAd) {
            Toast.makeText(view.getContext(), "onParticipated", Toast.LENGTH_SHORT).show();
        }
    };

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

    @Override
    public NativeAdViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return super.onCreateViewHolder(parent, viewType);
    }
}
  • CustomNotificationWorker.getNotificationConfig 를 아래와 같이 변경

@Override
@NonNull
public NotificationConfig getNotificationConfig() {
    final FeedConfig feedConfig = new FeedConfig.Builder(App.UNIT_ID_PUSH)
            .adsAdapterClass(CustomFeedAdsAdapter.class)
            .build();
    return new NotificationConfig.Builder(App.UNIT_ID_PUSH)
            .putExtra(FeedActivity.EXTRA_CONFIG, feedConfig)
            .build();
}

Customize

Customize 페이지 에서 Customize 하는 방법을 소개합니다.

  • No labels