Versions Compared

Key

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

Notification 커스터마이징

Custom Pop Service Notification

Pop 에서 기본 제공하는 Service Notification 은 클릭 했을 때 Pop 을 다시 보이는 기능을 제공합니다. 하지만 개발 요구사항에 따라 Service Notification 을 다른 형식으로 사용해야 할 경우가 있는데, 예를 들어 Pop service notification의 layout을 변경하고 싶거나, 채널 아이디를 변경하고 싶을때 입니다. 그런 경우 Custom Service Notification 을 등록하는 방법을 사용할 수 있습니다.

Step 1. CustomControlService class

  1. PopControlService 를 상속받아 class 를 만듭니다.

  2. buildForegroundNotification 함수를 오버라이드 합니다.

  3. (Optional) getPopPendingIntent 를 통해 click 시 Pop Icon 을 띄우는 기능을 하는 PendingIntent 를 만들 수 있습니다. 요구사항에 따라 이 기능 대신 필요한 기능을 PendingIndent로 사용하면 됩니다.

  4. 필요에 따라 notificationChannel 을 생성해 등록합니다.

  5. (Optional)RemoteViews, setContent 를 사용해 CustomContolService 에서 사용할 View 를 등록합니다.

Code Block
languagejava
// 1. PopControlService 를 상속받아 class 를 만듭니다.
public class CustomControlService extends PopControlService {

    // 2. buildForegroundNotification 함수를 오버라이드 합니다.
    @Override
    protected Notification buildForegroundNotification(@NonNull String unitId, @NonNull PopNotificationConfig popNotificationConfig) {
        // 3. getPopPendingIntent 를 통해 click 시 Pop Icon 을 띄우는 기능을 하는 PendingIntent 를 만들 수 있습니다.
        PendingIntent popPendingIntent = getPopPendingIntent(unitId, this);

        NotificationCompat.Builder builder;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // 4. 필요에 따라 notificationChannel 을 생성해 등록합니다.
            createNotificationChannelIfNeeded();
            builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        } else {
            builder = new NotificationCompat.Builder(this);
        }

        // 5. CustomContolService 에서 사용할 View 를 등록합니다.
        RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.view_custom_notification);
        builder.setSmallIcon(popNotificationConfig.getSmallIconResId())
                .setContent(remoteView)
                .setContentIntent(popPendingIntent)
                .setPriority(PRIORITY_LOW)
                .setShowWhen(false);
        if (popNotificationConfig.getColor() == null) {
            builder.setColor(popNotificationConfig.getColor());
        }
        return builder.build();
    }

    @TargetApi(Build.VERSION_CODES.O)
    private void createNotificationChannelIfNeeded() {
        final NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        if (notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID) == null) {
            final NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW);
            channel.setShowBadge(false);
            notificationManager.createNotificationChannel(channel);
        }
    }
}

Step 2. Custom Service Class 등록

PopConfig.controlService(@NonNull Class<? extends PopControlService> popControlServiceClass) 를 사용해 Custom Service Notification 을 등록할 수 있습니다.

이 경우, PopNotificationConfig 는 SmallIconRes 와 NotificationId 두 가지만 설정하면 됩니다.

...

languagejava

...

PopConfig 설정

PopConfig를 통해 Pop에서 원하는 기능을 켜고 끌 수 있습니다. YOUR_POP_UNIT_ID에 Feed에서 사용한 Unit ID와 동일한 값을 넣어주세요.

Application 의 OnCreate에 다음과 같이 추가합니다. BuzzAdBenefit.init 시점에 BuzzAdBenefitConfig 에 PopConfig를 설정합니다.

Code Block
languagejava
PopConfig popConfig = new PopConfig.Builder(getApplicationContext(), YOUR_POP_UNIT_ID_POP)
        ...(생략)...
        .controlService(CustomControlService.class)
        .build();

final BuzzAdBenefitConfig buzzAdBenefitConfig = new BuzzAdBenefitConfig.Builder(context)
        ...( 생략)...
        .setPopConfig(popConfig)
        .build();

Step 3. Manifest 에 CustomControlService 를 등록

Code Block
languagexml
<application
    ...(생략)...
    <service android:name=".java.CustomControlService" />
</application>

...


BuzzAdBenefit.init(this, buzzAdBenefitConfig);

Pop Feed 커스터마이징

Custom Bottom Sheet

...