본문 바로가기
Android

[Android] Notification Channel 알림 채널 만들기

by 워뇨옹2 2021. 10. 18.
728x90
반응형

Notification

Oreo이상 버전에서 Broadcast Receiver 클래스도 만들고, 알람 매니저로 울릴 시간까지 설정해줬는데 알림이 오지 않는다면 기본적으로 알림 채널이 생성되어있는 상태인지 확인해보자.

앱 정보를 들어가보면 왼쪽 사진과 같이 Notification(한글 디바이스에서는 알림)이라는 항목이 있을 것이다. 들어가보면 오른쪽 그림처럼 Categories에 아무것도 없을텐데, 이 카테고리에 우리가 띄워줄 알림의 채널을 만들어줘야 한다.

 

만약 위와 같은 항목이 없다면 Oreo 이하 버전일텐데, 이 경우 채널을 따로 생성해주지 않아도 된다. 때문에 알림이 오지 않는다면 채널이 아닌 다른 부분에서 문제가 있는 경우일 것이다.

 

내 경우에는 사용자가 앱을 설치 후 최초로 실행했는지 여부에 따라 채널을 만들어주기로했다.

class MainActivity: AppCompatActivity() {
	....
    
    override fun onCreate() {
    	....
        
        val pref = PreferenceManager.getDefaultSharedPreferences(this)
        val isFirst = pref.getBoolean("isFirst", true)
        if (isFirst) {
            val editor = pref.edit()
            createNotificationChannel()
            editor.putBoolean("isFirst", false)
            editor.apply()
        }
    }
}

PreferenceManager(현재 Deprecated 상태이다..... 이것을 대체할 다른 방법을 찾아본 뒤 포스팅을 해야겠다.)를 사용해 앱이 최초 실행되었는지 확인한다. 만약 최초 실행이라면 createNotificationChannel() 함수를 통해 채널을 생성해준다.

 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
    	as NotificationManager
    val notificationChannel = NotificationChannel(
        "my_channel_id", //channel id
        "테스트 알람",
        NotificationManager.IMPORTANCE_HIGH
    )
    notificationChannel.enableLights(true)
    notificationChannel.lightColor = Color.RED
    notificationChannel.enableVibration(false)
    notificationChannel.description = "알 채널"
    notificationManager.createNotificationChannel(
        notificationChannel)
}

위에 작성한대로 Oreo 이상 버전에만 해당되기 때문에, 버전을 확인한후 해당되는 버전들만 함수의 코드를 실행한다. 위와 같은 코드를 통해 알림 채널을 만들어주면 다음과 같이 채널이 생기게 될 것이다.

 

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
    as NotificationManager

먼저 알림 매니저를 불러와 선언해준다.

val notificationChannel = NotificationChannel(
    "my_channel_id", //channel id
    "테스트 알람", //표시될 알림 채널의 이름
    NotificationManager.IMPORTANCE_HIGH //알림의 중요도
)

다음은 만들어줄 알림 채널을 정의한다. parameter로 3개가 들어가는데, 차례대로 채널 아이디, 채널 이름, 중요도이다. 채널 아이디는 앞으로 알림을 생성할 때, 어떤 알림 채널에 알림을 생성할 지 구분해주는 아이디이다. 보통 상수로 정의한 뒤, Receiver에서도 같이 사용한다. 다음은 알림 채널의 이름이다. 이게 알림이 도착하면 표시되는 이름인걸로 아는데, 시뮬레이터에서는 표시되지 않는다. 좀 더 알아봐야겠다. 마지막은 알림의 중요도인데, IMPORTANCE_HIGH로 설정해주면 위에 팝업이 뜨면서 알림이 발생한다.

 

 

728x90
반응형