Android를 위한 BuzzAdPush SDK 개발 시작하기
BuzzAdPush SDK를 안드로이드에 연동하기 위한 문서입니다.
BuzzAdPush는 BuzzAd의 광고 상품 중 하나로 Notification 을 통해 유저가 Feed 지면에 진입할 수 있도록 도와줍니다.
유저가 잠금화면, Pop 등 앱의 별도 서비스를 사용할 때만 Push를 enable하도록 하는 것을 권장합니다.
SDK를 앱에 연동하기 전, 아래 사항을 먼저 준비해야 합니다.
Buzzvil의 BD 매니저를 통해 전달받은 app_id와 unit_id
Buzzvil 서버로부터 포인트 적립 요청을 받을 수 있는 매체사 API 서버 - 포인트 postback API 연동문서
Postback 수신 url 세팅 후 Buzzvil BD 매니저에게 전달
테스트/라이브 하기 전 유저에게 제공할 Push를 받을 시간 옵션과 각 시간별 Push에 노출할 메세지를 BD 매니저에게 전달해주셔야 합니다. 따로 설정하지 않을 시 디폴트 시간 옵션과 메세지가 노출됩니다.
Prerequisite
Android Studio 3.2 혹은 그 이상
minSdkVersion
16 혹은 그 이상compileSdkVersion
30 혹은 그 이상
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:2.19.+" }
BuzzAdPush는 BuzzAdBenefit SDK에 통합되어 배포되고 있습니다.
build.gradle
: app Module - compileOptions 해결
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } …
Step 2: BuzzAdBenefit SDK 초기화
BuzzAdBenefit SDK에 통합되어 관리되고 있기 때문에 Push을 초기화 하기 위해서 BuzzAdBenefit을 초기화 해야 합니다. 초기화 코드는 앱 실행시 한번만 실행하면 됩니다. 아래 코드는 init()
함수를 Application에서 호출해 주는 코드의 예시입니다.
RestartReceiver 에서도 사용하므로 Application 클래스에 static 함수로 구현합니다.
PushDialogConfig
설정: PushDialog 관련 config 입니다.colorConfirm
: 확인버튼 색상 color resource idcolorCancel
: 취소버튼 색상 color resource idimageRegisterLogo
: register dialog 로고 이미지 drawable resource idimageUnregisterLogo
: unregister dialog 로고 이미지 drawable resource id
package ... import ... import com.buzzvil.buzzad.benefit.BuzzAdBenefit; import com.buzzvil.buzzad.benefit.BuzzAdBenefitConfig; public class App extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(this) .build(); BuzzAdBenefit.init(this, buzzAdBenefitConfig); } 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(); } }
Step 4. BuzzAdPush SDK 초기화
UNIT_ID_PUSH
BuzzAdPush 초기화
unitId
: Push unit idnotificationWorkerClass
:CustomNotificationWorker
pushDialogConfig
: PushDialog 관련 config
String UNIT_ID_PUSH = "UNIT_ID_PUSH"; BuzzAdPush buzzAdPush = new BuzzAdPush( UNIT_ID_PUSH, CustomNotificationWorker.class, App.getPushDialogConfig() );
Register
Push 를 활성화 하기 위해서buzzAdPush.registerWithDialog() or buzzAdPush.register()
를 호출합니다. 한번 활성화 하면 설정된 시간에 광고 Notification 을 보여주게 됩니다.
FeedConfig
설정: FeedConfig 를 설정합니다.feedToolbarHolderClass
: 피드의 타이틀을 설정합니다. 자세한 내용은 toolbar customize를 확인해주세요.
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) .feedToolbarHolderClass(CustomFeedToolbarHolder::class.java) .build(); final RewardNotificationConfig rewardNotificationConfig = new RewardNotificationConfig.Builder().build(); return new NotificationConfig.Builder(App.UNIT_ID_PUSH) .putExtra(FeedActivity.EXTRA_CONFIG, feedConfig) .build(); } }
그림 1. register 설명 다이얼로그 그림 2. register(시간설정) 다이얼로그
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 하는 방법을 소개합니다.