본문 바로가기
카테고리 없음

FCM 웹 푸시 구현

by reumiii 2023. 8. 22.

 

사전 작업 ) 

FCM 홈페이지(https://console.firebase.google.com)에서 계정을 만들고,

사용할 프로젝트를 생성한다.

 

프론트엔드 수신 처리

1. firebase-messaging-sw.js

메시지 서비스가 동작하려면, firebase-messaging-sw.js 파일이 필요하다.

이 파일에 메시지 수신을 하기 위한 초기화 작업과 리스너 설정 처리를 한다.

importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.8.0/firebase-messaging.js');

// Initialize Firebase
// 초기화작업은 firebase에서 발급받은 프로젝트 Id 정보로 셋팅하여
// 내 프로젝트에서 푸시되는 메시지를 수신하도록 합니다.
var config = {
  apiKey: "api키",
  authDomain: "도메인",
  projectId: "프로젝트id",
  storageBucket: "bucket",
  messagingSenderId: "sender id",
  appId: "appid",
  measurementId: "id"
};
firebase.initializeApp(config);

// push Listener
// 메시지가 푸시되었을때 어떻게 처리를 할 것인지 설정합니다.
// 메시지의 내용/아이콘 이미지 등의 설정을 해줍니다.
self.addEventListener('push', function(event) {
	var payload = event.data.json();
	const title = payload.notification.title;
	const options = {
		body: payload.notification.body,
		icon: 'favicon.ico',
		badge: '/webdata/images/005.png',
		vibrate: [200, 100, 200, 100, 200, 100, 400],
		data : payload.params
	};
	event.waitUntil( self.registration.showNotification(title, options) );
});

 

< options 정리 >

body: 알림 내에 표시되는 내용

Icon: 알림에서 아이콘으로 사용할 이미지의 URL

badge: 알림을 나타내는 이미지의 URL

vibrate: 알림 표시와 함께 실행되는 진동 패턴

data: 알림과 관련있는 임의의 데이터

 

2. firebase-messaging-sw.js 파일 경로 세팅

firebase가 위에서 작성한 설정파일에 접근할 수 있도록 파일 경로를 셋팅해 주었다.

firebase-messaging-sw.js의 경우 https://도메인주소/firebase-messaging-sw.js 로 호출되어야 해서 이를 위해 dispatcher-servlet.xml 파일에 이 주소로 파일에 접근할 수 있도록 설정했다.

<mvc:resources mapping="/firebase-messaging-sw.js" location="/webdata/js/" order="0" />

 

3. 클라이언트(사용자) 접근 페이지에서 사용자 토큰 받기

사이트의 메시지 수신을 위해서는 알림 권한 허용을 해야 한다.

알림 권한 요청에 허용한 경우, getToken()을 호출해서 사용자가 접속한 기기의 토큰을 획득한다. 이 토큰은 사용자를 식별하는 토큰으로 특정 사용자에게 메시지를 보낼때 사용한다. 

<script src="https://www.gstatic.com/firebasejs/7.6.1/firebase.js"></script>
var config = {
apiKey: "AIzaSyA1nvdBhZxrTdTSGEeT5Oxmi5cTPvEP3xY",
authDomain: "quizn-da938.firebaseapp.com",
projectId: "quizn-da938",
storageBucket: "quizn-da938.appspot.com",
messagingSenderId: "109966474321",
appId: "1:109966474321:web:6fa8c4d8ce901df16f8c70",
measurementId: "G-YS2MZXRNXB"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
// 알림 권한 요청 보내기
Notification.requestPermission().then((permission) => {
if(permission == "granted"){ // 허용한 경우 getToken으로 토큰 획득
messaging.getToken().then((currentToken)=>{
if(currentToken){
$('#my_token').html(currentToken);
}
}).catch((err) => {
console.log('An error occurred while retrieving token. ', err);
});
}
});

 

 

 

 

참고한 포스팅 👇

https://zuminternet.github.io/FCM-PUSH/

 

FCM 푸시 파헤치기

파일럿부터 적용까지 진행했던 FCM 푸시를 파헤치며 기초 가이드북처럼 정리해보았습니다.

zuminternet.github.io

 

https://yultory.tistory.com/15

 

[FCM] Web App - Push Message 발송하기

얼마 전, 율토리 마을이 안전한 마을로 거듭났다. ( SSL 적용 포스트 보러가기 ) 사실 SSL 적용은 이 작업을 해보고 싶어서였던 것. ★ 반드시, Https 프로토콜을 사용하여야만 구현이 가능하다. ★ FC

yultory.tistory.com

 

댓글