제이슨의 개발이야기
Firebase CloudFunction 을 이용한 FCM 을 이용한 푸시(push) 메시지 받기 && 보내기 본문
안녕하세요 오늘은 Firebase CloudFunction 과 FCM 을 이용해서 푸시메시지를 보내는 것과 받는 법에 대해서 공부했습니다 ㅎㅎ
먼저 build.gradle (app)에서
//fcm
implementation 'com.google.firebase:firebase-messaging:17.3.4'
종속성을 추가해줍니다!
그리고 나서 FirebaseMessagingService()를 상속받는 클래스를 하나 만들어야합니다
class FcmService() : FirebaseMessagingService() {
override fun onMessageReceived(remotemessage: RemoteMessage) {
remotemessage.data.get("title")?.let { sendNotification(remotemessage.data.get("body")!!, it) }
}
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)
}
}
private fun sendNotification(messageBody : String, messageTitle : String){
createNotificationChannel(this, NotificationManagerCompat.IMPORTANCE_HIGH, false,
getString(R.string.app_name), "App notification channel") // 1
val channelId = "$packageName-${getString(R.string.app_name)} "
val title = messageTitle
val content =messageBody
val intent = Intent(baseContext, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
val builder = NotificationCompat.Builder(this, channelId)
builder.setSmallIcon(R.drawable.profile_human)
builder.setContentTitle(title)
builder.setWhen(System.currentTimeMillis())
builder.setContentText(content)
builder.priority = NotificationCompat.PRIORITY_HIGH // 3
builder.setCategory(NotificationCompat.CATEGORY_MESSAGE)
builder.setAutoCancel(true)
val notificationManager = NotificationManagerCompat.from(this)
notificationManager.notify(1001, builder.build())
}
}
위에 클래스 코드를 보면 특이 한 점은 createNotificationChannel 메소드 입니다
안드로이드 오레오 버전 이후 부터는 채널 이름이 필요합니다 ! 저는 그냥 패키지 네임과 앱 네임을 붙어서 채널 이름으로 활용했습니다
onMessageReceived() 메소드는 푸시메시지를 감지하는 부분입니다 !
푸시메시지가 오면 데이터를 알맞게 sendNotification 메소드에 보내면 안드로이드 Notification 라이브러리를 활용해서 푸시메시지를 받을 수 있습니다!
※위에 코드중 intent 부분은 있는 대 무시하셔도 상관없습니다!
var builder 부분부터는 Notification 메세지 에 해당하는 부분이고마지막에 notify 를 함으로써 푸시 메세지가 나타납니다!
그러면 Firebase CloudFunction 에서는 푸시메시지를 보내는 Function 이 있어야합니다
exports.sendCloudMessageByToken = functions.https.onCall((data) => {
var registrationToken = data.token;
var title = data.title;
var body = data.body;
var message = {
data: {
title: title,
body: body
},
token: registrationToken
};
admin.messaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
});
위에 코드) node.js 로 코드 작성 후 Function에 올립니다
클라이언트는 푸시 메시지를 보낼 대상에 token 과 메시지 제목 , 내용 을 보내면 해당 function이 푸시 메시지를 보냅니다!
'안드로이드' 카테고리의 다른 글
FCM 푸시메시지 보낼때 안드로이드 화면 깨우기 Kotlin (0) | 2021.05.28 |
---|---|
Edit text 글자 입력 시 검색 페이지 개발 with 알고리아서치 API(Algoria Search Api) (0) | 2021.05.28 |
[안드로이드] 축복 터지는 타이머(Timer) 만들기 Sound Pool ,seekBar, CountDownTimer,Lottie Animation (0) | 2021.05.11 |
Lottie 라이브러리 활용한 안드로이드 Lottie 애니메이션 적용하기 ! 로딩화면 구현 , 버튼 눌렀을때 애니메이션 (0) | 2021.05.03 |
안드로이드 앨범 접근 권환 확인 및 이미지 피커 안드로이드 사진첩 (0) | 2021.05.01 |