Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents

Info

...

PedometerePop 을 사용하기 위해선 Pop 초기화를 마친 상태여야 합니다.

Image Modified

<그림 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.3.+ 사용
buzzad-benefit:2.13.+ 사용

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 와 동일한 버전 사용

Image Added

<그림 3> Pop Interstitial Ad

Step 2. Set pedometer config

Application class 에서 BuzzAdBenefit.init 할 때

Info

Benefit SDK 2.17 이상

  1. pedometerConfig: 위 unitId 설정

    1. 발급받은 Pedometer unitId 2개 를 benefit 초기화 시 설정합니다.

      UNIT_ID_PEDOMETER: 만보기 리워드 적립을 하는 fragment에서의 광고 유닛

      UNIT_ID_PEDOMETER_REWARD: 만보기 마일스톤을 눌렀을 때 나오는 bottom sheet dialog 광고 유닛

    2. (Optional) pedometerIntroUnitId 를 통해 UNIT_ID_PEDOMETER_INTRO 를 설정합니다. 이 UnitId 가 설정되어있으면 적립이 가능할 때 Intro 광고 <그림 3> 노출

  2. popConfig:

    1. <그림 1> 과 같이 feed 에 Pedometer 관련 내용을 보여주기 위해 feedHeaderViewAdapterClass 설정

    2. popModePopMode.PEDOMETER_POP 로 설정

Code Block
final FeedConfig feedConfig = new FeedConfig.Builder(getApplicationContext(), UNIT_ID_FEED)
        .build();
final PedometerConfig pedometerConfig = buildPedometerConfig();
final PopConfig popConfig = new PopConfig.Builder(getApplicationContext(), UNIT_ID_POP)
        ...
        .feedHeaderViewAdapterClass(DefaultPedometerPopHeaderViewAdapter.class)
        .popMode(PopConfig.PopMode.PEDOMETER_POP)
        .pedometerConfig(pedometerConfig)
        ...
        .build();
final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(this)
        .add(popConfig)
        .add(feedConfig)
        .build();
BuzzAdBenefit.init(this, buzzAdBenefitConfig);

@NotNull
private PedometerConfig buildPedometerConfig() {
    return 

...

Image Removed

<그림 3> Pop Interstitial Ad

Step3. Set pedometer config

Application class 에서 BuzzAdBenefit.init 할 때

...

new PedometerConfig
            .Builder(getApplicationContext(), UNIT_ID_PEDOMETER, UNIT_ID_PEDOMETER_REWARD)
            .pedometerIntroUnitId(UNIT_ID_PEDOMETER_INTRO) // Optional
            .build();
}
Note

Benefit SDK 2.17 미만

  1. pedometerConfig: 위 unitId 설정

    1. 발급받은 Pedometer unitId 2개 를 benefit 초기화 시 설정합니다.

      UNIT_ID_PEDOMETER: 만보기 리워드 적립을 하는 fragment에서의 광고 유닛

      UNIT_ID_PEDOMETER_REWARD: 만보기 마일스톤을 눌렀을 때 나오는 bottom sheet dialog 광고 유닛

    2. (Optional) pedometerIntroUnitId 를 통해 UNIT_ID_PEDOMETER_INTRO 를 설정합니다. 이 UnitId 가 설정되어있으면 적립이 가능할 때 Intro 광고 <그림 3> 노출

  2. feedConfig: <그림 1> 과 같이 feed 에 Pedometer 관련 내용을 보여주기 위해 feedHeaderViewAdapterClass 설정

  3. popConfig:

    1. popModePopMode.PEDOMETER_POP 로 설정

    2. (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
            .Builder(getApplicationContext(), UNIT_ID_PEDOMETER, UNIT_ID_PEDOMETER_REWARD)
            .pedometerIntroUnitId(UNIT_ID_PEDOMETER_INTRO) // Optional
            .build();
}

...

