Android 8.0(API 수준 26)부터는 모든 알림을 채널에 할당해야 합니다. 채널마다 채널의 모든 알림에 적용되는 시각적/음향적 동작을 설정할 수 있습니다. 그런 다음 사용자는 이 설정을 변경하고 앱에서 차단하거나 표시해야 하는 알림 채널을 결정할 수 있습니다.
Android 8.0의 채널 및 기타 새로운 알림 기능에 관한 개요는 아래 동영상을 확인하세요.
Android 8.0 기능을 포함하여 알림을 사용하는 샘플 코드는 Android 알림 샘플을 참조하세요.
그림 1과 같이 시스템 설정에서 앱별로 알림 채널을 사용자 설정할 수 있습니다.
그림 1. 시계 앱의 알림 설정 및 채널
알림 채널을 만든 후에는 알림 동작을 변경할 수 없습니다. 이 시점에서는 사용자가 모든 동작을 제어합니다. 그러나 채널의 이름과 설명은 변경할 수 있습니다.
보내야 하는 고유한 유형의 알림마다 채널을 만들어야 합니다. 앱 사용자의 선택사항이 반영된 알림 채널을 만들 수도 있습니다. 예를 들어 메시지 앱의 사용자가 만든 대화 그룹마다 별도의 알림 채널을 설정할 수 있습니다.
Android 8.0(API 수준 26)을 타겟팅하는 경우 알림 채널을 하나 이상 구현해야 합니다. targetSdkVersion
이 25 이하로 설정되면 앱이 Android 8.0(API 수준 26) 이상에서 실행되는 경우라도 Android 7.1(API 수준 25) 이하를 실행하는 기기에서와 동일하게 작동합니다.
알림 채널 만들기
알림 채널을 만들려면 다음 단계를 따르세요.
- 고유한 채널 ID, 사용자가 볼 수 있는 이름, 중요도 수준을 사용하여
NotificationChannel
객체를 구성합니다. - 선택적으로
setDescription()
을 사용하여 시스템 설정에서 사용자에게 표시되는 설명을 지정합니다. - 알림 채널을
createNotificationChannel()
에 전달하여 등록합니다.
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system; you can't change the importance // or other notification behaviors after this val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
자바
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is new and not in the support library if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system; you can't change the importance // or other notification behaviors after this NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
원래 값으로 기존 알림 채널을 만들면 아무 작업도 실행되지 않으므로 앱을 시작할 때 이 코드를 호출하는 것이 안전합니다.
기본적으로 이 채널에 게시되는 모든 알림에서는 IMPORTANCE_DEFAULT
및 IMPORTANCE_HIGH
와 같이 NotificationManagerCompat
클래스의 중요도 수준에 따라 정의된 시각적/음향적 동작을 사용합니다. 중요도 수준에 관한 자세한 내용은 아래를 참조하세요.
채널의 기본 알림 동작을 추가로 맞춤설정하려면 NotificationChannel
에서 enableLights()
, setLightColor()
, setVibrationPattern()
과 같은 메서드를 호출하세요.
하지만 채널을 만든 후에는 이 설정을 변경할 수 없으며 사용자가 동작을 활성으로 할 것인지 여부를 최종적으로 제어합니다.
createNotificationChannels()
를 호출하여 한 번의 작업으로 여러 알림 채널을 만들 수도 있습니다.
중요도 수준 설정
채널 중요도는 채널에 게시된 모든 알림의 중단 수준에 영향을 미치며 NotificationChannel
생성자에서 지정해야 합니다.
IMPORTANCE_NONE(0)
에서 IMPORTANCE_HIGH(4)
까지 다섯 가지 중요도 수준 중 하나를 사용할 수 있습니다.
채널에 할당하는 중요도 수준은 채널에 게시하는 모든 알림 메시지에 적용됩니다.
Android 7.1(API 수준 25) 이하를 실행하는 기기를 지원하려면 NotificationCompat
클래스의 우선순위 상수를 사용하여 알림마다 setPriority()
도 호출해야 합니다.
중요도(NotificationManager.IMPORTANCE_*
) 및 우선순위 상수(NotificationCompat.PRIORITY_*
)는 표 1에 표시된 대로 사용자가 볼 수 있는 중요도 옵션에 매핑됩니다.
표 1. 채널 중요도 수준
사용자가 볼 수 있는 중요도 수준 | 중요도(Android 8.0 이상) | 우선순위(Android 7.1 이하) |
---|---|---|
긴급 알림음이 울리며 헤드업 알림으로 표시됩니다. |
IMPORTANCE_HIGH |
PRIORITY_HIGH 또는 PRIORITY_MAX |
높음 알림음이 울립니다. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
중간 알림음이 없습니다. |
IMPORTANCE_LOW |
PRIORITY_LOW |
낮음 알림음이 없고 상태 표시줄에 표시되지 않습니다. |
IMPORTANCE_MIN |
PRIORITY_MIN |
중요도와 관계없이 모든 알림은 알림 창 및 런처 아이콘의 배지와 같이 사용자를 방해하지 않는 시스템 UI 위치에 표시됩니다. 단, 알림 배지의 모양은 수정할 수 있습니다.
채널을 NotificationManager
에 제출한 후에는 중요도 수준을 변경할 수 없습니다. 하지만 사용자는 언제든지 앱 채널의 환경설정을 변경할 수 있습니다.
적절한 우선순위 수준을 선택하는 방법에 관한 내용은 알림 디자인 가이드의 '우선순위 수준'을 참조하세요.
알림 채널 설정 읽기
사용자는 진동 및 경고 알림 소리와 같은 동작을 포함하여 알림 채널의 설정을 수정할 수 있습니다. 따라서 사용자가 알림 채널에 적용한 설정을 확인하려면 다음 단계를 따르세요.
getNotificationChannel()
또는getNotificationChannels()
를 호출하여NotificationChannel
객체를 가져옵니다.getVibrationPattern()
,getSound()
,getImportance()
와 같은 특정 채널 설정을 쿼리합니다.
그런 다음 앱의 의도된 동작을 금지한다고 생각되는 채널 설정을 감지한 경우 사용자에게 채널 설정을 변경할 것을 제안하고 채널 설정을 열기 위한 작업을 제공할 수 있습니다(다음 섹션 참조).
알림 채널 설정 열기
알림 채널을 만든 후에는 프로그래매틱 방식으로 알림 채널의 시각적/음향적 동작을 변경할 수 없습니다. 사용자만 시스템 설정에서 채널 동작을 변경할 수 있습니다. 사용자가 알림 설정에 쉽게 액세스할 수 있도록 하려면 앱의 설정 UI에 이 시스템 설정을 여는 항목을 추가해야 합니다.
ACTION_CHANNEL_NOTIFICATION_SETTINGS
작업을 사용하는 Intent
로 알림 채널의 시스템 설정을 열 수 있습니다.
예를 들어 다음 샘플 코드는 사용자를 알림 채널의 설정으로 리디렉션하는 방법을 보여줍니다.
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
자바
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
인텐트에는 앱의 패키지 이름(애플리케이션 ID라고도 함)과 수정할 채널을 지정하는 두 가지 추가 기능이 필요합니다.
알림 채널 삭제
deleteNotificationChannel()
을 호출하여 알림 채널을 삭제할 수 있습니다. 다음 샘플 코드는 이 프로세스를 완료하는 방법을 보여줍니다.
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
자바
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
알림 채널 그룹 만들기
설정 UI에서 채널의 모양을 추가로 구성하려면 채널 그룹을 만드세요. 이 기능은 앱에서 여러 사용자 계정(예: 직장 프로필)을 지원할 때 각 계정의 알림 채널 그룹을 만들 수 있으므로 유용합니다. 사용자는 이 방법으로 이름이 동일한 여러 알림 채널을 쉽게 식별하고 제어할 수 있습니다.
그림 2. 개인 및 직장 계정용 그룹이 있는 알림 채널 설정
예를 들어 소셜 네트워킹 앱에 개인 및 직장 계정 지원 기능이 포함될 수 있습니다. 이 시나리오에서 각 계정에 다음과 같이 기능과 이름이 동일한 여러 알림 채널이 필요할 수도 있습니다.
- 채널이 두 개 있는 개인 계정:
- 새로운 댓글
- 추천 게시물
- 채널이 두 개 있는 비즈니스 계정:
- 새로운 댓글
- 추천 게시물
알림 채널을 계정별 그룹으로 구성하면 사용자가 알림 채널을 쉽게 구별할 수 있습니다.
알림 채널 그룹마다 패키지 내에서 고유한 ID 및 사용자가 볼 수 있는 이름이 필요합니다. 다음 스니펫은 알림 채널 그룹을 만드는 방법을 보여줍니다.
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
자바
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
새 그룹을 만든 후 setGroup()
을 호출하여 새 NotificationChannel
객체를 그룹과 연결할 수 있습니다.
채널을 알림 관리자에게 제출한 후에는 알림 채널과 그룹 간의 연결을 변경할 수 없습니다.