Versions Compared

Key

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

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 할 때

  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  .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 onCreatesessionReadyReceiver 를 등록합니다. 세션이 준비되면 만보기를 초기화합니다.

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 onCreatesessionReadyReceiver 를 등록합니다. 세션이 준비되면 만보기를 초기화합니다.

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 를 활성화할 때 권한을 얻어야 합니다.

...

  1. showPop 을 호출하기 전에 requestActivityRecognitionPermissionIfNeeded 함수를 통해 신체 활동 감지 권한이 있는 지 확인하고 없으면 권한을 요청

    1. 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 획득) 진행

    1. 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 권한 획득

    1. 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 을 자동으로 호출

    1. 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

unitId

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

 11

rewardUnitId

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

 <그림 3>

pedometerIntroUnitId

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

1

toolbarTitleResId

toolbarTitle

Pedometer fragment 툴바에 표시되는 title

resource id

2

tutorialUrl

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

3

milestoneProgressGuideColorResId

milestoneProgressGuideColor

Pedometer fragment 마일스톤 Progress Guide Color

resource id

4

milestoneProgressColorResId

milestoneProgressColor

Pedometer fragment 마일스톤 Progress Color

resource id

5

milestoneRewardIconResId

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

6

rewardAvailableTextColorId

rewardAvailableTextColor

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

resource id

7

rewardAvailableBackgroundId

rewardAvailableBackgroundResId

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

resource

Resource Id

9

bottomSheetImageResId

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

10

bottomSheetSuccessStringResId

bottomSheetSuccessString

Pedometer bottom sheet 적립 완료 string

resource id

10

bottomSheetInProgressStringResId

bottomSheetInProgressString

Pedometer bottom sheet 적립 중 string

resource id

12

popIconProgressColorResId

popIconProgressColor

Pedometer Pop Icon Progress Color

resource id

13

popIconProgressGuideColorResId

popIconProgressGuideColor

Pedometer Pop Icon Progress Guide Color

resource id

14

popIconTextColorResId

popIconTextColor

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

resource id

15

popIconRewardIconResId

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

16

popIconBackgroundColorResId

popIconBackgroundColor

Pedometer Pop Icon Background Color

resource id

PedometerPopHeaderViewAdapter

PopHeaderConfig PedometerPopHeaderViewAdapter사용하여 PedometerPop 확장하여 Pop Feed Header 영역을 customize 할 수 있습니다

...

Set CustomPedometerPopHeaderViewAdapter and PopHeaderConfig

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

  2. PopHeaderConfig 설정: PedometerPop Feed Header customizing

  3. PopConfig.popHeaderConfig 를 통해 2. 에서 설정한 PopHeaderConfigCustomPedometerPopHeaderViewAdapter class 생성: PedometerPopHeaderViewAdapter 를 상속

  4. 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

progressChartColor

Progress Color

2

pedometerDashboardProgressChartGuideColor

progressChartGuideColor

Progress Guide Color

3

drawableProgressIcon

progressIconResId

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

4

drawablePopPedometerDescriptionIcon

descriptionIconResId

적립 중을 표시하는 Icon resource id

5

pedometerDashboardBoundaryImage

dashboardBoundaryImageResId

추가로 보여줄 Image resource id

6

pedometerStepCountDescription

stepCountDescription

몇 걸음 걸었는지 표시하는 String

7

pedometerInProgressDescription

inProgressDescription

적립 중일 때 표시하는 String

8

pedometerRewardableDescription

rewardableDescription

적립 완료 때 표시하는 String