HOME
회사소개
포트폴리오
커뮤니티
고객평가
갤러리
무료봉사
온라인마케팅
최근 신기술
제작/컨설팅
솔루션

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

본문 바로가기

홈페이지

어플

프로그램

오늘 방문자

제작상담

■ 어떠한 것이든 설명이 가능하시면 제작이 가능합니다.
■ 저희는 거의 임진왜란 직후부터 개발해온 회사입니다.
■ 저희가 개발한 플랫폼 = 평생 무료 하자보수.
■ 요청고객께 6개월마다 홍보용 홈페이지를 무료제작
AI 인공지능,AR,VR 개발 가능합니다.
유지보수를 원하시는 모든형태로 가능합니다.
■ 고객의 아이디어가 저희 포트폴리오에 있을 확률 80%

고객평가

  • 니즈가 명확하지 않아 ...
  • 기획 단계부터 먼저 여...
  • 저희 앱이 일본어 사전...
  • 과격한 표현으로 말하자...
  • 앱 쪽에 정보가 많이 ...
  • 디몬스터를 처음 만났을...
  • 처음했던 외주 개발인데...

궁금해요

  • AI 전반정리

    AI 전반정리

  • 단말기, 이용료, 유지비 없는 POS…

    단말기, 이용료, 유지비 없는 POS…

  • POS 연동에 대한 오해와 진실

    POS 연동에 대한 오해와 진실

고객리뷰

  • (주)**경매  정**대표님

    (주)**경매 정**대표님

  • (주)타이어핏 홍** 대표님

    (주)타이어핏 홍** 대표님

  • (주)아토비엔 임** 대표님

    (주)아토비엔 임** 대표님

숏츠/릴스

  • 인공지능 카메라 하나로 모든 문제를 …

    인공지능 카메라 하나로 모든 문제를 …

  • 효율적인 공간 관리를 위한 매핑 기능

    효율적인 공간 관리를 위한 매핑 기능

자료실

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

페이지 정보

작성자 강석호 조회14,148회 댓글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
| 메타몬스터 - 서울 구로구 구로동 235-3 대륭포스트타워 8차 L동 805, 806호 | 부천시 길주로 272 2001호(중동 코스모폴리탄) | 부산시 금정구 금정로 225 4층,5층 | 몽골사무실- Ulaannaatar.mongola bayangol district 3-khoroo agro center 9-02
당사의 어플방식은 저작권 및 특허출원중입니다. 복제,모방,변용 및 유사 상행위 적발시,경고,통보없이 민형사상 책임을 진행합니다
Copyright © www.dmonster.co.kr All rights reserved.Since 2008 (주)세미콜론즈 · 사업자번호: 801-88-00338