Summry
본 문서에서는 node.js에서 푸시 알림을 보내는 방법을 정리한다.
send me email if you have any questions.
FCM이란?
FCM(Firebase Cloud Messaging)은 사용자 디바이스에 설치된 앱 단위로 메시지를 전송할 수 있는 서비스로 안드로이드 푸시 알림 서비스 기능을 사용할 수 있도록 구글이 제공하는 무료 푸시 서버이다.
용어 | 설명 |
---|---|
클라이언트 앱(Client App) | 안드로이드 단말에서 FCM을 사용하는 앱 |
앱 서버(App Server) | 클라이언트 앱에 전달되는 토큰을 관리하고 클라이언트 앱에 메시지를 전달할 수 있도록 FCM에 메시지를 전달한다. 토큰은 FCM에서 발급해 주는 것으로 등록된 클라이언트 앱을 구분하기 위한 용도로 사용된다. |
API Key(Server Key) | Google Developers Console에서 발급받은 API 키로 앱 서버에 저장되어 관리되고 HTTP 프로토콜로 메시지를 보낼 때 POST의 헤더에 포함된다. 클라이언트 앱의 코드에 API 키를 포함하지 않도록 주의한다. |
Sender ID | FCM 앱 등록으로 발급된 google-sevices.json 파일의 project_number에 해당되는 값이다. 클라이언트 앱에서 Registration Token을 발급받기 위해 FCM에 전달하는 값으로 사용된다. |
Application ID | Application ID는 Android에서 Package Name을 의미한다. Package Name은 앱을 구분하는 단위로 하나의 앱은 중복되지 않은 Package Name을 가져야 한다. |
Registration Token | FCM에서 발급받은 토큰. 웹 서버에 전달하여 클라이언트 앱에 메시지 알림을 전송할 때 사용된다. |
https://noonestaysthesame.tistory.com/m/17
push notification 전송 과정
- 서버에서 FCM 서버로 HTTP Request를 post 방식으로 요청하면
- FCM서버에서 HTTP Response 응답이 옵니다
- 그리고 FCM 서버에서 앱으로 메시지를 보냅니다
- 앱에서는 받은 메시지를 처리하고 음답 메시지를 보냅니다.
module install
$ npm install firebase-admin --save
server key download
프로젝트 설정
서비스계정 탭에서 새 비공개 키를 생성한다.
- 다운로드 된 서버키 파일을 프로젝트 폴더에 이동시킨다.
example code
"use strict";
// Router init
const express = require("express");
const router = express.Router();
router.use(express.urlencoded({ extended: false }));
router.use(express.json());
// FCM init
const admin = require("firebase-admin");
// 서버키 파일의 경로
let serviceAccount = require("../firenotification-fd54c-firebase-adminsdk-qxgro-378402825f.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
})
// push test API
router.get('/test', (req, res, next) => {
let idx = String(req.body.idx);
let title = req.body.title;
let body = req.body.body;
let target_token =
'토큰 값..';
let message = {
data: {
title: 'test title',
body : 'test body',
},
token: target_token,
}
admin
.messaging()
.send(message)
.then(function (response) {
res.status(200).send("push success");
console.log('Successfully sent message: : ', response)
})
.catch(function (err) {
console.log('Error Sending message!!! : ', err)
})
})
module.exports = router;
Reference
[Node.js] [Firebase] FCM서버를 이용한 푸시 알림 보내기
[협업] 협업을 위한 푸시알림 설정하기 (feat node.js)
Firebase Cloud Messaging 이란?
PREVIOUSDatabase ERD 작성법