본문으로 건너뛰기

푸시(Push)

이 토픽에서는 푸시를 추가하고 기능을 구현하는 방법과 디자인을 변경하는 방법을 안내합니다.

푸시는 로컬 푸시 알림을 통해 사용자가 설정한 시간마다 적립 가능한 포인트가 있음을 알리고 피드 지면으로 진입하도록 유도하는 기능을 수행합니다. 푸시를 사용하면 사용자 모바일 기기 상단의 알림 창에 푸시 알림과 포그라운드 서비스 알림이 표시됩니다.

✏️  참고
푸시 알림과 포그라운드 서비스 알림을 기능과 디자인을 변경할 수도 있습니다. 자세한 내용은 고급 설정디자인 커스터마이징을 참고하세요.

기본 설정

준비 사항

✏️  참고
푸시 알림 구독 시간 및 각 시간별 UI 텍스트를 버즈빌 담당자에게 전달해야 합니다.

푸시 알림 초기화하기

PushConfigBuzzAdPushTheme을 통해 푸시 알림의 기능과 UI를 설정할 수 있습니다.

PushConfig를 통해서 추가할 수 있는 설정 값은 다음과 같습니다.

항목설명
openFeedFromLaunchActivity 중요
이 기능은 BuzzAd Android용 SDK v3.3.x까지 지원되며, v3.5.x부터는 지원되지 않습니다.

사용자가 푸시 알림을 눌러 피드가 열릴 때 런처 액티비티의 실행 여부를 설정합니다.
  • true: 사용자가 푸시 알림을 누르면 런처 액티비티를 실행한 후 피드가 열립니다.
  • false: 사용자가 푸시 알림을 누르면 런처 액티비티를 실행하지 않고 바로 피드가 열립니다.
iconResourceId푸시 알림 왼쪽 상단에 나타나는 아이콘 리소스 ID입니다. ID는 자체적으로 정의하세요.
notificationId앱에서 푸시 알림을 제어하기 위해 부여하는 ID입니다. ID는 자체적으로 정의하세요.

다음은 PushConfig를 추가하는 예시입니다.

final PushConfig pushConfig = new PushConfig.Builder().build();

final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
.setPushConfig(pushConfig)
.build();
BuzzAdBenefit.init(context, buzzAdBenefitConfig);

푸시 알림 수신 다이얼로그 표시하기

푸시 알림의 기능을 안내하고 사용자가 푸시 알림 수신(구독) 시간을 선택할 수 있는 다이얼로그를 사용할 수 있습니다. 사용자가 다이얼로그에서 알림 수신 시간을 선택하고 완료를 누르면 리워드 광고 푸시 알림이 사용자의 기기에서 활성화됩니다.

푸시 알림의 발송 시간, 푸시 알림 내용 등의 설정을 변경할 수 있습니다. 초기 설정에 대해서는 아래의 표를 확인하세요.

설정 항목초기 설정 값
푸시 알림 발송 시간
  • 9시
  • 17시
  • 21시
제목지금 바로 적립 가능한 포인트가 있어요!
내용앞으로 한 시간 적립의 기획! 포인트 챙겨가세요~

✏️  참고
초기 설정 값을 변경하려면 버즈빌 담당자에게 문의하세요.

다음은 사용자에게 푸시 알림 수신과 리워드 광고 구독을 유도하는 예시입니다.

BuzzAdPush.getInstance().registerWithDialog(MyActivity.this, new BuzzAdPush.OnRegisterListener() {
@Override
public void onSuccess() {
// 구독 성공 시 호출
}

@Override
public void onCanceled() {
// 구독 실패 시 호출
}
});

✏️  참고

리워드 광고 구독 취소 다이얼로그 표시하기

사용자에게 리워드 광고 구독을 취소할 수 있는 다이얼로그를 제공할 수 있습니다. 사용자가 구독을 취소하면 푸시 알림 기능이 비활성화됩니다.

다음은 리워드 광고 구독 취소 다이얼로그를 통해 사용자가 리워드 광고 구독을 해지하는 예시입니다.

BuzzAdPush.getInstance().unregisterWithDialog(MyActivity.this, new BuzzAdPush.OnRegisterListener() {
@Override
public void onSuccess() {
// 구독 취소 성공 시 호출
}

@Override
public void onCanceled() {
// 구독 취소 실패 시 호출
}
});

✏️  참고

고급 설정

고급 설정에서는 BuzzAd Android용 SDK의 푸시 알림을 구현하는 기능과 각 기능을 변경하는 방법을 확인할 수 있습니다.

리워드 광고 구독 다이얼로그 제거하기

BuzzAd Android용 SDK에서는 리워드 광고 구독 다이얼로그를 표시하지 않고 구독 시간을 설정하는 다이얼로그만 제공할 수 있습니다.

다음은 리워드 광고 구독 다이얼로그를 제공하지 않는 예시입니다.

BuzzAdPush.getInstance().registerWithDialog(MyActivity.this, false, new BuzzAdPush.OnRegisterListener() {
@Override
public void onSuccess() {
// 구독 성공 시 호출
}

@Override
public void onCanceled() {
// 구독 실패 시 호출
}
});

