HOME
홈페이지제작
쇼핑몰제작
어플리케이션
기능별홈페이지
포트폴리오
ERP 솔루션
유지보수
온라인마케팅
커뮤니티

안드로이드에서 파이어베이스 푸시메시지에 대한 모든것 > 자료실

본문 바로가기

홈페이지

어플리케이션

프로그램

오늘 방문자

제작상담

■ 어떠한 것이든 설명이 가능하시면 제작이 가능합니다.
■ 각종 다양한 어플리케이션 제작경험이 많습니다.
■ 다양한 유형별 홈페이지,쇼핑몰 제작경험이 많습니다.
■ 업종별 주문형 프로그램 제작 가능합니다.
VR,AR 이용한 결과물 및 모듈제작 가능합니다.

 

자료실

네이티브 | 안드로이드에서 파이어베이스 푸시메시지에 대한 모든것

페이지 정보

작성자 강석호 작성일20-09-23 10:43 조회61회 댓글0건

본문

파이어베이스 푸시메시지를 받으면 앱 내부에 FirebaseMessagingService() 클래스를 상속받는 클래스를 만들고 onMessageReceived() 함수를 오버라이딩 해야 합니다.

 

서버에서 전달 된 푸시메시지는 onMessageReceived() 함수로 전달 되게 되는데 가끔 백그라운드에서 onMessageReceived() 함수의 매개변수인 RemoteMessage 를 받지 못할 때가 있습니다. 

 

이때는 서버측에서 메시지를 보내는 키 타입 2개 중(data, notification) notification을 삭제하고(꼭 삭제 해야함) data로만 보내야 백그라운드에서도 푸시 데이터를 받을 수 있습니다.

 

참고 사이트 : https://blogdeveloperspot.blogspot.com/2018/03/fcm-notification-foreground-background.html

 

그리고 안드로이드 8버전(오레오) 이후 부터는 notification channel을 생성 해 주어야 합니다.

 

channel은 간단히 설명하자면 알림 종류를 묶어놓는 카테고리라고 보시면 됩니다.

 

img.png

 

위 사진을 보시면 각 용도에 맞는 알림을 수신할지에 대한 여부를 설정할 수 있는데 각 항목이 channel이 되는 것입니다.

 

channel은 한번 생성이 된 이후는 앱 삭제 혹은 코드에서 강제 삭제 하지 않는 이상 삭제되지 않습니다. 그래서 만약 쓰지 않는 채널이 있다면 코드에서 직접 삭제를 하셔야 합니다.

 


private fun createNotificationChannel(context: Context, importance: Int, showBadge: Boolean,
name: String, description: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channelId = "${context.packageName}-$name"
val channel = NotificationChannel(channelId, name, importance)
channel.description = description
channel.setShowBadge(showBadge)

val notificationManager = context.getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(channel)
}
}

채널은 위 소스와 같이 만들 수 있습니다.

 

 

  • Channel Id : 앱마다 unique한 ID를 생성해야 하며, 길면 잘릴 수 있습니다.
  • Channel Name : 사용자에게 보여지는 채널의 이름입니다.
  • Channel Importance: 채널이 중요도를 의미하며, IMPORTANCE_DEFAULT, IMPORTANCE_HIGH 등으로 설정할 수 있습니다.

채널이 생성되면, 노티피케이션을 등록할 수 있습니다. 노티피케이션을 등록할 때 채널을 만들 때 사용한 Channel Id를 사용해야 합니다. 

 

channel에는 중요도를 설정할 수 있습니다. 중요도 설정에 따라 푸시가 오는 타입이 달라집니다. 중요도를 high로 설정할 경우 헤드업 알림으로 표시되게 됩니다.

 

채널을 생성하는 함수를 만들었다면 앱에 푸시 메시지를 전달하여야 합니다.

 

그 전에 PendingIntent를 설정해야 합니다. PendingIntent란 푸시 메시지를 사용자가 터치하였을 때 이동하는 액티비티를 지정하는것입니다.

 

makeIntent() 라는 함수를 하나 만들어서 intent를 return 합니다.

 

makeIntent() 함수에는 푸시의 상태에 따라 이동할 수 있는 액티비티를 다르게 주면 됩니다. 그러면 푸시 메시지 타입마다 이동하는 액티비티가 달라지게 됩니다.

 

그리고 PendingIntent를 해당 intent로 만들고 notificationManager 를 생성하여 푸시를 보내면 됩니다

 


val pendingIntent = PendingIntent.getActivity(
this@MyFirebaseMessagingService,
100,
makeIntent(),
PendingIntent.FLAG_UPDATE_CURRENT
)
var builder: NotificationCompat.Builder = if (Build.VERSION.SDK_INT >= 26) {
createNotificationChannel(
this@MyFirebaseMessagingService,
NotificationManagerCompat.IMPORTANCE_HIGH,
false,
getString(R.string.app_name_eng),
"App notification channel"
)
NotificationCompat.Builder(
this@MyFirebaseMessagingService,
"$packageName-${getString(R.string.app_name_eng)}"
)
} else {
NotificationCompat.Builder(this@MyFirebaseMessagingService)
}

builder.apply {
setSmallIcon(R.mipmap.ic_launcher)
setContentTitle(title)
setContentText(message)
priority = NotificationCompat.PRIORITY_HIGH
//setDefaults(Notification.DEFAULT_SOUND)
setAutoCancel(true)
setContentIntent(pendingIntent)
}

NotificationManagerCompat.from(this@MyFirebaseMessagingService)
.notify(if (send_type == "admin_notice") 1000 else 1001, builder.build())

​이렇게 모든 필요한 사항을 만들고 notify에 id, notificationBuilder를 지정하면 앱에 푸시메시지가 전송됩니다.

 

 


| 디몬스터 | TEL : 070-7621-0572 / 070-5022-0572 | HP : 010-7574-0572 | E-mail : jackee@naver.com
| 서울시 강남구 봉은사로24길46 · 부산시 금정구 금정로 225 5층
당사의 어플방식은 저작권 및 특허출원중입니다. 복제,모방,변용 및 유사 상행위 적발시,경고,통보없이 민형사상 책임을 진행합니다
Copyright © www.dmonster.co.kr All rights reserved.Since 2008 (주)세미콜론즈 · 사업자번호: 801-88-00338