Replies: 1 comment 2 replies
|
@Chuseok22 ์คํธ ์ ์ฝ๊ณ ๊ฐ๋๋ค ๊ทธ๋ฌ๋ฉด ๋ฉ์์ง๋ฅผ publishํ๋ ๋ฐฉ์์ ์ด๋ค์์ผ๋ก ์ฝ๋๋ฅผ ์ง์ผํ๋์? |
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
๐ ํ์ฌ ๋ฌธ์ ์
๐ ๏ธ ํด๊ฒฐ ๋ฐฉ์ / ์ ์ ๊ธฐ๋ฅ
FCM (Firebase Cloud Messaging) ์ด๋?
๊ตฌ์ฑ์์
firebase-service-account.jsonํ์ผ ํํ๋ก ๋ฐ๊ธ โ ํด๋น ํค๋ก Firebase Admin SDK ์ด๊ธฐํ/src/resources/firebase-service-account.jsonํ์ผ ์ถ๊ฐ.gitignore์ค์ ๋์ ๋ฐฉ์
1. ํด๋ผ์ด์ธํธ
2. ์๋ฒ
3. FCM ์๋ฒ
๊ตฌํ
1.
FirebaseConfig.java@PostConstruct๋ฅผ ์ด์ฉํด ์คํ๋ง ์ปจํ ์ด๋ ์คํ ์ ์๋์ผ๋ก Firebase Admin SDK ์ด๊ธฐํ2.
FcmService.javaํน์ง
๊ณ ๋ ค์ฌํญ
1. ํ ์ฌ์ฉ์๊ฐ ํ ๊ณ์ ์ผ๋ก ์ฌ๋ฌ ๊ธฐ๊ธฐ์์ ๋์ ์ฌ์ฉ
Member-FcmToken1:N ๋งคํ2. ํ๋์ ๊ธฐ๊ธฐ์์ ์ฌ๋ฌ ๊ณ์ ์ฌ์ฉ
3. ํ๋ช ์ ์ฌ์ฉ์๊ฐ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์๋๊ฒฝ์ฐ
FcmToken์ํฐํฐ ํ๋์ โ๋ง์ง๋ง ๋ก๊ทธ์ธโ ๊ณผ ๊ฐ์ ํ๋ ์ถ๊ฐํด๋ผ์ด์ธํธ FCM Token ๋ฐ๊ธ
1. ์น SDK ์ค์ ๊ฐ
FirebaseConfig
Firebase ์ฝ์ โ โํ๋ก์ ํธ ์ค์ โ โ โ์ผ๋ฐโ ํญ์์ ์น ์ฑ ๊ตฌ์ฑ ๋ถ๋ถ์์ JSON ํํ๋ก ์ ๊ณต
{ "apiKey": "AIzaSyA******", "authDomain": "my-project.firebaseapp.com", "projectId": "my-project", "storageBucket": "my-project.appspot.com", "messagingSenderId": "1234567890", "appId": "1:1234567890:web:abcdefg12345" }vapidKey
BGMza-Lw4pEyFJ-HxbXbLaHxdfI-xhF6zUdYaIUJ9-q3kxWBDGConYfYaqaNjxUskLWRYKh4VMlJtay1BwVcCZImessaging.getTokne({ vapidKey: "..." })์ ์์ฑโ ํด๋น ๊ฐ๋ค์ Public ๊ฐ์ด๋ฏ๋ก
firebase-admin-sdk.jsonํ์ผ๊ณผ๋ ๋ค๋ฅด๊ฒ ํ๋์ฝ๋ฉํด๋ ๋ฌด๋ฐฉโ Admin SDK ์ ๋ณด (์๋ฒ ๋น๊ณต๊ฐ) vs Web SDK ์ ๋ณด (ํด๋ผ์ด์ธํธ ๊ณต๊ฐ)
์ถํ ์ ์ง๋ณด์๋ฅผ ์ํด application-dev.yml์ ํด๋น ๊ฐ ์์ฑ
2.
notification.htmlmodel.addAttribute๋ก ๊ฐ์ ๋์ ์ผ๋ก ์ ์ก๋ฐ์ ์ฌ์ฉ๊ฐ๋ฅor
fetch(...)๋ฅผ ํตํด json ๋ฐํ๊ฐ์ผ๋ก ๊ฐ์ ์ ์ก๋ฐ์ ์ฌ์ฉ๊ฐ๋ฅ (ํด๋น ๋ฐฉ๋ฒ ์ฌ์ฉ)๋ฌธ์ ์ 1:
firebase-messaging.js:1 Uncaught SyntaxError: Cannot use import statement outside a module (at firebase-messaging.js:1:1)"Cannot use import statement outside a module""Unexpected token 'export'"๋ฑ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ผ๋ฐ<spcipt>ํ๊ทธ์์ ES Module ์ฝ๋๋ฅผ ํด์ํ๋ ค๊ณ ํด์ ๋ฐ์ํ๋ ์๋ฌFirebase v9
import { initializeApp } from 'firebase/app'์์ผ๋ก import ๊ตฌ๋ฌธ ์ฌ์ฉ<script type="module">ํ๊ฒฝ์์๋ง ๋์<script src=".../firebase-app-compat.js"></script>์ฒ๋ผ ๊ธฐ์กด v8 ๋ฌธ๋ฒ(firebase.initializeApp(...))์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋๋ก ํธํ ๋ ์ด์ด ์ ๊ณตโ ํ์ฌ v8 ์คํ์ผ ๋ฌธ๋ฒ์ด๋ฏ๋ก โcompat ๋ฒ์ โ์ผ๋ก ํด๊ฒฐ
Modular ๋ฐฉ์์ผ๋ก ๊ณ ๋ํํ๊ธฐ (์ ํ)
Firebase v9 Modular ๋ฌธ๋ฒ์ ์ฐ๊ณ ์ถ๋ค๋ฉด, ์๋์ฒ๋ผ
type="module"์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ,์ฝ๋๋ import ๋ฌธ๋ฒ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
2.1. ์์ (Modular)
๋ฌธ์ ์ 2:
firebase-messaging-sw.jsํ์ผ ๋๋ฝhttp://localhost:8080/firebase-messaging-sw.js์์ HTTP 200 OK ๋ก ํด๋น ํ์ผ์ ๋ด๋ ค๋ฐ์messaging.getToken()ํธ์ถ ์firebase-messaging-sw.js๋ผ๋ ํ์ผ์ ํ์ฌ ํธ์คํธ์ ๋ฃจํธ ๊ฒฝ๋ก์์ ์ฐพ์https://example.com/firebase-messaging-sw.jshttp://localhost:8080/firebase-messaging-sw.jsโ ๋ฐ๋ผ์
firebase-messaging-sw.jsํ์ผ์ ์ ์ (/static) ๊ฒฝ๋ก๋ก ์๋นํด์ผ๋จโ ๋ํ Spring Boot์์ 403 ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก Spring Security์์ permitAll ์ค์
/root/firebase-messaging-sw.js(/resources/static/firebase-messaging-sw.js)navigator.serviceWorker.register(...)ํธ์ถ๋ก ์๋ ๋ฑ๋ก ๊ฐ๋ฅ/static/firebase-messaging-sw.js)๊ฐ ์๋๊ฒฝ์ฐ scope๋ฅผ ์ค์ ํด์ค์ผํ๋ ๋ฌธ์ ๋ฐ install ํ activate ๋ก ๊ฐ์ง๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํจ๋ฌธ์ ์ 3: ์ฒ์ ํ์ด์ง ๋ก๋ ์ Service Worker(
firebase-messaging-sw.js)๊ฐ ์์ ํ ๋ฑ๋ก/ํ์ฑ ๋์ง ์์์ฒซ ํ์ด์ง ๋ก๋ ์
firebase-messaging-sw.jsํ์ผ์ด ์์ ํ ๋ฑ๋ก/ํ์ฑํ ๋์ง ์์messaging.getToken()๋ฉ์๋๊ฐ ์ ๋๋ก ๋์ X์ดํ ๋๋ฒ์งธ๋ถํฐ๋ ํด๋น ํ์ผ์ด ์ ๋ฑ๋ก๋์ด์์ด ํ ํฐ ๋ฐ๊ธ ๊ฐ๋ฅ
์๋์ผ๋ก Service Worker ๋ฑ๋ก ํ
messaging.getToken()์ ์ ๋ฌ3. CI/CD๊ณผ์ ์์ ๋์ ์ผ๋ก
firebase-messaging-sw.jsํ์ผ ์์ฑ๐โโ๏ธ ๋ด๋น์
All reactions