리워드 광고 구독 절차 자체 구현하기

BuzzAd Android용 SDK에서 제공하는 API를 활용하여 리워드 광고 구독 절차를 직접 구현할 수 있습니다. 다음의 절차를 따르세요.

  1. getInstance()에서 fetchPushHoursOptionIfNeeded()를 호출하여 버즈빌 서버로부터 구독 가능한 시간을 불러오고 저장하세요.
  • 저장된 구독 가능한 시간이 없다면 buzzAdPush.getPushHoursOption()를 호출하여 SDK에서 기본으로 제공하는 값을 가져 오세요.
    // 버즈빌 서버로부터 구독 가능한 시간을 미리 불러와 저장합니다.
    BuzzAdPush.getInstance().fetchPushHoursOptionIfNeeded(
    MainActivity.this,
    new PushRepository.OnFetchResultListener() {
    @Override
    public void onFetchFail() {
    // 저장된 구독 가능한 시간이 없다면 SDK에서 기본으로 제공하는 값을 읽어옵니다.
    List<Integer> list = buzzAdPush.getPushHoursOption(MainActivity.this);
    }

    @Override
    public void onFetchSuccess() {
    List<Integer> list = buzzAdPush.getPushHoursOption(MainActivity.this);
    }
    });
  1. setPushHours()를 호출하여 사용자가 선택한 리워드 광고 구독 시간을 SDK에 등록하세요.

    List<Integer> selectedHours = new ArrayList<>();

    selectedHours.add(hour); // 0 <= hour < 24

    BuzzAdPush.getInstance().setPushHours(activity, selectedHours); // 설정 가능한 시간 중 사용자가 선택한 시간을 Push SDK에 등록합니다.
    BuzzAdPush.getInstance().register(activity); // 위 단계 설정이 끝나면 Push를 등록하여 활성화합니다.

리워드 광고 구독 취소 API 사용하기

SDK에서 제공하는 구독 다이얼로그 UI를 사용하지 않고 리워드 광고 구독을 취소합니다. 리워드 광고 구독을 유도하는 UI를 직접 구성하여 리워드 광고 구독을 취소하는데 사용합니다.

BuzzAdPush.getInstance().unregister(MyActivity.this);

푸시 알림 수신 상태 확인하기

리워드 광고 구독 여부를 확인할 수 있습니다. 광고 구독 여부를 사용자에게 알리는데 사용합니다.

BuzzAdPush.getInstance().isRegistered(context);

푸시 포그라운드 서비스 알림 자체 구현하기

푸시 알림 기능이 안정적으로 동작하기 위해 이를 지원하는 포그라운드 서비스 알림이 함께 실행됩니다.

⚠️  주의
버즈빌의 잠금화면 지면과 팝 등 다른 지면을 지원하는 포그라운드 서비스 알림이 실행되면 푸시 알림의 포그라운드 서비스 알림은 표시되지 않습니다.

푸시 포그라운드 서비스 알림을 직접 구현하려면 다음의 절차를 따르세요.

  1. CustomPushService를 구현하세요.
  • PushService를 상속받는 클래스를 생성하세요.

  • createYourNotificationChannel()에서 Android 개발자 가이드의 알림 채널 만들기 및 관리 토픽을 참고하여 알림 채널을 만드세요. Android 8.0(API 레벨 26)부터는 모든 알림을 채널에 할당해야 합니다.

  • getFeedPendingIntent()에서 Feed로 진입할 수 있는 PendingIntent를 설정하세요.

      중요

    • 예제 코드의 .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)는 Android 12의 포그라운드 서비스 알림의 UX 지연에 대응하기 위해 v3.3.x부터 지원되는 인터페이스입니다.
    • 예제 코드 중 .setContentIntent(getFeedPendingIntent()의 boolean 변수에 대한 자세한 내용은 푸시 알림을 통한 피드 동작 변경하기 토픽을 참고하세요.

    public class CustomPushService extends PushService {
    @NonNull
    @Override
    public Notification buildForegroundNotification(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    createYourNotificationChannel();
    }

    return new NotificationCompat.Builder(
    context,
    YOUR_NOTIFICATION_CHANNEL_ID
    )
    .setSmallIcon(context.getApplicationInfo().icon)
    .setContentIntent(getFeedPendingIntent()) // 3.3.x까지는 true 나 false를 설정할 수 있으며, 3.5.x부터는 false로 고정됩니다.
    .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) // v3.3.x부터 지원되는 인터페이스입니다.
    .build();
    }

    private void createYourNotificationChannel() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(YOUR_NOTIFICATION_CHANNEL_ID, YOUR_NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW);
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.createNotificationChannel(channel);
    }
    }
    }

