Notification Channel (알림 채널)
Android O에는 사용자의 알림 관리에 도움이 되는 통합 시스템을 제공하기 위해 알림 채널이 도입됩니다. Android O를 대상으로 할 때 사용자에게 알림을 표시하는 하나 이상의 알림 채널을 구현해야 합니다. Android O를 대상으로 하지 않을 경우, Android O 기기에서 앱을 실행하면 Android 7.0에서와 동일하게 동작합니다.
사용자는 Settings로 이동하거나 알림을 길게 눌러 이런 동작을 변경하거나, 언제든 알림 채널을 차단할 수도 있습니다. 알림 채널이 생성되어 알림 관리자로 제출된 후에는 알림 채널의 동작을 프로그래밍 방식으로 수정할 수 없습니다.
알림 우선 순위와 중요도
Android O에서는 개별 알림의 우선순위 수준을 설정하는 기능을 지원 중단합니다. 대신 이제는 알림 채널 생성 시 권장되는 중요도 수준을 설정할 수 있습니다. 알림 채널에 할당하는 중요도 수준은 이 채널에 게시하는 모든 알림 메시지에 적용됩니다. IMPORTANCE_NONE(0)에서 IMPORTANCE_HIGH(4)까지, 채널이 사용자를 방해할 수 있는 정도를 구성하는 5가지 중요도 수준 중 하나로 채널을 구성할 수 있습니다. 기본 중요도 수준은 3으로, 이 수준에서는 어디서든 알림이 표시되고 알림음이 울리지만 사용자에게 시각적인 방해는 되지 않습니다. 알림 채널을 생성한 후에는 시스템만이 그 중요도를 수정할 수 있습니다.
알림 채널 생성
알림 채널을 생성하는 방법은 다음과 같습니다.
- 패키지 내에 고유 ID를 가진 알림 채널 객체를 생성합니다.
- 사용자에게 보이는 선택적 설명 뿐만 아니라 경고 알림음과 같은 원하는 초기 설정으로 알림 채널 객체를 구성합니다.
- 알림 채널 객체를 알림 관리자에게 제출합니다.
다음 코드 샘플은 중요도 수준이 낮은 알림 채널과 맞춤형 진동 패턴의 생성 방법을 보여줍니다.
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
// The user-visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user-visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.enableLights(true);
// Sets the notification light color for notifications posted to this
// channel, if the device supports this feature.
mChannel.setLightColor(Color.RED);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
mNotificationManager.createNotificationChannel(mChannel);
createNotificationChannels()를 호출하여 단일 작업에서 여러 개의 알림 채널을 생성할 수도 있습니다.
알림 채널 그룹 생성
앱이 여러 개의 사용자 계정을 지원하는 경우 각 계정마다 알림 채널 그룹을 생성할 수 있습니다. 알림 채널 그룹을 사용해 단일 앱 내에서 이름이 같은 여러 개의 알림 채널을 관리할 수 있습니다.
예를 들어 소셜 네트워킹 앱이 개인용 사용자 계정뿐 아니라 업무용 사용자 계정에 대한 지원 기능도 포함할 수 있습니다. 이 경우에는 각 사용자 계정마다 같은 기능과 이름을 가진 여러 개의 알림 채널이 필요할 수 있습니다.
이 예시에서 각 사용자 계정과 관련된 알림 채널을 전용 그룹으로 구성하면 사용자가 Settings에서 이들 채널을 쉽게 구분할 수 있습니다. 각 알림 채널 그룹마다 ID가 필요하며 이 ID는 패키지 내에서 고유할 뿐 아니라 사용자가 볼 수 있는 이름이어야 합니다. 다음 스니펫은 알림 채널 그룹 생성 방법을 보여줍니다.
// The id of the group.
String group = "my_group_01";
// The user-visible name of the group.
CharSequence name = getString(R.string.group_name);;
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group, name));
새 그룹을 생성하고 나면 setGroup()을 호출하여 새 채널을 그룹과 연결할 수 있습니다. 알림 채널과 그룹 사이의 연결을 수정한 후에만 채널을 알림 관리자에 제출할 수 있습니다.
알림 생성
알림을 생성하려면 Notification 객체를 반환하는 Notification.Builder.build()를 호출합니다. 알림을 발행하려면 notify()를 호출해서 시스템에 Notification 객체를 전달합니다.
필수 알림 콘텐츠
Notification 객체는 다음을 반드시 포함해야 합니다.
- setSmallIcon()으로 설정한 작은 아이콘
- setContentTitle()로 설정한 제목
- setContentText()로 설정한 세부 정보 텍스트
- setChannelId()로 설정한 유효한 알림 채널 ID
Note: Android O를 대상으로 하는 앱이 알림 채널 없이 게시하려고 시도하는 경우, 토스트로 나타나는 화면 경고를 표시하기 위해 Android O에서 새 설정을 켤 수 있습니다. Android O가 실행 중인 개발 기기의 설정을 켜려면 Settings > Developer options로 이동하여 Show notification channel warnings를 On으로 전환합니다.
채널에 알림 게시
이 코드는 채널의 ID를 사용하여 알림을 알림 채널과 연결합니다.
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated.
int notifyID = 1;
// The id of the channel.
String CHANNEL_ID = "my_channel_01";
// Create a notification and set the notification channel.
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
// Issue the notification.
mNotificationManager.notify(id, notification);
알림 채널 설정 읽기
사용자는 진동 및 경고 알림음 같은 동작을 비롯하여, 알림 채널에 대한 설정을 수정할 수 있습니다. 다음 두 메서드를 호출하여 사용자가 알림 채널에 적용한 설정을 확인할 수 있습니다.
- 단일 알림 채널을 확인하려면
getNotificationChannel()
을 호출하면 됩니다. - 앱에 속한 모든 알림 채널을 확인하려면
getNotificationChannels()
를 호출하면 됩니다.
알림 채널 설정 업데이트
일단 알림 채널을 생성하고 나면 알림 채널 설정과 동작은 사용자의 몫입니다. createNotificationChannel()을 다시 호출하여 기존 알림 채널의 이름을 바꾸거나 설명을 업데이트할 수 있습니다.
다음은 액티비티를 시작할 인텐트를 생성하여 알림 채널에 대한 설정 화면으로 이동하는 샘플 코드입니다.
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);
알림 채널 삭제
deleteNotificationChannel()을 호출하여 알림 채널을 삭제할 수 있습니다.
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);
Notification badges (알림 배지)
- Android O에서는 알림 배지를 앱 런처 아이콘에 표시하도록 지원합니다.
- 알림 배지는 사용자가 아직 닫지 않았거나 반응하지 않은 앱 관련 알림이 있는지 여부를 반영합니다.
- 알림 배지는 알림 도트라고도 부릅니다.
Snoozing (다시 알림)
- 사용자가 알림이 나중에 나타나도록 다시 알림을 설정할 수 있습니다.
- 알림이 다시 표시될 때는 처음과 같은 중요도로 표시됩니다.
- 앱은 다시 알림으로 설정된 알림을 제거하거나 업데이트할 수 있지만, 다시 알림으로 설정된 알림은 업데이트하면 다시 표시되지 않습니다.
Notification timeouts (알림 제한 시간)
- 이제 알림을 생성할 때 setTimeoutAfter()을 사용하여 제한 시간을 설정할 수 있습니다.
- 이 메서드를 사용하여 일정 시간이 지나면 알림을 취소하도록 지정할 수 있습니다.
- 필요한 경우, 지정된 제한 시간이 지나기 전에 알림을 취소할 수 있습니다.
Notification settings (알림 설정)
- Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES 인텐트를 사용하여 앱 알림 설정의 링크를 만들 때 나타나는 텍스트를 설정하려면 setSettingsText()를 호출합니다.
Notification dismissal (알림 닫기)
- 이제 시스템에서 사용자가 알림을 닫았는지 앱이 알림을 제거했는지 구분할 수 있습니다.
- 알림이 어떻게 닫혔는지 확인하려면 NotificationListenerService 클래스의 새 onNotificationRemoved() 메서드를 구현해야 합니다.
Background colors (배경 색상)
- 알림의 배경 색상을 설정하고 활성화할 수 있습니다.
- 사용자가 한 눈에 볼 수 있도록 중요한 작업에 대한 알림에만 이 기능을 사용해야 합니다. 예를 들어, 운전 중 길찾기 또는 진행 중인 통화와 관련된 알림에 대해 배경 색상을 설정할 수 있습니다.
- Notification.Builder.setColor()를 사용하여 원하는 배경 색상을 설정할 수도 있습니다. 이때 Notification.Builder.setColorized()를 사용하면 알림에 배경 색상을 사용하는 기능을 활성화할 수 있습니다.
Messaging style (메시징 스타일)
- 이제 MessagingStyle 클래스를 사용하는 알림이 접힌 형식으로 더 많은 내용을 표시합니다.
- 메시지와 관련된 알림에는 MessagingStyle 클래스를 사용해야 합니다.
- 또한 새 addHistoricMessage() 메서드를 사용하여 메시징 관련 알림에 기록 메시지를 추가함으로써 대화에 맥락을 제공할 수 있습니다.