일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 앱 광고 설정
- firebase RemoteConfig
- 안드로이드 뒤집히는 뷰
- 애드몹 설정
- RecyclerView in Admob
- 정국라면레시피
- 안드로이드
- android notification
- 우편물재난문자
- android 광고달기
- android 뒤집히는 카드뷰
- 앱에 광고달기
- Android
- android 앱업데이트 없이 변경하기
- 안드로이드 리스트뷰와 광고
- FlipView
- android 터치시 뒤집히는 뷰
- android 영단어 기능 만들기
- android remoteconfig
- 안드로이드 광고
- android 수익
- Android AdMob
- android kotlin
- 불그리레시피
- 테러우편물
- 앱에 광고 수익
- 라면레시피추천
- kotlin
- 국제우편물
- 정국라면
- Today
- Total
TAE
[android/Kotlin] 푸시 메시지 구현 - 푸시 메시지 구현(이미지 푸시, 긴글 푸시) 본문
이번 포스팅에는 기본 노티피케이션, 큰 텍스트 블록 추가(긴 글 메시지 푸시), 이미지 노티피케이션에 대하여 포스팅해보겠습니다.
확장형 알림이라고도 하며, 확장형 알림에 관한 문서는 아래에서 확인하시면 됩니다.
https://developer.android.com/training/notify-user/expanded?hl=ko#image-style
구현내용
- 기본 노티피케이션
- 큰 텍스트 블록 추가(긴 글 메시지 푸시)
- 이미지 노티피케이션
코드
NotificationType.kt
enum class NotificationType(val title: String?, val notificationId : Int) {
NORMAL("일반",0),
EXPANDABLE("확장형",1),
IMAGE("이미지",2)
}
MyFirebaseMessagingService.kt
class MyFirebaseMessagingService : FirebaseMessagingService() {
companion object {
private const val CHANEL_NAME = "myChanel"
private const val CHANNEL_DESCRIPTION = "myChanel"
private const val CHANNEL_ID = "Chanel ID"
}
override fun onNewToken(token: String) {
super.onNewToken(token)
Log.d("firebase","token==$token")
//토큰이 변경 될 경우 작업
}
override fun onMessageReceived(message: RemoteMessage) { //메시지 처
super.onMessageReceived(message)
//8.0 이상일 경우 채널 생성
//채널은 앱 실행할 때 생성 하는 것이 좋음
createNotificationChannel()
val type = message.data["type"]?.let {
NotificationType.valueOf(it)
}
if (type != null) {
NotificationManagerCompat.from(this)
.notify(type.notificationId, createNotification(type, message))
}
}
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel =
NotificationChannel(CHANNEL_ID, CHANEL_NAME, NotificationManager.IMPORTANCE_HIGH)
channel.description = CHANNEL_DESCRIPTION
val notificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
private fun createNotification(type: NotificationType, message: RemoteMessage): Notification {
val title = message.data["title"]
val notificationMessage = message.data["message"]
val imageUrl = message.data["imageUrl"]
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(notificationMessage)
.setPriority(NotificationCompat.PRIORITY_HIGH)
when (type) {
NotificationType.EXPANDABLE -> {
notificationBuilder.setStyle(
NotificationCompat.BigTextStyle().bigText(notificationMessage)
)
}
NotificationType.IMAGE -> {
val futureTarget = Glide.with(this)
.asBitmap()
.load(imageUrl)
.centerCrop()
.submit()
val bitmap = futureTarget.get()
notificationBuilder
.setLargeIcon(bitmap)
.setStyle(
NotificationCompat.BigPictureStyle()
.bigPicture(bitmap)
.bigLargeIcon(null)
)
}
else -> {}
}
return notificationBuilder.build()
}
}
onNewToken
app마다 고유한 token값이 있는데 이 token값이 변경될 때 호출됩니다.
token값이 변경되는 케이스는 아래 케이스 일 경우 변경됩니다.
1. 새 기기에서 앱을 설치했을 경우
2. 기존 기기에서 앱을 제거/재설치했을 경우
3. 기존 기기에서 앱 데이터를 삭제했을 경우 등
onMessageReceived
실질적으로 메시지 처리가 되는 곳입니다.
안드로이드 8.0 단말 이상부터는 notificationChannel을 생성하여야 합니다.
createNotificationChannel
채널을 생성하는 메서드이며 ChannelID, ChannelName, importance(중요도)를 넘기며
중요도는 아래 표와 같이 구성되어 있습니다.
createNotification
메시지 처리를 위한 메소드이며 enum클래스에서 정의한 type과 bundle data인 RemoteMessage를 인자로 넘겨줍니다.
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(notificationMessage)
.setPriority(NotificationCompat.PRIORITY_HIGH)
setSmallIcon : 노티피케이션에서 표시될 아이콘
setContentTitle : 타이틀 표시
setContentText : 메시지 내용 표시
setPriority : 중요도 표시
기본적으로 알림 메시지를 구성후 타입별로 추가 구성을 하여줍니다.
확장형 알림일 경우
notificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(notificationMessage))
setStyle로 BigTextStyle().bigText를 넘겨주며 bigText인자로는 사용하실 메시지 내용을 넘겨줍니다.
이미지일 경우
Glide로 imageUrl을 받아 bitmap으로 만든 후 BigPictureStyle().bigPicture(bitmap)으로 만들어준 bitmap을 넘겨줍니다.
마지막으로 notificationBuilder.build()를 return 하여 줍니다.
https://firebase.google.com/docs/cloud-messaging/android/receive?hl=ko
'android > 코드' 카테고리의 다른 글
[Android / Kotlin] SNS(카카오)로그인 (0) | 2023.06.23 |
---|---|
[android/Kotlin] 푸시 메시지 구현 - firebase 프로젝트 만들기 (0) | 2023.03.21 |
[Android/Kotlin] 비디오에서 썸네일 이미지 지정하기 - 비디오 썸네일 지정(2) (0) | 2023.03.20 |
[Android/Kotlin] registerForActivityResult사용하여 앨범에서 사진 선택하기- 비디오 썸네일 지정(1) (0) | 2023.03.20 |
[Android/Kotlin] 커스텀 앨범 만들기 - 커스텀 갤러리(2) (0) | 2023.03.17 |