[TIL] ๐ผ24/07/08๐ผ
- ์ง๋ ํ ๋ฌ๊ฐ <๋๋ฆผ์ถ์ฐ์ํ๋ถ ๊ณต๊ณต๋ฐ์ดํฐ ํ์ฉ ์ฐฝ์
๊ฒฝ์ง๋ํ ๊ณต๋ชจ์ >์ ์ค๋นํ๋ค.
ํ๋ก์ ํธ ๊ฐ๋ฐ ์ค์๋ TIL์ด ๋ ์ฐ์ ์์์์ ๋ฐ๋ ค๋๊ฒ ๋๋ค.
(๋ด๋ฐฐ์บ ๋๋ถํฐ ๊ณ ์น๋ ค ํ์ง๋ง ์์ง๋ ๊ณ ์ณ์ง์ง ์์ ๊ณ ์ง๋ณ)
- ๋ด์ผ๋ถํฐ๋ <๊ด๊ด๋ฐ์ดํฐ ํ์ฉ ๊ณต๋ชจ์ > ์ค๋น๋ฅผ ์์ํ ์์ ์ด๋ค.
์ด๋ฒ์๋ TIL์ ๋ฐ๋ฆฌ์ง ์๊ณ ์์ฑํด์ผ์ง. ๊ผฌ์ฅ...
Firebase Cloud Messaging(1)
FCM
- FCM?
- ์ฃผ์ ๊ธฐ๋ฅ
- ์๋ฆผ ๋ฉ์ธ์ง/๋ฐ์ดํฐ ๋ฉ์ธ์ง ์ ์ก
- ๋จ์ผ ๊ธฐ๊ธฐ/๊ธฐ๊ธฐ ๊ทธ๋ฃน/์ฃผ์ ๋ฅผ ๊ตฌ๋
ํ ๊ธฐ๊ธฐ์ ํด๋ผ์ด์ธํธ ์ฑ์ ๋ฉ์ธ์ง ๋ฐฐํฌ ๊ฐ๋ฅ
- ํด๋ผ์ด์ธํธ ์ฑ์์ ๋ฉ์ธ์ง ์ ์ก
- ์๋ฆผ ๋ฉ์ธ์ง vs ๋ฐ์ดํฐ ๋ฉ์ธ์ง?
- ์๋ฆผ ๋ฉ์ธ์ง
- FCM SDK์์ ์๋์ผ๋ก ์ฒ๋ฆฌ
- ํด๋ผ์ด์ธํธ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ ์ค์ผ ๋: FCM SDK๊ฐ ์ฑ์ ๋์ ํ์ฌ ๋ฉ์ธ์ง ํ์
- ํด๋ผ์ด์ธํธ ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋์์ ์คํ ์ค์ผ ๋: ์ฑ ์ฝ๋์ ๋ฐ๋ผ ๋์ ๊ฒฐ์
- ์ฌ์ ์ ์๋ ํค ๋ชจ์ O
- ๋ฐ์ดํฐ ํ์ด๋ก๋(์ปค์คํ
ํค-๊ฐ ์) ํฌํจ ๊ฐ๋ฅ
-> ์๋ฆผ ํ์ด๋ก๋: FCM์ด ์ฒ๋ฆฌ ๋ด๋น
-> ๋ฐ์ดํฐ ํ์ด๋ก๋: ํด๋ผ์ด์ธํธ ์ฑ์ด ์ฒ๋ฆฌ ๋ด๋น
- ๋ฐ์ดํฐ ๋ฉ์ธ์ง
- ํด๋ผ์ด์ธํธ ์ฑ์ด ๋ฉ์ธ์ง ์ฒ๋ฆฌ ๋ด๋น
- ์์ฝ ํค ์ด๋ฆ X, ์ฌ์ฉ์๊ฐ ์ ์ํ ์ปค์คํ
ํค-๊ฐ ์๋ง O
์๋ฆผ ๋ฉ์ธ์ง
- ์) JSON ํ์ ์๋ฆผ ๋ฉ์ธ์ง
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ธ ๊ฒฝ์ฐ: ์๋ฆผ ๋ฉ์ธ์ง ์๋ฆผ ๋ชฉ๋ก์ผ๋ก ์ ์ก๋จ
- ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋ ์ํ์ธ ๊ฒฝ์ฐ: ์ฝ๋ฐฑ ํจ์๊ฐ ๋ฉ์ธ์ง ์ฒ๋ฆฌ
- ์) JSON ํ์ ๋ฐ์ดํฐ ํ์ด๋ก๋๊ฐ ํฌํจ๋ ์๋ฆผ ๋ฉ์ธ์ง
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ธ ๊ฒฝ์ฐ:
- ์๋ฆผ ํ์ด๋ก๋๊ฐ ์๋ฆผ ๋ชฉ๋ก์ผ๋ก ์ ์ก๋จ
- ์ฌ์ฉ์๊ฐ ์๋ฆผ์ ํญํ ๊ฒฝ์ฐ -> ์ฑ์์ ๋ฐ์ดํฐ ํ์ด๋ก๋ ์ฒ๋ฆฌ
- ์ฑ์ด ํฌ๊ทธ๋ผ์ด๋ ์ํ์ธ ๊ฒฝ์ฐ: ์ฝ๋ฐฑ ํจ์๊ฐ ๋ฉ์ธ์ง ์ฒ๋ฆฌ
๋ฐ์ดํฐ ๋ฉ์ธ์ง
- ์) JSON ํ์ ๋ฐ์ดํฐ ๋ฉ์ธ์ง
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
- ์ปค์คํ
ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ ํ์ด๋ก๋ ์ ์ก
- ์ ๋ณด๋ ๊ณตํต data ํค์ ์บก์ํ
- ํด๋ผ์ด์ธํธ ์ฑ์ด ์ฝ๋ฐฑ ํจ์๋ก ์ปจํ
์ธ ํด์
- ๋ฐ์ดํฐ ๋ฉ์ธ์ง ์ํธํ
- Android ์ ์ก ๋ ์ด์ด์์ ์ง์ ๊ฐ ์ํธํ ์ฌ์ฉ
- ํ์์ ๋ฐ๋ผ ์๋ ํฌ ์๋ ์ํธํ ์ถ๊ฐ ๊ฐ๋ฅ
- FCM์์ ์๋ ํฌ ์๋ ์๋ฃจ์
์ ๊ณต X
- ์ธ๋ถ ์๋ฃจ์
(ex. Capillary, DTLS) ์ฌ์ฉ ๊ฐ๋ฅ
Cloud Messaging ์ฐ๋ํ๊ธฐ
- Firebase Console์ ํ๋ก์ ํธ ์ถ๊ฐํ๊ธฐ
- Android Studio ์ข์ธก ๋ฐฐ๋ Project ๋ทฐ๋ก ๋ณ๊ฒฝ -> app ํจํค์ง์ google-services.json ์ถ๊ฐํ๊ธฐ
- plugin & dependency ์ถ๊ฐํ๊ธฐ
// project gradle
plugins {
id("com.google.gms.google-services") version "4.4.2" apply false
}
// module gradle
plugins {
id("com.google.gms.google-services")
}
dependencies {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.cloud.messaging)
}
// libs.versions.toml
[versions]
firebaseCloudMsg = "23.2.1"
firebaseBom = "33.1.1"
[libraries]
firebase-cloud-messaging = { module = "com.google.firebase:firebase-messaging-ktx", version.ref = "firebaseCloudMsg" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics" }
firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" }
- Cloud Messaging ์ฐ๋ ์ ๋๋์ง ํ์ธํ๊ธฐ
- Firebase token ๋ฐ์์ ์ถ๋ ฅํ๊ธฐ
- Firebase Console์์ ํด๋น token์ผ๋ก ํ
์คํธ ์๋ ๋ณด๋ด๊ธฐ
private fun initFirebase() {
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
if (task.isSuccessful) tokenTextView.text = task.result
}
}