Node.js로 FCM 발송 기능 구현하기
Nodejs용 모듈인 “fcm-node” 모듈을 활용하면 NodeJS를 기반으로 한 FCM 발송 서버를 간단하게 구현할 수 있습니다.
FCM 클라이언트 준비
FCM 클라이언트에 관련된 내용은 다음의 포스팅을 참고하시기 바랍니다.
Cordova FCM 클라이언트 구현하기 (푸시메시지)
FCM 발송을 위한 서비키 발급받기
FCM 클라이언트를 준비하는 과정에서 Firebase 사이트에 등록해 둔 프로젝트를 통해 “서비키”를 발급받을 수 있습니다. 프로젝트 개요에서 추가한 플랫폼에 대한 “설정” 화면으로 이동합니다.
상단 탭에서 “클라우드 메시징”을 선택하면 화면 중앙에 “서버키”가 표시됩니다. 이 값을 복사해 둡니다.
Node.js 모듈 설치하기
Node 프로젝트가 진행되고 있는 디렉토리에서 다음의 명령어를 사용해서 “fcm-node” 모듈을 설치합니다.
npm install fcm-node –save
모듈 API 확인하기
푸시메시지 발송을 위해서 구성할 데이터는 기본적으로 다음과 같습니다. to라는 키에 Android 단말이 발급받은 token값만 지정한다면 그 밖의 항목들은 개발자가 편의에 따라 key와 value를 지정하면 됩니다.
|
{
to: "안드로이드 단말이 발급받은 Token값",
key1: "value1",
key2: "value2"
} |
만약 클라이언트가 cordova-plugin-fcm을 사용하여 구현되었다면 Push 메시지가 발송해야 할 메시지 규격은 다음과 같이 플러그인이 수신하기 위한 형식을 갖추어야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
{
// 수신대상
to: client_token,
// 메시지 중요도
priority: "high",
// App 패키지 이름
restricted_package_name: "study.cordova.fcmclient",
// App이 실행중이지 않을 때 상태바 알림으로 등록할 내용
notification: {
title: "Hello Node",
body: "Node로 발송하는 Push 메시지 입니다.",
sound: "default",
click_action: "FCM_PLUGIN_ACTIVITY",
icon: "fcm_push_icon"
},
// App에게 전달할 데이터 이 안의 내용은 자유롭게 구성한다.
data: {
num1: 2000,
num2: 3000
}
} |
이렇게 준비된 데이터를 다음과 같이 처리하여 발송할 수 있습니다.
|
var FCM = require('fcm-node');
var fcm = new FCM("FCM에서 발급받은 서버키");
fcm.send({ ...발송데이터...}, function(err, response) {
if (err) {
에러발생시의 처리
return;
}
전송성공시의 처리
}); |
전체 소스코드 확인
다음과 같이 전체 소스코드를 구성하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 |
/** fcm-node 모듈 설치 필요 */
// --> npm install fcm-mode --save
var FCM = require('fcm-node');
/** Firebase(구글 개발자 사이트)에서 발급받은 서버키 */
// 가급적 이 값은 별도의 설정파일로 분리하는 것이 좋다.
var serverKey = 'AAAA2S61_94:APA91bFq5_WiWUJPqTyfoFfkA6rITZFR_BDnInmqvpw_q-REp5lNXjUpbcko7tfiSEAV0sDd2FM0BVgweAnjeyJDk81OLy_AIKTLGkb1IoEAksulOKH2smVOgH3ePQbsxCDlRr8DV60W';
/** 안드로이드 단말에서 추출한 token값 */
// 안드로이드 App이 적절한 구현절차를 통해서 생성해야 하는 값이다.
// 안드로이드 단말에서 Node server로 POST방식 전송 후,
// Node서버는 이 값을 DB에 보관하고 있으면 된다.
var client_token = 'fCfVzlhF50Q:APA91bECSDkr04TVzmI-Rtd1cxIGBHEuDYCZyvOuc254mx-AwtIZkiOw22y7fDv1uYbWuxbzXwwn6fv_Ut7n2_-LcLN3heohBV20MG_uFWsHm8dw2bMX9oRI10BQPNeXqMaaf8_Fhopi';
/** 발송할 Push 메시지 내용 */
var push_data = {
// 수신대상
to: client_token,
// App이 실행중이지 않을 때 상태바 알림으로 등록할 내용
notification: {
title: "Hello Node",
body: "Node로 발송하는 Push 메시지 입니다.",
sound: "default",
click_action: "FCM_PLUGIN_ACTIVITY",
icon: "fcm_push_icon"
},
// 메시지 중요도
priority: "high",
// App 패키지 이름
restricted_package_name: "study.cordova.fcmclient",
// App에게 전달할 데이터
data: {
num1: 2000,
num2: 3000
}
};
/** 아래는 푸시메시지 발송절차 */
var fcm = new FCM(serverKey);
fcm.send(push_data, function(err, response) {
if (err) {
console.error('Push메시지 발송에 실패했습니다.');
console.error(err);
return;
}
console.log('Push메시지가 발송되었습니다.');
console.log(response);
}); |
Node.js에서는 발송에 성공하면 아래와 같이 콘솔을 통해서 메시지만 표시됩니다.
클라이언트가 구현된 안드로이드 단말에서는 푸시 서버에서 발송한 num1, num2 값을 전달받아 다음과 같이 메시지 박스를 표시하도록 구성하였습니다. (자세한 내용은 이 글의 처음에서 연결한 포스팅을 참고하시기 바랍니다.)
이 이후 각 서비스에 맞게 추가해야 할 부분들.
- Android App이 실행되었을 때 자체적으로 구축한 서버에 Token값을 전송하여 회원정보와 함께 저장해야 합니다.
- 특정 회원에서 Push를 발송해야 할 이슈가 생긴 경우 회원에게 설정된 Token값과 발송할 정보를 구성하여 fcm-node 모듈을 통해 발송합니다.
- 만약 특정 이벤트가 자동으로 발생되어야 한다면 Node에서
출처 : http://www.itpaper.co.kr/node-js%EB%A1%9C-fcm-%EB%B0%9C%EC%86%A1-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0/