Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Pop (만보기) 초기화

Step 1.

...

만보기 SDK 설치

application level build.gradle 에 만보기 모듈을 추가합니다.

...

<그림 3> Pop Interstitial Ad

 

Step 2.

...

PedometerConfig 설정

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. popConfig:

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

    2. popModePopMode.PEDOMETER_POP 로 설정

    3. (Optional)Pop 의 Exit 광고 <그림 3> 도 popExitUnitId 를 통해 설정 가능

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)
        .popExitUnitId(App.unitIdPedometerPopExit) // Optional
        ...
        .build();
final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(this)
        .add(popConfig)
        .add(feedConfig)
        .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();
}
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 feedConfigfinal PopConfig popConfig = new FeedConfigPopConfig.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)
    .setPopConfig(popConfig)
         .pedometerIntroUnitId(UNIT_ID_PEDOMETER_INTRO) // Optional
            .build();
}

...

build();
BuzzAdBenefit.init(this, buzzAdBenefitConfig);

Step 3.

...

초기화

만보기 초기화는 로그인이 완료된 시점에 해야 합니다. 이를 위해 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) {
        initPedometer(context);
        Log.d(TAG, "Session is Ready. Ads can be loaded now.");
    }

    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.

...

권한 설정

Android 10 (Q, API 29) 부터는 신체 활동 감지 권한이 필요하게 변경됐습니다. 앱에서 PedometerLight feature 를 활성화할 때 권한을 얻어야 합니다. (참고: 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

...

4.

...

Pop 실행

App 실행 → PedometerPop 활성화 → 신체 감지 권한 획득 → OverlayPermissoin 획득 → BuzzAdPopPedometer.activate() → showPop → PedometerPop 기능을 사용할 수 있습니다.팝을 실행 하기 위해서BuzzAdPop.preloadAndShowPop() 함수를 호출해 줍니다. 호출하기 전 다른 앱 위에 그리기 권한이 있는지 꼭 확인해 주세요. 팝이 한 번 활성화 하면 foreground service가 켜지면서 화면을 껐다켤때마다 팝이 지속적으로 화면에 보이게 됩니다.

Code Block
BuzzAdPop buzzAdPop = new BuzzAdPop(context, YOUR_POP_UNIT_ID);
if (BuzzAdPop.hasPermission(MainActivity.this) || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        buzzAdPop.preloadAndShowPop(context);
} else {
        // 다른 앱 위에 그리기 권한 받는 코드
}

팝을 비활성화 하기 위해서 buzzAdPop.removePop(Context) 을 호출해야합니다. buzzAdPop.removePop(Context) 을 호출하면 pop의 service가 종료되고 이후 팝이 나타나지 않습니다.

Code Block
buzzAdPop.removePop(context);