✏️   참고
푸시 알림을 통한 피드 동작 변경하기 토픽을 참고하세요.

  1. Custom Service Class를 등록하세요.

    // Push 초기화 참조
    final PushConfig pushConfig = new PushConfig.Builder()
    .pushServiceClass(CustomPushService.class)
    ...
    .build();

    final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
    ...생략...
    .setPushConfig(pushConfig)
    .build();
    BuzzAdBenefit.init(context, buzzAdBenefitConfig);
  2. AndroidManifest.xml 파일에 CustomPushService를 등록하세요.

    <application>
    ...생략...
    <service android:name=".custom.CustomPushService" />
    </application>

푸시 알림을 통한 피드 동작 변경하기

사용자가 푸시 알림을 클릭하면 Feed 지면을 앱의 런처 액티비티에서 보여줄 수 있습니다. 초기 설정 값은 False이며, False의 경우 피드 지면이 레이아웃 뷰의 최상단에 위치하게 되어 앱 위에 표시됩니다.

  중요
Android 12의 알림 트램펄린 제한사항으로 인해 BuzzAd Android용 SDK v3.5.x부터는 getFeedPendingIntent()의 값이 false로 고정됩니다.

PushService가 제공하는 API

API설명
getFeedPendingIntent(Boolean)피드 지면을 보여줄 수 있는 인텐트를 생성합니다.
  • True: 푸시 알림의 포그라운드 서비스를 클릭하면 앱의 런처 액티비티를 표시하고 피드 지면을 보여 줍니다.
  • False(초기 설정 값): 푸시 알림의 포그라운드 서비스를 클릭하면 사용자의 기기 화면 최상단에 피드 지면을 보여 줍니다.

다음은 피드 지면을 앱의 런처 액티비티에서 보이게 하는 예시입니다.

// Push 초기화 참조
final PushConfig pushConfig = new PushConfig.Builder()
.openFeedFromLaunchActivity(true)
.build();

final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
.setPushConfig(pushConfig)
.build();
BuzzAdBenefit.init(context, buzzAdBenefitConfig);

디자인 커스터마이징

디자인 커스터마이징에서는 BuzzAd Android용 SDK에서 제공하는 푸시 기능의 디자인을 변경하기 위한 방법을 안내합니다.

✏️  참고
추가적인 디자인 변경을 원하는 경우, 고급 설정 토픽을 참고하여 직접 구현하세요.

리워드 광고 구독 다이얼로그

BuzzAdPushTheme을 설정하여 BuzzAd Android용 SDK에서 제공하는 구독 다이얼로그의 아이콘 및 색상을 변경할 수 있습니다.

코드설명
rewardIcon적립 가능한 포인트가 있을 때 푸시 알림에 나타나는 아이콘입니다. 아이콘을 변경하려면 전체 테마 변경하기 토픽을 참고하세요.
colorPrimarySDK의 전체 테마로 적용된 주요 색상(Primary Color)가 적용됩니다.
colorConfirm다음 버튼의 색상입니다. 초기 설정 값은 buzzvilPrimaryColor입니다.
colorCancel구독 취소 버튼의 색상입니다. 초기 설정 값은 buzzvilPrimaryColor입니다.
registerLogoImage리워드 광고 구독 다이얼로그 상단이 이미지입니다.
  • 권장 사이즈: 328 x 228 (dp)
  • 권장 사이즈를 벗어나면 SDK에서 자동으로 조정됩니다.
unregisterLogoImage리워드 광고 구독 취소 다이얼로그 상단의 이미지입니다.
  • 권장 사이즈: 328 x 228 (dp)
  • 권장 사이즈를 벗어나면 SDK에서 자동으로 조정됩니다.

다음은 리워드 광고 구독 다이얼로그의 디자인을 변경하는 예시입니다.

BuzzAdPushTheme buzzAdPushTheme = BuzzAdPushTheme.getDefault()
.colorConfirm(R.color.colorAccent) // 확인 버튼의 색상을 변경하고 싶을 경우 설정; 기본값은 primaryColor
.colorCancel(R.color.colorPrimary) // 취소 버튼의 색상을 변경하고 싶을 경우 설정; 기본값은 primaryColor
.registerLogoImage(R.drawable.benefit_push_dialog_image_logo) // Push 설명 다이얼로그 상단 image
.unregisterLogoImage(R.drawable.benefit_push_dialog_image_logo); // Push 취소 다이얼로그 상단 image
BuzzAdPush.getInstance().setTheme(buzzAdPushTheme);

푸시 알림 아이콘

푸시 알림을 초기화할 때 iconResourceId()를 설정하여 알림의 좌측 상단에 표시되는 앱 아이콘을 변경할 수 있습니다.

✏️  참고

  • 푸시 알림의 앱 아이콘은 푸시의 포그라운드 서비스 알림에는 적용되지 않습니다.
  • 푸시 알림 초기화에 대한 자세한 내용은 푸시 알림 초기화하기 토픽을 참고하세요.

final PushConfig pushConfig = new PushConfig.Builder()
.iconResourceId(R.drawable.your_push_icon)
.build();

final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
.setPushConfig(pushConfig)
.build();
BuzzAdBenefit.init(context, buzzAdBenefitConfig);