λͺ¨λ°μΌ μ± νΈμ μ°λνκΈ°¶
κ°μ¶
λΌμ΄λ―Ήμ€λ‘ λ§λ ννμ΄μ§λ μΉλ·° κΈ°λ°μ μ±μμ μμ½κ² κΈ°κΈ°λ₯Ό λ±λ‘νκ³ νΈμ μλ¦Όμ λ°μ μ μμ΅λλ€.
μλμ μ€λͺ
μ FCM κΈ°μ€μ
λλ€.
μμ€ν μ€μ ¶
FCMμ μ¬μ©νλ €λ©΄ μμ€ν μ€μ β μλ¦Ό μ€μ λ©λ΄μμ FCM HTTP v1 APIλ₯Ό μ€μ ν΄μΌ ν©λλ€.
Firebase μ½μμμ λΉκ³΅κ° ν€λ₯Ό μμ±νμ¬ "FCM μλΉμ€ κ³μ νμΌ" μ
λ ₯λμ λΆμ¬λ£κ³ μ μ₯ν©λλ€.
μ΄ νμΌμλ μλ¦Ό λ°μ‘μ μΈμ¦μ μ¬μ©νλ κ°μΈν€λ₯Ό λΉλ‘―νμ¬, νλ‘μ νΈ IDμ κ·Έ λ°μ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€.
κ΄λ¦¬μκ° μλ μ¬λμκ² μλΉμ€ κ³μ νμΌμ΄ λ
ΈμΆλμ§ μλλ‘ μ£Όμνμμμ€.
κΈ°κΈ° λ±λ‘¶
FCMμ ν΅ν΄ device tokenμ λ°κΈλ°μ μ±μ, μ¬μ©μκ° μΉλ·° λ΄μμ λ‘κ·ΈμΈνκ±°λ νμκ°μ
ν λ
μλμ λ°©λ² μ€ νλλ₯Ό μ¬μ©νμ¬ ν ν°μ μλ²λ‘ μ μ‘ν΄μΌ ν©λλ€.
device_token
μ΄λΌλ POST λ³μdevice_token
μ΄λΌλ μΏ ν€X-Device-Token
μ΄λΌλ ν€λ
λ‘κ·ΈμΈμ act
κ° procMemberLogin
μΈ POST μμ²μ μλ―Ένκ³ ,
νμκ°μ
μ act
κ° procMemberInsert
μΈ POST μμ²μ μλ―Έν©λλ€.
μ΄λ¬ν μμ²μ ν λ μμ 3κ°μ§ λ°©λ² μ€ νλλ‘ ν ν°μ΄ μ λ¬λκ³ , λ‘κ·ΈμΈ λλ νμκ°μ
μ μ±κ³΅νκ² λλ©΄,
λΌμ΄λ―Ήμ€λ ν΄λΉ νμμ κ³μ μ ν ν°μ μλμΌλ‘ λ±λ‘ν©λλ€.
[μ°Έκ³ ]
μμ 쑰건μ μΆ©μ‘±νλ μΏ ν€λ ν€λκ° μ‘΄μ¬νλλΌλ, λ‘κ·ΈμΈ λλ νμκ°μ μμ μΈμλ μΈμνμ§ μμ΅λλ€.
μΉλ·° λ΄μμ μΌμ΄λλ μμ²λ€μ μΌμΌμ΄ μΆμ νκΈ° μ΄λ €μ΄ νκ²½μ΄λΌλ©΄
λͺ¨λ μμ²μ μΏ ν€λ ν€λλ₯Ό μΌκ΄ μΆκ°νλ λ°©μμΌλ‘ ꡬννμ¬λ 무방ν©λλ€.
λ¨, μΈλΆ μ΄λ―Έμ§λ μ€ν¬λ¦½νΈ, λ§ν¬ λ±μ ν΅ν΄ λ€λ₯Έ μ¬μ΄νΈμ μ μν λ ν ν°μ΄ λ ΈμΆλμ§ μλλ‘ μ£Όμνμ¬μΌ ν©λλ€.
μλ¦Ό λ°μ‘¶
ν ν°μ΄ λ±λ‘λ νμμ΄ μλ¦Όμ λ°μΌλ©΄, ν΄λΉ νμμ΄ λ±λ‘ν λͺ¨λ κΈ°κΈ°μ μλμΌλ‘ νΈμ μλ¦Όμ΄ λ°μ‘λ©λλ€.
μΌλ°μ μΈ κ²μν λκΈ μλ¦Ό, μͺ½μ§ μλ¦Ό λ±μ λͺ¨λ°μΌ μ±μΌλ‘ λ°μ‘νκΈ° μν΄
μμμ μΈκΈν μμ€ν
μ€μ μΈμ λ³λμ μμ
μ΄ νμνμ§λ μμ΅λλ€.
μΌλ°μ μΈ μλ¦Ό μΈμ λ°±μλμμ μμλ‘ μλ¦Όμ μμ±νλ €λ©΄
NcenterliteController
ν΄λμ€μ sendNotification()
λ©μλλ₯Ό μ¬μ©ν©λλ€.
μμμ URLμ μ§μ νκ±°λ, μ λͺ©κ³Ό λ΄μ©μ κ°κ° 컀μ€ν°λ§μ΄μ§νκ±°λ, λ³λμ λ°μ΄ν°λ₯Ό λ£μ΄μ μ λ¬νλ λ±,
μΌλ°μ μΈ μλ¦Όμμ μ§μλμ§ μλ λ€μν κΈ°λ₯μ μ§μν©λλ€.
μλ¦Ό μμ ¶
ν ν°μ λ±λ‘ν μ±μ μμ μκ² μ λ¬λλ FCM μλ¦Όμ μΌλ°μ μΈ λ°©λ²μΌλ‘ μμ ν©λλ€.
μλ¦ΌμΌν°μ "νΈμ μλ¦Ό ν¬λ§·" μ€μ μ λ°λΌ
μλμ κ°μ λ κ°μ§ ν¬λ§· μ€ νλλ‘ μλ¦Όμ΄ μ μ‘λλ,
μ΄ν리μΌμ΄μ
μ νμμ λ§λ ν¬λ§·μ μ ννμ¬ μ¬μ©νλ©΄ λ©λλ€.
notification μ¬μ© (κΈ°μ‘΄ ν¬λ§·)¶
notification: {
title: "λΌμ΄λ―Ήμ€λμ΄ νμλμ κΈμ 'ν
μ€νΈ'λΌκ³ λκΈμ λ¨κ²Όμ΅λλ€.",
},
data: {
url: "ν΄λ¦μ λ°©λ¬Έν URL"
}
data μ¬μ© (μ κ· ν¬λ§·)¶
data: {
sender: "μμ±μ λλ€μ",
profile_image: "μμ±μ νλ‘ν μ΄λ―Έμ§ URL",
type: "C", // μλ¦Ό λ°μ μ¬μ μ λ°λΌ D, C, V λ±
subject: "λΌμ΄λ―Ήμ€λμ΄ νμλμ κΈμ 'ν
μ€νΈ'λΌκ³ λκΈμ λ¨κ²Όμ΅λλ€.",
content: "", // μΌλ°μ μΌλ‘ λΉμ΄ μμΌλ, sendNotification() μ¬μ©μ 컀μ€ν°λ§μ΄μ§ κ°λ₯
url: "ν΄λ¦μ λ°©λ¬Έν URL"
}
κ³ κΈ νμ©¶
λ‘κ·ΈμΈ λλ νμκ°μ μμ μ΄ μλλλΌλ, μλμ APIλ₯Ό μ¬μ©νμ¬ κΈ°κΈ°λ₯Ό λ±λ‘νκ³ λ‘κ·ΈμΈ μνλ₯Ό μ μ§ν μ μμ΅λλ€.
κΈ°κΈ° λ±λ‘ API¶
member
λͺ¨λμ procMemberRegisterDevice
μ‘μ
μ μλμ λ³μλ€μ POSTλ‘ μ μΆν©λλ€.
user_id
(μμ΄λ λλ μ΄λ©μΌ μ£Όμ)password
device_token
μΈμ¦μ μ±κ³΅νλ©΄ ν΄λΉ νμμ κ³μ μ κΈ°κΈ°κ° λ±λ‘λκ³ , device_key
κ° λ°νλ©λλ€.
μλ λ‘κ·ΈμΈ API¶
νμμ μμ΄λλ μ΄λ©μΌ μ£Όμ, λΉλ°λ²νΈ λ±μ μ±μμ κΈ°μ΅νμ§ μκ³ μμ νκ² λ‘κ·ΈμΈμ μ μ§νλ λ°©λ²μ λλ€.
member
λͺ¨λμ procMemberLoginWithDevice
μ‘μ
μ μλμ λ³μλ€μ POSTλ‘ μ μΆν©λλ€.
device_token
device_key
μ ν¨ν νμ κ³μ μ device_token
κ³Ό μΌμΉνλ κΈ°κΈ°κ° λ±λ‘λμ΄ μκ³ ,
ν΄λΉ κΈ°κΈ°λ₯Ό λ±λ‘ν λ λ°ννλ device_key
κ° μΌμΉνλ€λ©΄ λ‘κ·ΈμΈμ΄ λ©λλ€.
μ΄κ²μ μ¬μ©νλ©΄ μλ²μ μΈμ
μ μ§ κΈ°κ°μ΄λ νμμ λΉλ°λ²νΈ λ³κ²½κ³Ό κ΄κ³μμ΄
μ±μμ νμ λ‘κ·ΈμΈ μνλ₯Ό μ μ§ν μ μμ΅λλ€.
λ‘κ·ΈμΈ μν νμΈ API¶
μμ μλ λ‘κ·ΈμΈ APIλ₯Ό μ¬μ©νκΈ° μ , νμ¬ λ‘κ·ΈμΈμ΄ λμ΄ μλμ§ νμΈνλ λ°©λ²μ λλ€.
member
λͺ¨λμ getLoginStatus
μ‘μ
μ POSTλ‘ νΈμΆν©λλ€.
λ‘κ·ΈμΈλμ΄ μλ€λ©΄ ν΄λΉ νμμ κ³ μ κ°μ λ°ννκ³ , λ‘κ·ΈμΈλμ΄ μμ§ μλ€λ©΄ none
μ λ°νν©λλ€.
μ΄κ²μ νμ©νμ¬ λ‘κ·ΈμΈμ΄ νλ Έκ±°λ, κΈ°κΈ°λ₯Ό λ±λ‘νλ μμ΄λμ λ€λ₯Έ μμ΄λλ‘ λ‘κ·ΈμΈν μνμΈμ§ νμΈνκ³ ,
νμμ λ°λΌ μ μ ν λμν μ μμ΅λλ€.
μ£Όμμ¬ν¶
μμ λͺ¨λ μμ²μ μΉλ·°μμ μ¬μ©νλ κ²κ³Ό λμΌν μΈμ
μΏ ν€, user-agent λ±μ μ¬μ©νμ¬ μμ²ν΄μΌ νκ³ ,
μλ²μμ μΏ ν€λ₯Ό λ°νν κ²½μ° μΉλ·°μ μ ννκ² μ λ¬ν΄μΌ ν©λλ€.
μΉλ·°μ λ³λλ‘ λ€μ΄ν°λΈ λΆλΆμμ HTTP clientλ₯Ό μμ±νμ¬ μ¬μ©ν κ²½μ°, μΏ ν€κ° μλ‘ λκΈ°νλμ§ μκ±°λ,
μΌλΆ μΏ ν€ μμ±μ΄ μ ννκ² μ λ¬λμ§ μμ μ€μλν μ μμ΅λλ€.
POST λ°©μμ λͺ¨λ μμ²μ λ°±μλμμ CSRF 체ν¬λ₯Ό κ±°μΉ©λλ€.
κ° μ¬μ΄νΈμ 보μ μ€μ μ λ°λΌ μλμ λ κ°μ§ λ°©λ² μ€ νλλ₯Ό μ¬μ©νμ¬ CSRF 체ν¬λ₯Ό ν΅κ³Όνλλ‘ ν΄μΌ ν©λλ€.
Referer
ν€λμ μ¬μ΄νΈ λ΄λΆ μ£Όμ(μ: λ©μΈνλ©΄ μ£Όμ)λ₯Ό μ μ‘X-CSRF-token
ν€λμ CSRF ν ν°μ μ μ‘
λ§μ½ CSRF ν ν°μ μ¬μ©ν κ²½μ°, μμμ μ€λͺ
ν λ‘κ·ΈμΈ μν νμΈ APIλ₯Ό μ¬μ©νμ¬
νμ¬ μΈμ
μμ μ ν¨ν ν ν°μ μ»μ μ μμ΅λλ€.
(λ‘κ·ΈμΈ μν νμΈ APIλ₯Ό νΈμΆν λλ 리νΌλ¬λ CSRF ν ν°μ΄ νμνμ§ μμ΅λλ€.)