Android (안드로이드)

[Android] Notification (1) - 알림 / 알림 사용해보기

Oscar:) 2024. 9. 15. 17:58

 

 

 

안드로이드에서 알림 기능을 사용할 수 있는

Notification 클래스에 대해 알아보자.

 

 

 


 

Notificaiton

 

 

안드로이드에서 Notification은(이하 알림) 다양한 위치와 형식으로 사용자에게 표시된다.

간단하게 미리 만들어둔 테스트 앱으로 확인해보자.

 

 

 

● 상태 표시줄에는 아이콘으로 표시된다.

 

 

 

 

 

● 앱 아이콘에는 뱃지가 표시된다.

 

 

 

 

 

● 메인 알림은 알림 드로어에 표시된다.

 

 

 

 

 

● 물론 팝업 형태로 확인할 수도 있다.

 

 

 

 

 

● 알림드로어의 알림 기본 구조는 다음과 같다.

 

출처: 안드로이드 공식 문서

 

 

① Small icon

알림을 표시하는 작은 아이콘으로, 필수 요소이다.

setSmallIcon() 함수로 세팅할 수 있다.

 

② App name

앱 이름이 표시되는 텍스트다.

안드로이드 기본 시스템에서 제공해주기에 별도 세팅이 필요없다.

 

③ Time stamp

알림의 타임 스탬프를 표시하는 텍스트다.

앱 이름과 마찬가지로 기본 시스템에서 제공된다.

 

④ Large icon

알림 우측에 표시되는 비교적 커다란 아이콘이다.

setLargeIcon() 함수로 세팅할 수 있다.

필수 요소는 아니라서 알림 생성 시 생략할 수 있다.

 

⑤ Title

알림 제목을 표시하는 텍스트다.

setContentTitle() 함수로 세팅할 수 있으며 필수 요소는 아니다.

 

⑥ Text

알림의 세부 내용을 표시하는 텍스트다.

setContentText() 함수로 세팅할 수 있으며 필수 요소는 아니다.

 

 

 

 

이제 위 알림을 직접 구현해보자.

 

 

 

 


 

알림 구현

 

 

알림을 직접 만들어보기 전에, 기본적인 구조에 대해 간단히 알고가면 좋다.

 

NotificationManager를 사용하여 지속적인 알림을 표시하는 구조다.

NotificationCompat.Builder를 추가하여 알림을 세부적으로 구성할 수 있다.

NotificationChannel을 통해 알림을 식별하여 관리할 수 있다.

 

 

위 3가지를 기억하고 아래 코드를 보면 이해에 도움이 될 것이다.

 

 

* Andorid 버전 8부터 NotificationChannel 개념이 도입되었다.

  이 포스팅에서 Android 8 이하 버전은 다루지 않는다.

 

 


 


✅ Manifast 파일에 알림 권한 추가

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

 

알림을 보내기 위해서는 Manifast에 위 권한을 추가해줘야 한다.

 

 

 

 

✅ NotificationManager & NotificationChannel 생성

val channelId = "Channel1"
val channelName = "Oscar's Notification Channel"

val notificationManager = NotificationManagerCompat.from(applicationContext)

if (notificationManager.getNotificationChannel(channelId) == null) {
	val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH).apply {
		enableLights(true)
		enableVibration(true)
	}
	notificationManager.createNotificationChannel(channel)
}

 

 

NotificationManager를 통해 NotificationChannel을 등록하는 과정이라고 보면 된다.

NotificationChannel을 생성할 때는 다음과 같이 3가지 파라미터를 받는다.

 

● channelId

알림의 식별자 역할을 한다.

사용자에게는 '알림 카테고리'로서 분류되기에 Channel 단위로 알림을 on/off 할 수 있다.

 

● channelName

단순히 channelId 마다 이름을 붙여주는 용도이다.

위에서 말한 '알림 카테고리'에서 표시되는 이름으로써 사용된다.

 

● importance

알림의 중요도를 뜻한다.

중요도에 따라 표시되는 형식이 달라진다.

 

- IMPORTANCE_HIGH : 알림음이 울리며 헤드업 알림(팝업)이 표시된다.
- IMPORTANCE_DEFAULT : 알림음이 울린다.
- IMPORTANCE_LOW : 알림음이 울리지 않는다.

 

일반적으로 기대하는 알림을 보려면 IMPORTANCE_HIGH를 사용하면 된다.

 

 

그 외에도 Channel 단위로 enableLight, enableVibration 등으로 불빛, 진동 등의 옵션을 설정할 수 있다.

 

 

* 코드 중간에 알림 채널에 대한 null 체크를 진행했는데,

  동일한 채널로 이미 생성된 NotificationManager가 존재할 경우

  또 생성하여 사용하면 정상적으로 알림이 발생하지 않기 때문이다.

 

 

 

 

✅ NotificationCompat.Builder를 통해 Notification 생성

val title = "Notification Title"
val body = "Notification Message"

val notification = NotificationCompat.Builder(applicationContext, channelId).apply {
	setContentTitle(title)
	setContentText(body)
	setSmallIcon(R.drawable.ic_launcher_foreground)
}.build()

 

 

NotificationCompat.Builder의 생성자 파라미터에 Context와

이전 예제에서 생성해주었던 NotificationChannel의 ID를 넣어준다.

 

그리고 해당 알림의 내용을 채워주면 된다.

 

 

- setContentTitle : 알림에 표시될 제목

- setContentText : 알림에 표시될 내용

- setSmallIcon : 알림 아이콘 (필수값으로, 세팅하지 않으면 에러 발생)

 

위 요소들은 모두 포스팅 도입부에서 설명한 내용들이다.

간단히 제목과 내용을 세팅해주고, SmallIcon은 필수 값이기에 기본 이미지를 넣어주었다.

 

 

 

 

✅ NotificationManager를 통해 Notification 발사

notificationManager.notify(0, notification)

 

 

첫 번째 예제에서 만들었던 NotificationManager의 notify()함수를 사용한다.

 

파라미터는 2개를 받는데,

첫 번째는 NotificationId 값으로, 알림의 식별자라고 생각하면 된다.

두 번째에는 위에서 만들어줬던 Notification을 작성해주면 된다.

 

 

 

 

✅ 결과

 

위 예제 3덩이를 이어붙이고, 버튼을 클릭해보자.

button.setOnClickListener {
	// NotificationManager & NotificationChannel 생성
	// NotificationCompat.Builder를 통해 Notification 생성
	// NotificationManager를 통해 Notification 발사
}

 

 

 

 

 

알림이 잘 도착했다.

 

 

 


 

 

 

 

이번 포스팅에서는 Notification의 기본 구조와 실행 방법에 대해 간단히 알아보았다.

 

이어지는 다음 포스팅에서는 알림에 대한 클릭 이벤트와 Notification ID 등의

식별자를 변경해가며 알림 드로어를 자세히 살펴보겠다.