๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
์๋ ํ์ธ์ ํ์ฌ ๊ธฐ์์ฌ ์ธํ์ค์ ์ํ ์ดํ์ ์ ์ํ๊ณ ์๋ mandy์ ๋๋ค ๐
๊ทธ๋์ ๊ธฐ์์ฌ ์ธํ๊ธฐ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ 2์ธต๊น์ง ๋นจ๋์ ์ธ์ ๋ฅผ ๋ค๊ณ ๋ด๋ ค๊ฐ ๋น์ด์๋ ์ธํ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์๋๋ฐ์
๋น์ด์๋ ์ธํ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ,, ๋ฌด๊ฑฐ์ด ๋นจ๋์ ์ธ์ ๋ฅผ ๋ค์ ๋ค๊ณ ์ฌ๋ผ๊ฐ๊ฑฐ๋ ๋ค์ ๋ด๋ ค์์ ๋นจ๋๋ฅผ ๋๋ฆฌ๊ณ ๊ฐ์ผ ํ๋ค๋ ์ด์๊ฐ ์์๋ต๋๋ค ใ
ใ
ใ
๐ฅฒ ๐ฅฒ ์ธํ๊ธฐ๊ฐ ๋ค ์ฐจ์๋ ๊ด๊ฒฝ์ ๋ณผ ๋์ ๊ธฐ๋ถ์ด๋... ํนํ ์ํ ๊ธฐ๊ฐ ์ง์ฅ

์ฝ 4๋ ๊ฐ ๊ทธ๋ฐ ์ํ์ ๊ฒช์ผ๋ ๊ฐ๋จํ๊ฒ ์ธํ๊ธฐ์ ์ฌ์ฉ ์ฌ๋ถ์ ๋จ์ ์๊ฐ์ ํ์ธํ ์ ์๋ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฑฐ๋ ์๊ฐ์ด ๋ค์์ด์!!!
๊ทธ๋ ๊ฒ ๊ธฐ์์ฌ ์ธํ๊ธฐ ํ์ด๋จธ ์ฑ ๊ฐ๋ฐ ์ฌ์ ์ด ์์๋์์ด์~!
์ ๋ฒ์ฃผ์ ์ด์๋ ์ธํ์ด ์๋ฃ๋๋ฉด firebase cloud message๋ฅผ ํตํด ํด๋ํฐ์ผ๋ก ์๋ฆผ์ ์ ์กํด์ฃผ๋ ๊ธฐ๋ฅ์ด์์ด์!
๋ง์ ์ฐ์ฌ๊ณก์ ๋์ ๋๋์ด ๊ตฌํ์ ์ฑ๊ณตํ์ฌ ์ด๋ ๊ฒ ํ๋ฆ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค!! ๐ ๐ ๐
์งํ ์ํฉ
ํ์ฌ๊น์ง์ ์งํ ์ํฉ์ ์ฑ ํ๋ฉด์์ ์ธํ๊ธฐ์ ์ฌ์ฉ ์ฌ๋ถ์ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ์๋ฃ ์๊ฐ์ ํ์ํด์ฃผ๋ ๋จ๊ณ๊น์ง ์์ด์
์ด์ ๋ ๋์๊ฐ ์๋ฃ ์๊ฐ์ด ๋์์ ๋ ์ฌ์ฉ์์๊ฒ ํธ์ ์๋ฆผ์ ์ฃผ์ด ์ธํ๋ฌผ์ ์ฐพ์๊ฐ ์ ์๊ฒ๋ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ฃผ๋ ค ํด์ ๋ณธ๊ฒฉ์ ์ผ๋ก FCM ๊ธฐ๋ฅ์ ๋ํด ์ค๋ช ํ๊ธฐ ์ ์ ์๋ฆผ์ ๋ํด ์์๋ณด๋๋ก ํด์!
Notification Channel ์์๋ณด๊ธฐ
์ฐ๋ฆฌ๋ ํด๋ํฐ์ ๋ค์ํ ์ฑ์ผ๋ก๋ถํฐ ํ๋ฃจ์๋ ์๋ง์ ์๋ฆผ์ ๋ฐ๊ณ ์์ด์. ๋ํ ํด๋์ ํ์ ์ค์ ์์ ์ํ๋ ์ฑ์ ์๋ฆผ๋ง ๋ฐ์ ์ ์๋๋ก ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์์ด์. ํ์์๋ ์๋ฌด ์๊ฐ ์์ด ์๋ฆผ์ ๋ฐ์ง๋ง ์ค์ ๋ก ๊ตฌํํ๋ค ๋ณด๋ ๋ค ๊ฐ๋ฐ์์ ์์ ๊ฑฐ์ณ๊ฐ ๊ฒฐ๊ณผ์์ด์
๊ทธ์ค ์ฒซ ๋ฒ์งธ๋ ๋ฐ๋ก ์๋ฆผ ์ฑ๋์ด์์! ์ฝ๊ฒ ๋งํด ์๋ฆผ ์นดํ ๊ณ ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋๋ฐ์. Android 8.0(Oreo)๋ถํฐ ๋์ ๋ ๊ฐ๋ ์ผ๋ก ์ฌ์ฉ์๊ฐ ๊ธฐ๊ธฐ์ ์๋ ๋ชจ๋ ์๋ฆผ ์ฑ๋( ์ฆ ์นดํ ๊ณ ๋ฆฌ)์ ์ค์ ์ ์์ ํ ์ ์์ด์
ํด๋ํฐ์ ์๋ ๋ ์จ ์ฑ์ ์๋ฆผ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ ๋ฐ์ดํธ ์๋ฆผ๋ถํฐ ์๋ก๊ณ ์นจ ์๋ฆผ๊น์ง ๋ค์ํ ์๋ฆผ์ด ์์ด์. ์ค๋ฅธ์ชฝ์ ํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์ฑ์ ์๋ฆผ ์นดํ ๊ณ ๋ฆฌ์ด๋ค์ ๐
ํ์ฌ๋ ์ธํ๊ธฐ ์๋ฃ ์๋ฆผ๋ง ์์ด์ ์ถํ ๋ค๋ฅธ ์๋ฆผ๋ ์ถ๊ฐ๋ ์์ ์ด์์!


