안드로이드 Oreo 버전 Notification 적용 하면서 알게된 점 정리
1. 앱 알림 설정에서 기타 설정이 있는데,
이부분은 FCM 에서 기본으로 정의한 채널이다.
해당 채널을 없애고 싶다면,
AndroidManifest 에서
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
<meta-data
//title: 'Title of your push notification',
// body: tempMsg
//},
이런 형식으로 보내주면 App 이 BackGround 상태에서도 onMessageReceived를 호출한다.
만약 웹서버가 없다면 Postman을 이용하여 post 방식으로 다음과 같이 호출하면 된다 .
Url : https://fcm.googleapis.com/fcm/send
Header
1. key: Content-Type value: application/json
2. key: Authorization value: key= FCM Sever Key
body
val notifManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notifManager.createNotificationChannelGroup(NotificationChannelGroup(GroupID, GroupName)
val notificationChannel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH)
notificationChannel.enableLights(true)
notificationChannel.enableVibration(true)
notificationChannel.vibrationPattern = longArrayOf(100, 200)
notificationChannel.group = groupId
notifManager.createNotificationChannel(notificationChannel)
4 Full Source
위에서 보낸 데이터 형식을 Gson 을 이용하여 Message 클래스를 정의 후 아래와 같이 처리가 가능합니다.
GroupId, GroupName, ChannelId, ChannelName 등은 각자 정의를 해주시면 됩니다.
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String?) {
super.onNewToken(token)
sendTokenToRegisterOnServer(token)
}
private fun sendTokenToRegisterOnServer(token: String?) {
// Handle your logic
}
override fun onMessageReceived(rMsg: RemoteMessage?) {
rMsg?.let {
createNotificationChannels()
sendNotification(it.data)
}
}
private fun sendNotification(data : Map<String, String>) {
val gson = Gson()
val message = gson.fromJson(data["message"], NotificationMessage::class.java)
val channelId = message.channel
val notifManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val builder = NotificationCompat.Builder(applicationContext, channelId)
val notificationIntent = Intent(applicationContext, MainActivity::class.java)
notificationIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
val requestID = System.currentTimeMillis().toInt()
val pendingIntent = PendingIntent.getActivity(applicationContext, requestID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT)
builder
.setContentTitle(message.title)
.setContentText(message.content)
.setGroup(GroupId)
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher))
.setBadgeIconType(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
notifManager.notify(0, builder.build())
}
private fun createNotificationChannels() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
val notifManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notifManager.createNotificationChannelGroup(NotificationChannelGroup(GroupId, GroupName))
val notificationChannel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH)
notificationChannel.enableLights(true)
notificationChannel.enableVibration(true)
notificationChannel.vibrationPattern = longArrayOf(100, 200)
notificationChannel.group = GroupId
notifManager.createNotificationChannel(notificationChannel)
}
}
}
'공부방 > Android' 카테고리의 다른 글
Android dialog change button text color using style (0) | 2019.02.19 |
---|---|
Using Youtube API In Android (0) | 2019.02.11 |
안드로이드 스튜디오 Oreo 앱 Install 안되는 현상 (0) | 2018.12.03 |
안드로이드 스튜디오 OS 8 이상 앱 디버그 빌드 실행시 죽는 현상 (0) | 2018.07.25 |
안드로이드 Viewpager 안에 RecyclerView 있을때 Appbar 스크롤 버벅임 현상 (0) | 2018.07.25 |
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!