알림채널(Notification Channel)


안드로이드 8.0(API 레벨 26)부터, 알림 채널이 당신이 보여주고자 하는 알림의 타입 각각에 대한 사용자 정의 채널을 만들수 있게 합니다. 알림 채널은 사용자가 알림을 관리할 수 있도록 도와주는 통합된 시스템을 제공합니다. 안드로이드 8.0을 타겟으로 할 때, 하나나 그 이상의 당신의 사용자에게 알림을 보여주기 위한 알림 채널을 구현해야 합니다. 만약 안드로이드 8.0을 타겟으로 하지 않고 안드로이드 8.0이 적용된 기기에서 앱이 사용될 경우, 안드로이드 7.1이나 그 아래 버전의 기기와 동일하게 동작합니다.


Notification Channel을 통해 Notification을 여러가지 용도로 나누어서 관리할 수 있게 만들어 줍니다.


* 8.0 부터는 Notification Channel을 만들어 주지 않으면 알림이 오지 않습니다.


           



알림채널(Notification Channel) 만들기


    1. 당신의 패키지 상에서 유일한 ID와 함께 알림 채널 객체를 생성한다.
    2. 알림 소리와 같은, 원하는 초기 설정과 사용자에게 보이는 설명(선택적임)을 함께 알림 채널 객체를 설정한다
    3. 알림 채널 객체를 알림 매니저에 등록한다

NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.
NOTIFICATION_SERVICE);
// 채널의 ID
String id = "my_channel_01";
// 사용자에게 보이는 채널의 이름
CharSequence name = getString(R.string.channel_name);
// 사용자에게 보이는 채널의 설명
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// 알림 채널 설정
mChannel.setDescription(description);
mChannel.enableLights(true);
// 기기가 이 기능을 지원한다면, 이 채널에 게시되는 알림에 대한 알림 불빛 색상을 설정
mChannel.setLightColor(Color.RED);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
mNotificationManager.createNotificationChannel(mChannel)


createNotificationChannels()를 호출해 복수의 알림 채널을 생성할 수 있습니다.


Creating a notification channel group

만약 앱이 다중 사용자 계정을 지원한다면, 각각의 계정에 대해 알림 채널 그룹을 생성할 수 있습니다. 알림 채널 그룹은 단일 앱 내 동일한 이름을 지닌 다중 알림 채널을 관리할 수 있게 해줍니다. 예를 들어, 소셜 네트워킹 앱에는 개인 및 비즈니스용 사용자 계정에 대해 지원이 포함될 수 있습니다. 이 시나리오에, 각 사용자 계정은 동일한 기능과 이름의 다중 알림채널이 요구됩니다.

  • 두 개의 알림 채널이 추가된 개인 사용자 계정:
    • 게시물에 올라온 새 코멘트의 알림.
    • 주소록에 따른 추천 포스트 알림
  • 두 개의 알림 채널이 추가된 비즈니스용 사용자 계정:
    • 게시물에 올라온 새 코멘트의 알림.
    • 주소록에 따른 추천 포스트 알림

이 예시에 나온 각각의 사용자 계정에 관련된 알림 채널을 전용 그룹으로 구성하면 사용자가 Settings 안의 그들을 쉽게 구별할 것입니다. 각 알림 채널 그룹은 패키지 내의 유일한(유니크한) ID와 사용자에게 보여지는 이름을 요구합니다. 다음 코드는 알림 채널 그룹을 어떻게 만드는지에 대한 시범입니다.


// 그룹의 ID
String group = "my_group_01";  
// 사용자에게 보여지는 그룹의 이름
CharSequence name = getString(R.string.group_name);  
NotificationManager mNotificationManager =  
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group, name));  

새 그룹을 만든 후에 setGroup()을 호출해 그룹과 함께 새 채널을 조직할 수 있습니다. 알림 매니저에 채널을 등록하기 전에만 알림 채널과 그룹간의 연결을 수정을 할 수 있습니다.


Reading notification channel settings

사용자들은 진동과 알림 소리와 같은 동작과 더불어 알림 채널의 설정을 수정할 수 있습니다. 당신은 다음 두 메소드를 호출해 사용자가 알림 채널에 적용한 설정을 검색할 수 있습니다.

NotificationChannel을 사용해 getVibrationPattern() getSound()와 같은 사용자가 현재 어떤 설정을 했는지 찾아내는 메소드를 사용할 수 있습니다. 사용자가 알림 채널을 차단했는지 알아보려면 getImportance()를 호출할 수 있습니다. 만약 알림 채널이 차단되었다면, getImportance() IMPORTANCE_NONE을 반환합니다.

Updating notification chnnel settings

알림 채널 생성 후에, 사용자는 그것의 설정과 작동을 담당하게 됩니다. createNotificationChannel()을 호출해서 알림 채널을 다시 알림 매니저에 등록해 알림 채널의 이름을 바꾸거나 그것의 설명을 업데이트할 수 있습니다.

다음 샘플 코드는 인텐트를 만들고 액티비티를 시작하여 사용자를 알림 채널 설정으로 재연결시키는 방법을 묘사합니다. 이 사례에서, 인텐트는 알림 채널의 ID, 그리고 앱의 패키지 이름를 포함하는 확장된 데이터를 요구합니다.

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);  
intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());  
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());  
startActivity(intent);  

Deleting a notification channel

NotificationManager mNotificationManager =  
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 채널의 아이디
String id = "my_channel_01";  
mNotificationManager.deleteNotificationChannel(id);  

notification badges

기본적으로, 각 알림 채널은 앱의 런처 아이콘 뱃지에 활성화된 알림을 반영합니다. setShowBadge() 메소드를 사용하여 채널로부터 뱃지에 반영되는 알림 표시를 멈출 수 있습니다. 알림 채널을 위한 이 설정은 그것이 만들어지고 알림 매니저에 등록된 이후에는 프로그래밍적인 방법으로는 수정할 수 없습니다.

참고: 사용자는 언제든 설정 앱을 통해 알림 채널이나 앱의 뱃지를 끌 수 있습니다.

다음 샘플 코드는 어떻게 알림 채널로부터의 알림에 관련된 뱃지를 숨기는지 설명합니다:


NotificationManager mNotificationManager =  
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 채널의 ID
String id = "my_channel_01";  
// 사용자에게 보이는 채널의 이름
CharSequence name = getString(R.string.channel_name);  
// 사용자에게 보이는 채널의 설명
String description = getString(R.string.channel_description);  
int importance = NotificationManager.IMPORTANCE_LOW;  
NotificationChannel mChannel = new NotificationChannel(id, name, importance);  
// 알림 채널을 설정
mChannel.setDescription(description);  
mChannel.setShowBadge(false);  
mNotificationManager.createNotificationChannel(mChannel);  

알림 제거

알림은 다음 중 하나가 발생할 때까지 계속 표시된 상태로 유지됩니다.

  • 사용자가 개별적으로 삭제하거나 "모두 삭제"를 사용하여 알림을 무시합니다( 알림을 지울 수 있는 경우).
  • 사용자가 알림을 클릭하고, 알림을 생성했을 때 setAutoCancel() 을 호출했을 경우입니다.
  • 특정 알림 ID에 대해 cancel()을 호출합니다. 이 메서드도 현재 진행 중인 알림을 삭제합니다.
  • cancelAll()을 호출합니다. 이것은 이전에 발행한 알림을 모두 제거합니다.