Notification ์ฝ๋๋ก ์์๋ณด๊ธฐ
์ ์ค๋ฅธ์ชฝ ์ฌ์ง์ ์๋ฆผ ์ฑ๋์ด ์ด์ฝ๋๋ก ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ์ธ๋ฐ์. ํฌ๊ฒ ๋ ๋จ๊ณ๋ก ๋๋ ์ ์์ด์!
fun createNotificationChannel(channelId:String) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
// Create the NotificationChannel
val name = "washerChannel"
val descriptionText = "์ธํ์ด ์๋ฃ๋์์ด์"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(channelId,name,importance).apply {
description=descriptionText
}
// Register the channel with the system
val notificationManager:NotificationManager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
- ๊ณ ์ ํ ์ฑ๋ID, ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ์ฑ๋ ์ด๋ฆ, ์ค์๋ ์์ค์ ์ฌ์ฉํ์ฌ NotificationChannel ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํด์ค๋๋ค
- ๊ทธ๋ค์ ๋ง๋ ์๋ฆผ ์ฑ๋ ๊ฐ์ฒด๋ฅผ createNotificationChannel()์ ์ ๋ฌํ์ฌ ๋ฑ๋กํด ์ค๋๋ค
์ด๋ ๊ฒ ์๋ฆผ ์ฑ๋์ ๋ง๋ค์ด์ฃผ์์ผ๋ฉด ์ค์ ๋ก ๊ธฐ๊ธฐ์ ๋์์ค ์๋ฆผ ํํ๋ฅผ ๊ตฌ์ฑํด ์ฃผ์ด์ผ๊ฒ ์ฃ ?
์๋ฆผ ์ฝํ ์ธ ์ค์ ๋ฐ ํ์ํด ์ฃผ๊ธฐ
์๋ ์ฌ์ง์ฒ๋ผ ๊ฐ๋จํ๊ฒ ์ธํ๊ธฐ ์๋ฆผ์์ ์๋ ค์ฃผ๋ ์ธํ๊ธฐ ์์ด์ฝ๊ณผ ์ธํ์ด ์๋ฃ๋์๋ค๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ฃผ๊ณ ์ถ์์ด์!

