[Node.js] [ Firebase] FCM서버를 이용한 푸시 알림 보내기
firebase의 FCM 서버를 이용해 Android, IOS 에 푸시 알림을 보낼 수 있는 간단한 서버 예제를 만들어보겠습니다.
firebase.google.com/docs/cloud-messaging/server?hl=ko
firebase 공식 문서에도 잘 나와있습니다.
firebase에 프로젝트는 만들어둔 상태입니다
1. 먼저 Firebase Admin SDK를 설치해줍니다
$ npm install firebase-admin --save
2. 서버키 다운로드
SDK를 초기화 해주려면 서버키가 필요합니다
firebase 콘솔 화면으로 들어가서 '설정 아이콘 > 프로젝트 설정 > 서비스 계정 > 새 비공개키 생성'
이렇게 생성된 키를 적당한 곳에 둡니다. 저는 node 프로젝트 파일 안에 뒀어요
그리고 SDK를 초기화해주는 코드를 입력합시다
3. SDK 초기화
const admin = require('firebase-admin')
let serAccount = require('../서버 키 이름.json')
admin.initializeApp({
credential: admin.credential.cert(serAccount),
})
저는 프로젝트 파일 안에 서버키를 넣기 때문에 저렇게 썼지만 그냥 서버키 파알의 경로를 적어주시면 됩니다
4. PUSH 메시지 보내기
// push PAGE
router.get('/push_send', function (req, res, next) {
let target_token =
'e5p9Ul2BRc-MgZHP8Dx_wB:APA91bG9pnGqSJQLGrazz3tq0JkPKJlTY5cHmylMiR8dAdGAdKi9o_rf9y55H1mmvvAgHj0ZKjZyk23Q_trNrmgQx1A6h3LaoADdlPV-kX5czoDnL1F-gc2DOZJucEmf4To6hje4AfHl'
//target_token은 푸시 메시지를 받을 디바이스의 토큰값입니다
let message = {
data: {
title: '테스트 데이터 발송',
body: '데이터가 잘 가나요?',
style: '굳굳',
},
token: target_token,
}
admin
.messaging()
.send(message)
.then(function (response) {
console.log('Successfully sent message: : ', response)
})
.catch(function (err) {
console.log('Error Sending message!!! : ', err)
})
})
이렇게 하면 해당 토큰을 가진 앱에 푸시 알림이 갑니다
5. 전송 과정
이제 이 푸시 메시지가 어떻게 서버에서 디바이스로 전달되는지 알아봅시다
firebase의 클라우딩 메시지는 HTTP 프로토콜로 전달됩니다.
① 서버에서 FCM 서버로 HTTP Request를 post 방식으로 요청하면
② FCM서버에서 HTTP Response 응답이 옵니다
③ 그리고 FCM 서버에서 앱으로 메시지를 보냅니다
④ 앱에서는 받은 메시지를 처리하고 음답 메시지를 보냅니다.
FCM에 보낼 메시지 형식입니다
"to" : "[디바이스 토큰 값]",
"priority" : "high",
"notification" : {
"title" : "BackGround Title",
"body" : "Background Message"
},
"data" : {
"title" : "ForeGround Title",
"body" : "Foreground Message"
}