안드로이드에서 알림 기능을 사용할 수 있는
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 등의
식별자를 변경해가며 알림 드로어를 자세히 살펴보겠다.
'Android (안드로이드)' 카테고리의 다른 글
[Android] Notification (3) - Group Notification / Notification 그룹화 (6) | 2024.09.17 |
---|---|
[Android] Notification (2) - 알림 클릭 이벤트 / PendingIntent / Notification Channel · Notification ID 식별 테스트 (2) | 2024.09.16 |
[Android] 안드로이드 기기 고유 값 얻기 / 기기 식별자 / SSAID (4) | 2024.09.01 |
[Android] AES (2) - Android 환경에서 AES 사용하기 (0) | 2024.08.19 |
[Android] AES (1) - AES란? / 암호화 / 복호화 사용해보기 (0) | 2024.08.18 |