์๋ฆผ ์ฝํ ์ธ ์ค์ ๋ฐ ํ์ ์ฝ๋๋ก ์์๋ณด๊ธฐ
๋ฐ๋ก ์ฝ๋๋ฅผ ์ดํด๋ณผ๊น์? ํฌ๊ฒ ๋ ๋จ๊ณ๋ก ๋๋ ์ ์์ด์!
- ์๋ฆผ ์ฝํ ์ธ ์ค์ ํ๊ธฐ
- ์๋ฆผ ํ์ํด ์ฃผ๊ธฐ
@SuppressLint("MissingPermission")
fun showSimpleNotification(
channelId:String,
notificationId: Int,
title:String,
body:String,
priority:Int = NotificationCompat.PRIORITY_DEFAULT
) {
//์ผ๋ฆผ ์ฝํ
์ธ ์ค์
var builder = NotificationCompat.Builder(this,channelId)
.setSmallIcon(R.drawable.washing_machine)
.setContentTitle(title)
.setContentText(body)
.setPriority(priority)
//์๋ฆผ ํ์
with(NotificationManagerCompat.from(this)) {
notify(notificationId,builder.build())
}
}
์ฐ์ ์๋ฆผ ์ฝํ ์ธ ๋ฅผ ์ค์ ํด ์ฃผ๊ธฐ ์ํด NotificationCompat.Builder ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์.
* NotificationCompat๋ ์ฝ๊ฒ ๋งํด Notification์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋์ฐ๋ฏธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค!!
NotificationCompat.Builder๋ ์์ฑ์๋ก context์ ์ฑ๋ ID๋ฅผ ์ ๋ฌํด ์ค๋๋ค. ํํ๋ ์๋์ ๊ฐ์์!
Builder(@NonNull Context context, @NonNull String channelId)
context ์๋ฆฌ์ ๋ค์ด๊ฐ this์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด? ์๋๋ฅผ ํ์ธํด์ฃผ์ธ์!
ํ์ฌ ์ฝ๋ ์์๋ context์๋ฆฌ์ this๊ฐ ๋ค์ด๊ฐ ์์ด์.
๐ ์ context๋ฅผ ๋ฃ์ด์ผ ํ ์๋ฆฌ์ this๋ฅผ ์ ๋ ๊ฑด๊ฐ์?
๋ผ๋ ์ง๋ฌธ์ด ๋ค๋ฆฌ๋ ๊ฒ ๊ฐ๋ค์ ๐
์ค์ ์ ์ฝ๋์ this๋ถ๋ถ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ์ด FirebaseCloudMessagingService๋ผ๋ ํ์ฌ ํด๋์ค๊ฐ ๋์ค๊ณ ์์ด์.

