νΈμ μλ¦Όμ΄ λ¬΄μμΈμ§, μ μ¬μ©νλμ§ μ€λͺ ν΄μ£Όκ³ μ±μ μΆκ°ν μ μλ λ°©λ²μ μ€λͺ ν΄μ£Όλ μμμ λν΄ μ 리ν κΈμ λλ€!
Introducing Push Notification
νΈμ μλ¦Όμ κΈ°λ₯
- Engagement : νΈμ μλ¦Όμ ν΅ν΄μ μ±μ΄ μνΈμμ© ν μ μλ€.
- Provide updates : μ±μ μ€μκ°μΌλ‘ μ λ°μ΄νΈλ₯Ό μ 곡ν μ μλ κΈ°λ₯μ μ 곡νλ€.
- Dynamic experiences : μ± λ΄μ λ³κ²½μ¬νμ΄ μμ λ λ€μ΄λλ―Ήν κ²½νμ μ€ μ μλ€.
νΈμ μλ¦Όμ μΆκ°νμ λ μ΄μ μ 무μμ΄ μμμ§?
- Foreground not required : μ±μ΄ νμ ν¬κ·ΈλΌμ΄λμ μμ νμκ° μλ€. νΈμ μλ¦Όμ μ±μ μνμ κ΄κ³μμ΄ μ λ¬λκ³ νμν κ²½μ° μ€νλλ€.
- Power efficient : νΈμ μλ¦Όμ μ λ ₯μ λ§μ΄ μ¬μ©νμ§ μλλ€.
- Best engagement : κ³ κ°κ³Ό μν΅νκΈ°μ μ’μ 창ꡬ
νΈμ μλ¦Όμ μ’ λ₯λ λ κ°μ§κ° μλ€.
- Alert notifications : μκ°μ μΌλ‘ 보μ¬μ§λ μΌλ°μ μΈ νΈμ μλ¦Ό, 컀μ€ν°λ§μ΄μ§ν΄μ μνΈμμ© ν μ μλ κ°λ€μ μ‘°μ ν μ μλ€.
- Background notifications : μ½ν μΈ λ₯Ό μ΅μ μνλ‘ μ μ§νκΈ° μν΄ μ±μ΄ ν¬κ·ΈλΌμ΄λκ° μλλλΌλ λ°νμμ μμ ν μ μκ² νλ€.
Alert notifications
- Visible alert : μ±μ λ³κ²½μ¬νμ λν΄ λ³΄μ¬μ§λ μλ¦ΌμΌλ‘ μ λ¬ν μ μλ€.
- Display new information & Can be interactive : μνΈ μμ©ν μ μλ μλ‘μ΄ μ 보λ₯Ό μ리λλ° μ¬μ©ν΄μΌ νλ€. ex λ©μΈμ§
- Foreground or background : μ±μ΄ μ€νμ€μΌ νμκ° μκ³ , μ±μ μνμ κ΄κ³ μμ΄ νμλ μ μλ€.
- Customizable : νΈμ μλ¦Όμ λͺ¨μμ΄λ μνΈ μμ©μ μν κΈ°λ₯μ 컀μ€ν°λ§μ΄μ§ ν μ μλ€.
Implementing Alert notifications
1. register for remote notifications
κ°μ₯ λ¨Όμ ν΄μΌν μΌμ Remote notifications μ λ±λ‘ν΄μΌ νλ κ²μ΄λ€. μμ λ©μλλ₯Ό μ΄μ©νλ©΄ Apple Push Notification system (APNs) μ λλ°μ΄μ€κ° λ±λ‘λκ³ , λλ°μ΄μ€ ν ν°μ μ±μ λ°ννλ€. νΈμ ν ν°μ λλ°μ΄μ€λ₯Ό μλ³νλλ° μ¬μ©λκ³ , νΈμλ₯Ό 보λ΄λ λμμΌλ‘ μ§μ νκΈ° μν κ°μΌλ‘ μ¬μ©λλ€.
2. declare your AppDelegate a UNUserNotificationCenterDelegate
μμ μ½λμμλ UNUserNotificationCenter μ delegate λ₯Ό AppDelegate λ΄μ self λ‘ μ§μ νκΈ° λλ¬Έμ AppDelegate κ° UNUserNotificationCenterDelegate λ₯Ό μ±ννλ€κ³ μ μΈν΄μΌ νλ€. delegate λ‘ μ§μ νκ³ λλ©΄, νΈμλ₯Ό λλ μ λ μ±μκ² μλ €μ€ μ μλ€.
3. implement Registration callbacks
registerForRemoteNotifications λ©μλ νΈμΆ νμ μ λκ°μ§ λ©μλ μ€ νλμ λν΄ μ½λ°±μ λ°λλ€.
μ€ν¨ν κ²½μ° μ€ν¨ μ΄μ μ ν¨κ» μμ λ©μλκ° νΈμΆλκ³ , μ±κ³΅ν κ²½μ° μλ λ©μλκ° νΈμΆλλ€.
ν ν°μ λ°λλ° μ±κ³΅νλ€λ©΄, λλ°μ΄μ€μ νΈμ μλ¦Όμ λ³΄λΌ μ μλλ‘ λ°±μλ νΈμ μλ²λ‘ μ μ‘ν΄μΌ νλ€.
APNs μμ μ±μΌλ‘ λλ°μ΄μ€ ν ν°μ Data κ°μ²΄λ‘ μ λ¬λλ―λ‘, μλ²μ μ λ¬νκΈ° μν΄μλ λ¬Έμμ΄λ‘ λ³νν΄μ 보λ΄λ©΄ λλ€.
Data νμμ 16μ§μ λ¬Έμμ΄λ‘ λ³ννκ³ κ²°ν©ν ν, URLQuery μ μΆκ°ν΄μ μλ²λ‘ μ μ‘νλ μ½λμ΄λ€.
νΈμλ₯Ό 보λ΄κΈ° μν λλ°μ΄μ€ ν ν°μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νλ λ‘μ§μ μλ²μμ μννλ©΄ λλ€.
4. ask for notification permissions
κΈ°κΈ°κ° νΈμ μλ¦Όμ μμ νκΈ° μ μ, μλ¦Όμ νμν μ μλλ‘ κΆνμ μμ²ν΄μΌ νλ€. requestAuthorization λ©μλλ₯Ό νΈμΆνλ©΄ μλΏ μ°½μ΄ λ¬λ€.
μ¬μ©μκ° μλ½νκ±°λ κ±°μ ν κ²°κ³Όλ completion handler λ‘ μ λ¬λκ³ , κΈ°κΈ° μ€μ μ λ°μλλ€. ν΄λΉ λ©μλλ₯Ό μ°μμΌλ‘ νΈμΆνλ©΄ μ°½μ΄ νμλμ§ μλλ€. requestAuthorization λ©μλμ μ΅μ μΌλ‘ alert, sound, badge λ±μ λν κΆνμ μμ²ν μ μλ€.
example payload
μ보카λ λ² μ΄μ»¨ λ²κ±°κ° μλ‘λμμμ μλ €μ£Όλ νΈμ μλμ νμ΄λ‘λλ₯Ό 보면 λ€μκ³Ό κ°λ€.
- aps λμ
λ리 : νΈμ μλ¦Όμ κΈ°κΈ°μ λ λλ§νκΈ° μν μ 보λ€μ λ΄κ³ μλ€.
- alert λμ λ리 : νΈμ μλ¦Όμ 보μ¬μ€ title, body λ₯Ό λ΄κ³ μλ€.
- sound : μ΅μ λ, νΈμ μλμ λ°μ λ μ리λ₯Ό μ¬μνλ €λ©΄ ν¬ν¨ν΄μΌ νλ€. default λ‘ μ λ κ²½μ° κΈ°λ³Έ μ¬μ΄λκ° μ¬μλλ€.
- badge : μ± μμ΄μ½μ νμλλ κ°, νΈμ μλμ λλ μ λ λ±μ§λ₯Ό μ¬λΌμ§κ² νλ €λ©΄ μ½λλ₯Ό ν΅ν΄ 0μΌλ‘ μ€μ ν΄μΌ νλ€.
- aps νλ μΈλΆμλ 컀μ€ν ν λ°μ΄ν°λ₯Ό μ λ¬ν μ μλ€.
- payload key μ λν΄μλ μλ λ§ν¬ μ°Έκ³
how to handle a notification payload
νΈμ μλ¦Όμ΄ μ΄λ¦΄ λλ§λ€ userNotificationCenterDelegate λ©μλκ° νΈμΆλλ€.
- μ±μ μ λ¬λλ νμ΄λ‘λλ μλ μ½ν μΈ μ userInfo μμ±μμ μΆμΆν μ μλ€.
- userInfo λ°μ΄ν°λ₯Ό ν΅ν΄ λμμ μνν ν completionHandler λ₯Ό νΈμΆνκ±°λ, λ°μ΄ν°κ° μλ κ²½μ°μλ completionHandler λ₯Ό νΈμΆν΄μ€μ νΈμ μλ¦Όμ΄ μ΄λ Έμμ μμ€ν μκ² μλ €μ€μΌ νλ€.
Background notifications
- Fetch data in background : νΈμ μλ¦Όμ λ°μ λ λ°±κ·ΈλΌμ΄λμμ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ μλ€.
- Stay up to date : μ±μ μ€ννμ§λ μμ μνλ‘ μ΅μ μνλ‘ μ μ§νλλ° μ¬μ©ν΄μΌ νλ€.
- Will launch if necessary : μμ€ν μ μ±μ μ€ννκ³ λ°±κ·ΈλΌμ΄λ μ λ°μ΄νΈλ₯Ό μννλλ° νμν λ°νμμ μ 곡νλ€.
- System managed : λ무 λ§μ λ°±κ·ΈλΌμ΄λ μμ μ ν μ μκ² μ νλμ΄ μκ³ , λ°°ν°λ¦¬ λΆμ‘± λ± μ μ½ μ‘°κ±΄μ΄ μλ€λ©΄ λ°±κ·ΈλΌμ΄λ μ λ°μ΄νΈκ° λμ§ μμ μ μλ€.
λ°±κ·ΈλΌμ΄λ νΈμλ λ§μ°¬κ°μ§λ‘ APNs μ λλ°μ΄μ€ ν ν°μ λ±λ‘ν΄μΌ νλ€. λ°±μλ μλ²μ ν ν°μ 보λ΄λ μμ μ λμΌνλ€.
λ€λ§, Appdelegate λ₯Ό UNUserNotificationCenterDelegate λ‘ μ§μ νκ±°λ, UNUserNotificationCenter μ ν λΉν νμκ° μλ€.
UNUserNotificationCenterDelegate λ Alert push λ₯Ό μ²λ¦¬ν λμλ§ μ¬μ©λλ€.
Background notification payload
content-available νλλ§ μ μΌνκ² νμνλ€.
ν΄λΉ νλκ° λ°±κ·ΈλΌμ΄λ μλ¦Όμμ μλ €μ£Όκ³ , μ λ°μ΄νΈλ₯Ό μννκΈ° μν΄ μ±μ μμν΄μΌ νλ€λ κ²μ μμ€ν μκ² μλ €μ€λ€.
λ§μ°¬κ°μ§λ‘ aps νλ μΈμ 컀μ€ν ν νλλ₯Ό μΆκ°ν μ μλ€.
Handle a background push
νΈμ μλ¦Όμ μμ νλ©΄ application(didReceiveRemoteNotification) λ©μλκ° νΈμΆλλ€.
alert push μ λ€λ₯΄κ² completionHandler μ νλμ 맀κ°λ³μκ° μλ€. λ°±κ·ΈλΌμ΄λ μ λ°μ΄νΈκ° μ€ν¨νλμ§, λ°μ΄ν°λ₯Ό μμ νμ§ μμλμ§, μλ‘μ΄ λ°μ΄ν°λ₯Ό μμ νλμ§μ λν΄ μμ€ν μκ² μλ €μ£Όλ enum νμ μ΄λ€.
- URL μμ±μ μ€ν¨ν κ²½μ°μλ completionHandler λ₯Ό νΈμΆν΄μ λ°±κ·ΈλΌμ΄λ μ λ°μ΄νΈ μ€ν¨λ₯Ό μλ €μ€λ€.
- URL μμ±νκ³ λ°μ΄ν°κ° μλ€λ©΄ completionHandler λ₯Ό ν΅ν΄ λ°μ΄ν°κ° μμ΄ μλ£λμμμ μλ €μ€λ€.
- URL μμ± ν λ°μ΄ν°κ° μ μμ μΌ λμ μ λ°μ΄νΈλ λ©λ΄λ₯Ό κ°μ Έμ€κ³ λ©λ΄λ₯Ό μ λ°μ΄νΈν ν, completionHandler λ₯Ό ν΅ν΄ μλ‘μ΄ λ°μ΄ν°λ₯Ό κ°μ Έμμμ μ±κ³΅νμμ μλ €μ€λ€.
μ΄μ νΈμμ λν΄ λͺ¨λ κ±Έ ν μ μκ³ , κ°λ°μ μ κ°μ νΈμ μλ¦Όμ νμ±ννκ³ κ΅¬ννκΈ°λ§ νλ©΄ λλ€ π
'π iOS > WWDC' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[WWDC2017] Love at First Launch (0) | 2023.05.24 |
---|---|
[WWDC21] Discover concurrency in SwiftUI (1) | 2023.05.18 |
[WWDC18] iOS Memory Deep Dive (2) | 2022.11.27 |
[WWDC19] Advances in Collection View Layout - Part 1 (0) | 2022.10.17 |
[WWDC19] Data Flow Through SwiftUI - Part 2 (0) | 2022.08.30 |