오늘은 Firebase를 활용하여 Notification , 즉 푸시알림을 보내는 방법에 대해서 설명드리고자 합니다.
우선 기본적으로 개념은 Firebase에서 프로젝트를 만들고 거기서 얻은 서버키를 가지고 fcm-node 패키지를 활용하여
푸시를 보내는 것입니다.
이 부분은 서버 내용이며 클라이언트 부분은 안드로이드 스튜디오에서 Firebase를 설치하여 기기당 존재하는 토큰값을 받아와야 합니다.
받아 온 고유의 토큰 값은 서버에 전송 대상으로 설정하게 되면 해당 기기에 푸시알림이 보내지게 됩니다.
우선 fcm push 기능을 구현하기 위해선 Firebase 콘솔에서 프로젝트를 먼저 만들어야 합니다.
1. Firebase 콘솔에서 프로젝트 생성
프로젝트 추가 버튼을 누르게 되면 안드로이드 패키지 명을 입력하는 창이 나올 것입니다.
차근차근 순차적으로 진행하시면 되고 이 부분은 파이어베이스 콘솔에서 직업해도 되지만, 안드로이드 스튜디오에서 프로젝트 생성 이 후에 툴에서 Firebase cloudMessaging 부분에 대한 내용을 설치하면 자동으로 프로젝트가 생성되기도 합니다.
다음 작업을 거친 뒤에 프로젝트를 생성하게 되면 SHA-1 인증서 작업을 거쳐야 합니다.
(아마 그 전에 파이어베이스 프로젝트를 만드신 분들이라면 이미 되어 있을 수도 있습니다!)
2. 프로젝트 생성 시 발급받은 서버키를 잘 활용하자
프로젝트에서 좌측 상단에 설정 모양 표시를 누르고 프로젝트 설정에 들어갑니다.
들어가면 다음과 같은 페이지가 나오는데 그 중 클라우드 메시징 부분을 확인합니다.
거기서 서버키 (이전 서버키 X) 를 가지고 이를 fcm-node 패키지와 활용해서 기기 당 토큰에 메시지를 전달하는 방식입니다.
3. fcm-node 패키지를 설치하자
https://www.npmjs.com/package/fcm-node
다음은 서버 사이드 부분에서 fcm-node 패키지를 설치하는 부분입니다.
[설치]
$ npm install --save fcm-node
[사용방법]
2 번에서 가지고 온 서버키를 다음 serverKey 변수에 넣어주면 됩니다. 그리고 그것을 fcm-node로 가지고 온 변수의 인자로 넣어 객체를 생성해주면 됩니다.
혹시나 노파심에 말씀드리는 것인데, 현재 작업하는 것은 기기 당 토큰에 따른 fcm 푸시라는 것을 한 번 더 강조하고 들어가겠습니다.
(위에 fcm-node 링크를 따라가게 되면 토픽으로 푸시 메시지를 전달하는 방법과 토큰 값으로 푸시 메시지를 전달하는 방법 이렇게 두 가지가 나와 있을 것입니다.
이 부분은 본인이 하려는 서비스에 맞게 진행해주시면 되고 저는 토큰으로 푸시 메시지를 전달하는 방법을 설명드리고 있습니다. )
따라서 메시지 변수에 to 부분에 토큰 값을 넣어주면 됩니다.
그리고 notification 부분에 제목과 내용을 각각 title, body에 넣어주어서 이를 fcm.send를 통해 전송하면 됩니다.
해당 부분은 토큰을 서버 디비에 별도로 저장하여 올바른 토큰에 대해서만 푸시를 보내도록 구현할 수 있습니다.
(예시)
살짝 어두워서 안보일 수 있겠지만 이는 Token이라는 컬렉션에 인덱스 값을 식별자로 두어 토큰 값을 디비에서 (컬렉션) 뽑아오는 과정입니다. 뽑아온 토큰에다가 각각 푸시 알림을 보내고 있는 것이라 말씀 드릴 수 있습니다.
따라서 푸시를 서버측에서 다음과 같이 코딩하여 클라이언트에게 푸시를 보내려면 클라이언트 측 기기 당 토큰을 알아놓고 DB에 저장하는 것이 먼저 선행되어야 합니다.
토큰은 안드로이드 스튜디오에서 FirebaseInstanceIdService
여기서 갱신된 토큰 값을 뽑아오면 되고 이를 DB에 미리 저장해주면 됩니다.
그렇게 하고 다음 절차를 차근차근 밟아서 진행해주시면 fcm 푸시가 완성되게 됩니다.
이상 FCM 푸시 관련 포스팅이었습니다 ^.^
'Node.js & Javascript' 카테고리의 다른 글
S3 사용법 (2) | 2018.04.06 |
---|---|
module 관리 (0) | 2018.03.15 |
자바스크립트 함수(1) (0) | 2018.03.08 |
자바스크립트 변수(2) (2) | 2018.03.07 |
Javascript 변수 (0) | 2018.03.06 |