์์ผ๊น์?
๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด!!
kotlin์ this๋ ํด๋์ค์ ๋ฉค๋ฒ ๋ด์์, this๋ ํด๋น ํด๋์ค์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ํ๋ธ๋ค๊ณ ํด์.
ํ์ฌ ํด๋์ค์ ๊ฐ์ฒด๋ ๊ฒฐ๊ตญ ํ์ฌ์ Context์ ์ญํ ๋ ์ํํ๋ค๊ณ ํด์
Context๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๋ํ global information์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํด์
์ฝ๊ฒ ๋งํด Context๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ฐ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ํ ์ ์๋ค๊ณ ์ดํดํ๋ฉด ๋์ด์!
๊ฒฐ๊ตญ ํ์ฌ ํด๋์ค์ธ FirebaseCloudMessageService ํด๋์ค์ ์ธ์คํด์ค๋ฅผ Context๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์์ Context๋ฅผ ํ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํด์
๋ฐ๋ผ์ ์์ฒ๋ผ this๋ฅผ Context ์๋ฆฌ์ ๋ฃ์ด์ค ์ ์๋ ๊ฑฐ์์
์ฐจ๋ก๋ก Icon์ ์ ๊ฐ ์ํ๋ ์ธํ๊ธฐ ์์ด์ฝ์ผ๋ก ์ค์ ํด ์ฃผ๊ณ , ์ ๋ชฉ(title), ๋ณธ๋ฌธ(body), ๋ง์ง๋ง์ผ๋ก ์ค์๋๋ฅผ ๋ด๊ณ ์๋ priority๋ฅผ ์ค์ ํด ์ฃผ์์ด์.
๊ทธ๋ค์์ผ๋ก ์ด๋ ๊ฒ ์ค์ ํด ์ค ์๋ฆผ ์ฝํ ์ธ ๋ฅผ ํ์ํด ์ฃผ๊ธฐ ์ํด์๋
NotificationManagerCompat.notify( )๋ฅผ ํธ์ถํ์ฌ ์๋ฆผ ์ฑ๋์ ๊ณ ์ ID์ NotificationManager.notify()์ ๊ฒฐ๊ณผ์ธ ์๋ฆผ์ ํ์ํด์ฃผ๋๋ฐ์. notification์ ์ํ์ค ๋ฑ์ ๋ณด์ด๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ ํด์!
์ด ๋ NotificationManager๋ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ํด๋์ค๋ก, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ์์ ์ฌ์ฉ์์๊ฒ ์๋ฆด ๋ ์ฌ์ฉ๋์ด์.
//์๋ฆผ ํ์
with(NotificationManagerCompat.from(this)) {
notify(notificationId,builder.build())
}
- ์ฐ์ NotificationManagerCompat.from(this) ๋ฅผ ํตํด ํ์ฌ ์ผํ ์คํธ์์ NotificationManagerCompat ๊ฐ์ฒด๋ฅผ ์ป์ด์์
- with ํจ์๋ฅผ ํตํด ์์์ ๋ฐํ๋ NotificationManagerCompat ๊ฐ์ฒด์ ๋ํ ๋ธ๋ก์ ์คํํฉ๋๋ค
- notify(notificationId, builder.build()) ๋ฅผ ํตํด์๋ NotificationManagerCompat ๊ฐ์ฒด์ notify ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์๋ฆผ์ ํ์ํด์ค์
์ ๋ฆฌํ๊ธฐ
์๋๋ก์ด๋์์ ๋ ธํฐ ์๋ฆผ์ ์ฃผ๊ธฐ ์ํด์๋ ์๋์ 3๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด ๋ฉ๋๋ค :>
โ ์๋ฆผ ์ฑ๋ ์์ฑ
โ ์๋ฆผ ์ฝํ ์ธ ์ค์
โ ์๋ฆผ ํ์
์ด๋ฒ ํฌ์คํ ์ด Android์ Notification์ ์ดํดํ๋๋ฐ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์ด๋ฒ ๊ธ์ ๋ง๋ฌด๋ฆฌํ๋๋ก ํ ๊ฒ์ ๐
๐ ๊ฐ๋ฐ ์ฌ์ 2ํ ์๊ณ
notification์ ๋ํด์ ์์๋ณด์์ผ๋ ์ด์ FCM์ ๋ํด ์์๋ณผ ์ฐจ๋ก์์!!
๋ด์ฉ์ด ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ๋ค์ ํฌ์คํ ์ผ๋ก ๊ฐ์ ธ์ค๋๋ก ํ ๊ฒ์
๐โโ๏ธ ๐โโ๏ธ ๊ทธ๋ผ ๋ค์ 2ํ๋ ๊ธฐ๋ํด์ฃผ์ธ์!!
์ง๋ฌธ์ ์ธ์ ๋ ํ์์ ๋๋ค~ ๋๊ธ์ ํตํด ๋จ๊ฒจ์ฃผ์ธ์

๊ทธ๋ผ ์ด๋ง ์ด์ด ๐พ ๐พ
์ฐธ๊ณ ์ฌ์ดํธ
https://developer.android.com/training/notify-user/channels?hl=ko
์๋ฆผ ์ฑ๋ ๋ง๋ค๊ธฐ ๋ฐ ๊ด๋ฆฌ | Android ๊ฐ๋ฐ์ | Android Developers
์๋ฆผ ์ฑ๋ ๋ง๋ค๊ธฐ ๋ฐ ๊ด๋ฆฌ ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. Android 8.0(API ์์ค 26)๋ถํฐ๋ ๋ชจ๋ ์๋ฆผ์ ์ฑ๋์ ํ ๋นํด์ผ ํฉ๋๋ค. ์ฑ๋๋ง๋ค ์ฑ๋์
developer.android.com
https://kotlinlang.org/docs/this-expressions.html
This expressions | Kotlin
kotlinlang.org
'๐ค2024 ์๋๋ก์ด๋ > ๊ธฐ์์ฌ ํ๋ก์ ํธ ๊ธฐ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Compose์์ ๊ตฌ์ฑ๋ณ๊ฒฝ ์ ์ ์ฅ๋์ง ์๋ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (2) | 2024.01.21 |
---|---|
android Flow ์์๋ณด๊ธฐ (2) | 2024.01.21 |
compose์ preferences datastore ์ด์ฉํ๊ธฐ (1) | 2024.01.18 |
kotlin coroutines basic ๊ณต์๋ฌธ์ ์ฝ์ด๋ณด๊ธฐ (0) | 2024.01.17 |
๐ Android FCM ์ ์ฉ๊ธฐ 2ํ : FCM + Retrofit (0) | 2024.01.07 |