Step 3. Initialize Pop Pedometer

Application class onCreatesessionReadyReceiver 를 등록합니다. 세션이 준비되면 만보기를 초기화합니다.

Code Block
@Override
public void onCreate() {
    super.onCreate();

    initBuzzAdBenefit();
    BuzzAdBenefit.registerSessionReadyBroadcastReceiver(this, sessionReadyReceiver);
}
private BroadcastReceiver sessionReadyReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            initPedometer(context);

       } else {
            Log.d(TAG, "BuzzAdPopPedometer failure, needs Build.VERSION_CODE >= 19");
        }
        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 를 활성화할 때 권한을 얻어야 합니다.

https://developer.android.com/about/versions/10/privacy/changes#physical-activity-recognition

(참고: Android Developer Guide)

1. 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);
    }
}

2. 권한이 획득 되면 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);
}

3. 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()
        );
    }
}

4. 위 스탭들을 통해서 신체 감지 권한 및 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 입니다.

...

No.

...

Parameter

...

Description

...

 8

...

unitId

...

Pedometer fragment 에서 사용하는 광고 Unit Id

...

 11

...

rewardUnitId

...

Pedometer bottom sheet(리워드 정보 화면)에서 사용하는 광고 Unit Id

...

 <그림 3>

...

pedometerIntroUnitId

...

적립 가능 할 때 Pedometer fragment 진입 시 사용하는 광고 Unit id

...

1

...

toolbarTitleResId

...

Pedometer fragment 툴바에 표시되는 title resource id

...

2

...

tutorialUrl

...

Pedometer fragment 툴바의 튜토리얼 버튼을 눌렀을 때 이동할 url 주소

...

3

...

milestoneProgressGuideColorResId

...

Pedometer fragment 마일스톤 Progress Guide Color resource id

...

4

...

milestoneProgressColorResId

...

Pedometer fragment 마일스톤 Progress Color resource id

...

5

...

milestoneRewardIconResId

...

Pedometer fragment 마일스톤 적립 가능할 때 보이는 Icon resource id

...

6

...

rewardAvailableTextColorId

...

Pedometer fragment 마일스톤 적립 가능할 때 표시되는 Text Color resource id

...

7

...

rewardAvailableBackgroundId

...

Pedometer fragment 마일스톤 적립 가능할 때 표시되는 Text Background resource Id

...

9

...

bottomSheetImageResId

...

Pedometer bottom sheet 마일스톤 적립 가능할 때 보이는 image resource id

...

10

...

bottomSheetSuccessStringResId

...

Pedometer bottom sheet 적립 완료 string resource id

...

10

...

bottomSheetInProgressStringResId

...

Pedometer bottom sheet 적립 중 string resource id

...

12

...

popIconProgressColorResId

...

Pedometer Pop Icon Progress Color resource id

...

13

...

popIconProgressGuideColorResId

...

Pedometer Pop Icon Progress Guide Color resource id

...

14

...

popIconTextColorResId

...

Pedometer Pop Icon 에 표시 되는 걸음 수 Text Color resource id

...

15

...

popIconRewardIconResId

...

Pedometer Pop Icon 적립 가능할 때 보이는 Icon resource id

...

16

...

popIconBackgroundColorResId

...

Pedometer Pop Icon Background Color resource id

PedometerPopHeaderViewAdapter

PopHeaderConfig 를 사용하여 PedometerPop Feed Header 영역을 customize 할 수 있습니다

...

Set PopHeaderConfig

  1. FeedConfig.feedHeaderViewAdapterClass 를 통해 DefaultPedometerPopHeaderViewAdapter.class 를 사용하도록 설정

  2. PopHeaderConfig 설정: PedometerPop Feed Header customizing

  3. PopConfig.popHeaderConfig 를 통해 2. 에서 설정한 PopHeaderConfig 를 설정

...

.

...

PopHeaderConfig

...

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

...