PedometerPop은 PedometerePop 은 만보기를 기본으로 하는 Pop 을 사용할 수 있게 해주는 feature 입니다.
Info |
---|
Buzz-Pedometer를 연동하실 때는, 아래 BuzzAd-Benefit과의 호환성을 참고해 연동 부탁드립니다. BuzzAd-Benefit 2.7.+ Buzz-Pedometer 1.2.0-hotfix.2 BuzzAd-Benefit 2.9.+ Buzz-Pedometer 1.2.1-hotfix.2 BuzzAd-Benefit 2.11.+ Buzz-Pedometer 1.2.6 |
Info |
---|
PedometerPop 을 사용하기 위해선 Pop 초기화를 마친 상태여야 합니다. |
...
<그림 1> PedometerPop feature PedometerePop 을 사용하기 위해선 Pop 초기화를 마친 상태여야 합니다.
...
<그림 1> PedometerPop feature 사용을 설정했을 때 Pop 피드의 모습
...
<그림 2> PedometerPop feature 를 활성화했을 때 Pop
Initialization
...
Step 1. Add
...
pedometetr feature module
application level build.gradle
에 만보기 모듈을 추가합니다.
Code Block |
---|
implementation 'com.buzzvil:buzz-pedometer:x.y.z' |
Info |
---|
buzzad-benefit:2.1112.+ 를 사용하는 경우 buzz-pedometer:1.23.+ 사용 |
Step2. (Optional) Manifest settings for project with minSdk less than 19
발생할 수 있는 빌드 에러
...
Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 19 declared in library [:feature:buzz-pedometer]
가 발생했습니다.
-> minSdk가 19 미만의 경우, AndroidManifest.xml 에 아래와 같이 설정해야합니다.
Code Block |
---|
<uses-sdk tools:overrideLibrary="com.buzzvil.pedometer" /> |
AndroidManifest 에 이미 사용 중인 overrideLibrary 가 있다면 다음과 같이 추가할 수 있습니다.
...
buzzad-benefit:2.13.+ 이후인 경우는, buzzad-benefit 와 동일한 버전 사용 |
<그림 3> Pop Interstitial Ad
...
Step 2. Set pedometer config
Application class 에서 BuzzAdBenefit.init
할 때
pedometerConfig: 위 unitId 설정
발급받은 Pedometer unitId 2개 를 benefit 초기화 시 설정합니다.
UNIT_ID_PEDOMETER
: 만보기 리워드 적립을 하는 fragment에서의 광고 유닛UNIT_ID_PEDOMETER_REWARD
: 만보기 마일스톤을 눌렀을 때 나오는 bottom sheet dialog 광고 유닛(Optional)
pedometerIntroUnitId
를 통해UNIT_ID_PEDOMETER_INTRO
를 설정합니다. 이 UnitId 가 설정되어있으면 적립이 가능할 때 Intro 광고 <그림 3> 노출
feedConfig: <그림 1> 과 같이 feed 에 Pedometer 관련 내용을 보여주기 위해
feedHeaderViewAdapterClass
설정popConfig:
popMode
를PopMode.PEDOMETER_POP
로 설정(Optional)Pop 의 Exit 광고 <그림 3> 도
popExitUnitId
를 통해 설정 가능
Code Block |
---|
final FeedConfig feedConfig = new FeedConfig.Builder(getApplicationContext(), UNIT_ID_POP) ... .feedHeaderViewAdapterClass(DefaultPedometerPopHeaderViewAdapter.class) ... .build(); final PedometerConfig pedometerConfig = buildPedometerConfig(); final PopConfig popConfig = new PopConfig.Builder(getApplicationContext(), UNIT_ID_POP) ... .popMode(PopConfig.PopMode.PEDOMETER_POP) .pedometerConfig(pedometerConfig) .popExitUnitId(App.unitIdPedometerPopExit) // Optional ... .build(); final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(this) .add(popConfig) .build(); BuzzAdBenefit.init(this, buzzAdBenefitConfig); @NotNull private PedometerConfig buildPedometerConfig() {) return new PedometerConfig .add(popConfig) .build(); BuzzAdBenefit.Builder(UNIT_ID_PEDOMETER, UNIT_ID_PEDOMETER_REWARD) init(this, buzzAdBenefitConfig); @NotNull private PedometerConfig buildPedometerConfig() { .pedometerIntroUnitId(UNIT_ID_PEDOMETER_INTRO) // Optionalreturn new PedometerConfig .buildBuilder(getApplicationContext(); } |
Step4. Initialize Pop Pedometer
Application class onCreate
에 sessionReadyReceiver
를 등록합니다. 세션이 준비되면 만보기를 초기화합니다.
Code Block |
---|
@Override public void onCreate() {, UNIT_ID_PEDOMETER, UNIT_ID_PEDOMETER_REWARD) super.onCreate(); initBuzzAdBenefit();.pedometerIntroUnitId(UNIT_ID_PEDOMETER_INTRO) // Optional BuzzAdBenefit.registerSessionReadyBroadcastReceiver(this, sessionReadyReceiver); } private BroadcastReceiver sessionReadyReceiver = new BroadcastReceiver.build() { @Override ; } |
Step 3. Initialize Pop Pedometer
Application class onCreate
에 sessionReadyReceiver
를 등록합니다. 세션이 준비되면 만보기를 초기화합니다.
Code Block |
---|
@Override public void onReceive(Context context, Intent intentonCreate() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { super.onCreate(); initBuzzAdBenefit(); initPedometer(contextBuzzAdBenefit.registerSessionReadyBroadcastReceiver(this, sessionReadyReceiver); } private BroadcastReceiver sessionReadyReceiver = } else new BroadcastReceiver() { @Override public void Log.d(TAG, "BuzzAdPopPedometer failure, needs Build.VERSION_CODE >= 19");onReceive(Context context, Intent intent) { }initPedometer(context); Log.d(TAG, "Session is Ready. Ads can be loaded now."); } @RequiresApi(api = Build.VERSION_CODES.KITKAT) private void initPedometer(Context context) { Log.d(TAG, "Session is Ready. initPedometer"); if (popConfig.getPedometerConfig() != null) { BuzzAdPopPedometer.init(context, "APP_ID", "UNIT_ID_POP"); } } }; |
Step
...
4. Get physical activity recognition and OverlayPermission
Android 10 (Q, API 29) 부터는 신체 활동 감지 권한이 필요하도록 필요하게 변경됐습니다. 앱에서 PedometerPop PedometerLight feature 를 활성화할 때 권한을 얻어야 합니다.
...
showPop 을 호출하기 전에
requestActivityRecognitionPermissionIfNeeded
함수를 통해 신체 활동 감지 권한이 있는 지 확인하고 없으면 권한을 요청Code Block private boolean requestActivityRecognitionPermissionIfNeeded(Activity activity) { if (activity != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED) { requestActivityRecognitionPermission(activity); return true; } } return false; } @TargetApi(Build.VERSION_CODES.Q) private void requestActivityRecognitionPermission(Activity activity) { if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACTIVITY_RECOGNITION)) { if (!activity.isFinishing()) { new AlertDialog.Builder(activity) .setTitle(R.string.pop_pedometer_dialog_permission_title) .setMessage(R.string.pop_pedometer_dialog_permission_description) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, ACTIVATION_REQUEST_CODE); } }).show(); } } else { requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, ACTIVATION_REQUEST_CODE); } }
권한이 획득 되면
onRequestPermissionsResult
를 통해서 결과를 받고 다음 step(overlay permission 획득) 진행Code Block @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case ACTIVATION_REQUEST_CODE: { if ((grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)) { showPopOrRequestOverlayPermissionIfNeeded(); } else { pedometerPopSwitch.setChecked(false); } } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
Overlay 권한 획득
Code Block private void showPopOrRequestOverlayPermissionIfNeeded() { if (BuzzAdPop.hasPermission(MainActivity.this) || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { showPop(); } else { BuzzAdPop.requestPermissionWithDialog(MainActivity.this, new PopOverlayPermissionConfig.Builder(R.string.pop_name) .settingsIntent(OverlayPermission.createIntentToRequestOverlayPermission(MainActivity.this)) .requestCode(REQUEST_CODE_SHOW_POP) .build() ); } }
위 스탭들을 통해서 신체 감지 권한 및 OverlayPermission 권한을 획득했다면 Activity.onCreate 에 아래 코드를 넣어 주면 activatePedometerPop 을 자동으로 호출
Code Block // Activity.onCreate if (getIntent().getBooleanExtra(KEY_SETTINGS_RESULT, false) && getIntent().getIntExtra(KEY_SETTINGS_REQUEST_CODE, 0) == REQUEST_CODE_SHOW_POP) { if (BuzzAdPop.hasPermission(this)) { buzzAdPop.showTutorialPopup(this); // overlay permission granted // collect event here if necessary activatePedometerPop(); } } private void activatePedometerPop() { BuzzAdPopPedometer.activate(); }
Step
...
5. Final Step
App 실행 → PedometerPop 활성화 → 신체 감지 권한 획득 → OverlayPermission OverlayPermissoin 획득 → BuzzAdPopPedometer.activate() → showPop → PedometerPop 기능을 사용할 수 있습니다.
Customization
PedometerConfig
PedometerConfig
를 통해서 아래 이미지의 내용(이미지, 컬러, 문구스트링)을 변경할 수 있습니다
...
No. 는 위 그림의 customize 가능한 영역의 숫자를 뜻합니다. unitId
, rewardUnitId
는 필수이며 필수고 나머지는 optional optioinal 입니다.
No. | Parameter | Description |
---|---|---|
8 |
| Pedometer fragment 에서 사용하는 광고 Unit Id |
11 |
| Pedometer bottom sheet(리워드 정보 화면)에서 사용하는 광고 Unit Id |
<그림 3> |
| 적립 가능 할 때 Pedometer fragment 진입 시 사용하는 광고 Unit id |
1 |
toolbarTitleResId
| Pedometer fragment 툴바에 표시되는 title |
2 |
| Pedometer fragment 툴바의 튜토리얼 버튼을 눌렀을 때 이동할 url 주소 |
3 |
milestoneProgressGuideColorResId
| Pedometer fragment 마일스톤 Progress Guide Color |
4 |
milestoneProgressColorResId
| Pedometer fragment 마일스톤 Progress Color |
5 |
| Pedometer fragment 마일스톤 적립 가능할 때 보이는 Icon resource id |
6 |
rewardAvailableTextColorId
| Pedometer fragment 마일스톤 적립 가능할 때 표시되는 Text Color |
7 |
rewardAvailableBackgroundId
| Pedometer fragment 마일스톤 적립 가능할 때 표시되는 Text Background |
Resource Id | ||
9 |
| Pedometer bottom sheet 마일스톤 적립 가능할 때 보이는 image resource id |
10 |
bottomSheetSuccessStringResId
| Pedometer bottom sheet 적립 완료 string |
10 |
bottomSheetInProgressStringResId
| Pedometer bottom sheet 적립 중 string |
12 |
popIconProgressColorResId
| Pedometer Pop Icon Progress Color |
13 |
popIconProgressGuideColorResId
| Pedometer Pop Icon Progress Guide Color |
14 |
popIconTextColorResId
| Pedometer Pop Icon 에 표시 되는 걸음 수 Text Color |
15 |
| Pedometer Pop Icon 적립 가능할 때 보이는 Icon resource id |
16 |
popIconBackgroundColorResId
| Pedometer Pop Icon Background Color |
PedometerPopHeaderViewAdapter
PopHeaderConfig
PedometerPopHeaderViewAdapter
를 사용하여 PedometerPop 확장하여 Pop Feed Header 영역을 customize 할 수 있습니다
...
Set CustomPedometerPopHeaderViewAdapter
and PopHeaderConfig
FeedConfig
.feedHeaderViewAdapterClass
를 통해DefaultPedometerPopHeaderViewAdapterCustomPedometerPopHeaderViewAdapter.class
를 사용하도록 설정PopHeaderConfig
설정: PedometerPop Feed Header customizingPopConfig
.popHeaderConfig
를 통해 2. 에서 설정한PopHeaderConfig
를CustomPedometerPopHeaderViewAdapter
class 생성:PedometerPopHeaderViewAdapter
를 상속PopHeaderConfig
를 통해 customizing 설정
Code Block |
---|
final FeedConfig feedConfig = new FeedConfig.Builder(getApplicationContext(), UNIT_ID_POP) ... .feedHeaderViewAdapterClass(DefaultPedometerPopHeaderViewAdapter.class) CustomPedometerPopHeaderViewAdapter.class) ... .build(); public class CustomPedometerPopHeaderViewAdapter extends PedometerPopHeaderViewAdapter { @Override ... public PedometerPopHeaderConfig buildPopHeaderConfig(Context context) { .build(); final PopHeaderConfig popHeaderConfig =return new PopHeaderConfigPedometerPopHeaderConfig.Builder(context) .pedometerStepCountDescription(...) .pedometerDashboardProgressChartColorstepCountDescription(...) .pedometerDashboardProgressChartGuideColor(...) .pedometerInProgressDescriptionprogressChartColor(...) .pedometerRewardableDescription(...) .drawableProgressIconprogressChartGuideColor(...) .drawablePopPedometerDescriptionIcon(...) .pedometerDashboardBoundaryImageinProgressDescription(...) .build(); final PopConfig popConfig = new PopConfig.Builder(this, unitIdPop .rewardableDescription() ... .popMode(PopConfig.PopMode.PEDOMETER_POP)progressIconResId() .pedometerConfigdescriptionIconResId(pedometerConfig) .popHeaderConfig(popHeaderConfig) // .popExitUnitIdboundaryImageResId(App.unitIdPedometerPopExit) // optional ... .build(); } } |
...
PedometerPopHeaderConfig
No. | Parameter | Description |
---|---|---|
1 |
pedometerDashboardProgressChartColor
| Progress Color |
2 |
pedometerDashboardProgressChartGuideColor
| Progress Guide Color |
3 |
drawableProgressIcon
| 적립 가능할 때 보이는 Icon resource id |
4 |
drawablePopPedometerDescriptionIcon
| 적립 중을 표시하는 Icon resource id |
5 |
pedometerDashboardBoundaryImage
| 추가로 보여줄 Image resource id |
6 |
pedometerStepCountDescription
| 몇 걸음 걸었는지 표시하는 String |
7 |
pedometerInProgressDescription
| 적립 중일 때 표시하는 String |
8 |
pedometerRewardableDescription
| 적립 완료 때 표시하는 String |