Skip to content

Commit 7bc3afc

Browse files
Feat(client, extension): firebase message & service worker 설정 (#103)
* feat: service worker register & messaging 기능 구현 * chore: 주석 제거
1 parent c40757b commit 7bc3afc

File tree

3 files changed

+59
-27
lines changed

3 files changed

+59
-27
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
self.addEventListener('install', function () {
2+
self.skipWaiting();
3+
});
4+
5+
self.addEventListener('activate', function () {
6+
console.log('fcm sw activate..');
7+
});
8+
9+
self.addEventListener('push', function (e) {
10+
if (!e.data.json()) return;
11+
const resultData = e.data.json().notification;
12+
const notificationTitle = resultData.title;
13+
const notificationOptions = {
14+
body: resultData.body,
15+
};
16+
console.log(resultData.title, {
17+
body: resultData.body,
18+
});
19+
e.waitUntil(
20+
self.registration.showNotification(notificationTitle, notificationOptions)
21+
);
22+
});

apps/client/src/pages/onBoarding/components/funnel/MainCard.tsx

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import { usePostSignUp } from '@shared/apis/queries';
1010
const stepProgress = [{ progress: 30 }, { progress: 60 }, { progress: 100 }];
1111
import { AlarmsType } from '@constants/alarms';
1212
import { normalizeTime } from '@pages/onBoarding/utils/formatRemindTime';
13-
import { firebaseConfig } from '../../../../firebase-config';
13+
import { firebaseConfig } from '../../../../firebase-config';
1414
import { initializeApp } from 'firebase/app';
1515
import { getMessaging, getToken } from 'firebase/messaging';
16-
16+
import { registerServiceWorker } from '@pages/onBoarding/utils/registerServiceWorker';
1717

1818
const variants = {
1919
slideIn: (direction: number) => ({
@@ -44,28 +44,28 @@ const MainCard = () => {
4444
const [alarmSelected, setAlarmSelected] = useState<1 | 2 | 3>(1);
4545
const [isMac, setIsMac] = useState(false);
4646
// api 구간
47-
const {mutate:postSignData} = usePostSignUp();
47+
const { mutate: postSignData } = usePostSignUp();
4848

4949
// 익스텐션에서부터 이메일 받아오는 구간!
50-
const [userEmail, setUserEmail] = useState("");
50+
const [userEmail, setUserEmail] = useState('');
5151

5252
useEffect(() => {
5353
const params = new URLSearchParams(location.search);
54-
const emailParam = params.get("email");
54+
const emailParam = params.get('email');
5555
if (emailParam) {
5656
setUserEmail(emailParam);
5757
}
5858
}, [location.search]);
5959

60-
6160
// FCM 구간
62-
const [fcmToken, setFcmToken] = useState<string | null>(null);
61+
const [fcmToken, setFcmToken] = useState<string | null>(null);
6362
const app = initializeApp(firebaseConfig);
6463
const messaging = getMessaging(app);
65-
64+
6665
const requestFCMToken = async (): Promise<string | null> => {
6766
try {
6867
const permission = await Notification.requestPermission();
68+
registerServiceWorker();
6969
if (permission !== 'granted') {
7070
alert('알림 권한 허용이 필요합니다!');
7171
return null;
@@ -89,22 +89,22 @@ const MainCard = () => {
8989
}
9090
};
9191

92-
93-
9492
useEffect(() => {
9593
const ua = navigator.userAgent.toLowerCase();
9694
if (ua.includes('mac os') || ua.includes('iphone') || ua.includes('ipad')) {
9795
setIsMac(true);
9896
}
9997
}, []);
100-
const renderStep = () => {
98+
const renderStep = () => {
10199
switch (step) {
102100
case 0:
103101
case 1:
104102
case 2:
105103
return <StoryStep step={step as 0 | 1 | 2} />;
106104
case 3:
107-
return <AlarmStep selected={alarmSelected} setSelected={setAlarmSelected} />;
105+
return (
106+
<AlarmStep selected={alarmSelected} setSelected={setAlarmSelected} />
107+
);
108108
case 4:
109109
if (isMac) return <MacStep />;
110110
return <FinalStep />;
@@ -116,17 +116,16 @@ const MainCard = () => {
116116
}
117117
};
118118

119-
const [remindTime, setRemindTime] = useState('09:00');
120-
const nextStep = async() => {
119+
const [remindTime, setRemindTime] = useState('09:00');
120+
const nextStep = async () => {
121121
if (step === 3) {
122-
const token = await requestFCMToken();
122+
const token = await requestFCMToken();
123123
if (token) {
124124
setFcmToken(token);
125125
setDirection(1);
126126
setStep((prev) => prev + 1);
127-
}
128-
else{
129-
alert('푸시 알람 설정 에러')
127+
} else {
128+
alert('푸시 알람 설정 에러');
130129
}
131130
return;
132131
}
@@ -137,19 +136,18 @@ const [remindTime, setRemindTime] = useState('09:00');
137136
const raw = AlarmsType[alarmSelected - 1].time;
138137
setRemindTime(normalizeTime(raw));
139138

140-
postSignData({
141-
"email": userEmail,
142-
"remindDefault": remindTime,
143-
"fcmToken": fcmToken,
139+
postSignData(
140+
{
141+
email: userEmail,
142+
remindDefault: remindTime,
143+
fcmToken: fcmToken,
144144
},
145145
{
146-
onSuccess:()=>{
146+
onSuccess: () => {
147147
window.location.href = '/';
148-
}
148+
},
149149
}
150-
)
151-
152-
150+
);
153151
}
154152
};
155153

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export const registerServiceWorker = () => {
2+
navigator.serviceWorker
3+
.register('firebase-messaging-sw.js')
4+
.then(function (registration) {
5+
console.log('Service Worker 등록 성공:', registration);
6+
alert(`Service Worker 등록 성공:, ${registration}`);
7+
})
8+
.catch(function (error) {
9+
console.log('Service Worker 등록 실패:', error);
10+
alert(`Service Worker 등록 실패:, ${error}`);
11+
});
12+
};

0 commit comments

Comments
 (0)