(iOS) ์๋ฆผ์ฐฝ, ์ก์ ์ํธ , ๋ก์ปฌ ํธ์์๋ (UIAlertController , UserNotification)
- -
๋ฉ์์ง ์ ๋ฌ
1. ๋ฉ์์ง ์๋ฆผ์ฐฝ - UIAlertController
์ฑ ๋ด์์ ์ฌ์ฉ์์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๋ํ์ ์ธ๊ฒฝ์ฐ
- ๋ฉ์์ง์ฐฝ (์๋ฆผ์ฐฝ)
- ์ฑ์ด ์คํ ์ค์ผ๋๋ง ๋์ํ๋ค. - ์ด๊ฒ์ ๋ณด์ํ๊ธฐ ์ํด ๋ก์ปฌ, ์๋ฒ ์๋ฆผ์ด ์๊ฒผ๋ค.
- ๋ก์ปฌ ์๋ฆผ (Local notification)
- ์๋ฒ ์๋ฆผ๊ณผ ๋ฉ์ปค๋์ฆ์ ๋น์ทํ์ง๋ง, ์ถ์ฒ๋ ๋ค๋ฅด๋ค.
- ์ฒ์์ ์ฑ์ ์ ์ํ ๋ ์ฑ ๋ด๋ถ์ ์ฝ๋์ ์ํด ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค. ๋ฐ๋ผ์ ์ํฉ์ ๋ฐ๋ผ์ ๋์ ์ผ๋ก ๋ฐ์ํ์ง ๋ชปํ๋ค.
- ์๋ฒ ์๋ฆผ (Server notification)
- ๋ณ๋์ ์๋ฒ๊ฐ ํ์ํ๋ค.
- APNs(Apple Push Notification Service)๋ผ๋ ์ ํ์ ๋ฉ์์ง์์คํ ์๊ฒ ๋ณด๋ธ ๋ฉ์์ง๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๋ฌ๋๋ ๋ฐฉ์์ด๋ค.
- ๋ฐ์ก์ ์ํด์๋ ๋ณ๋์ ์ธ์ฆ์ ํน์ ์ธ์ฆํ ํฐ์ด ํ์ํ๋ค.
- ์ฌ์ฉํ๊ธฐ ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ ๊ธฐ์ ์๋น์ค์์ ์ฃผ๋ก ์ด์ฉ๋๋ค.
Provider : ๋ฉ์์ง ์ ๋ฌ์(๊ณต๊ธ์), ์ฃผ๋ก 3rd Party Server์์ ์ํ๋๋ค.
iOS์์๋ ViewController์ ์ผ์ข
์ธ UIAlertController
๋ฅผ ํตํด ๋ฉ์์ง์ฐฝ์ ๊ตฌํํ๋ค. iOS 8.0 ์ดํ์ ๋ฑ์ฅํ๋ค. (UIAlertView
๋ iOS 8.0 ๋ฒ์ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ฏ๋ก ํ์ฌ๋ ์ฌ์ฉ๋์ง ์๋๋ค.)
โ <์ผ์ชฝ์ด ์ก์ ์ํธ, ์ค๋ฅธ์ชฝ์ด ์๋ฆผ์ฐฝ>
๋ฉ์์ง์ฐฝ์ ์ข ๋ฅ
- ์๋ฆผ์ฐฝ (Alrert) - Modal ๋ฐฉ์
- ๊ฒฝ๊ณ ๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ์ทจ์ํ ๊ธฐํ๋ฅผ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ค์ ์ ๋ณด ํ์
- ์ก์
์ํธ (Action Sheet)
- ์ ํํด์ผํ ๋ชฉ๋ก์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ
- ์๋ก์ด ์์ ์ฐฝ์ ์ฌ๋ ๊ฒฝ์ฐ
๋ชจ๋ฌ(Modal)
๊ฒฐ์ ์ ์ธ ์ฐจ์ด๋ ๋ชจ๋ฌ(Modal) ์ฌ๋ถ์ด๋ค.
๋ชจ๋ฌ์ด๋ ์ฐฝ์ด ๋ซํ๊ธฐ ์ ์๋ ํด๋น ์ฐฝ์ ์์ญ์ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฐ์ํ ์ ์๋๋ก ์ ๊ธฐ๋ ๊ฒ์ ์๋ฏธํ๊ฒ๋๋ค. ์ก์ ์ํธ ๊ฐ์๊ฒฝ์ฐ์๋, ์ก์ ์ํธ๊ฐ ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ ํฐ์นํ๊ฒ ๋๋ฉด ์ก์ ์ํธ์ฐฝ์ด ๋ซํ๊ฒ ๋๋ค.
๋น๋๊ธฐ (Asynchronize) ๋ฐฉ์
์๋ฆผ์ฐฝ ์ด์ธ์ ๋ถ๋ถ์ ํฐ์นํด๋ ๋ฐ์์ด ์๋ค๋ ๊ฒ์, ์ฑ์ ์คํ์ด ์ค์ง๋์๋ค๋ ๋ป๊ณผ๋ ๋ค๋ฅด๋ค. ์๋ฆผ์ฐฝ์ ๋น๋๊ธฐ๋ฐฉ์์ผ๋ก ์คํ๋๋ค. ๋น๋๊ธฐ ๋ฐฉ์์ ๊ธฐ์กด์ ์คํ ํ๋ฆ์ ๋ฐฉํดํ์ง ์๋ ์ ์์ ์๋ก์ด ์คํํ๋ฆ์ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ์๋ฆผ์ฐฝ์ด ๋ ์์ด๋ ์ฑ์ ์ฝ๋๋ค์ ๊ณ์ ์คํ๋๊ณ ์๋ค.
1 - (1) UIAlertController
๋ฉ์์ง ์ฐฝ์UIAlertController
UIAlertAction
๋๊ฐ์ง๊ฐ ์ฌ์ฉ๋๋ค. UIAlertController
๊ฐ ์๋์ฐ(๋ฉ์์ง ์ฐฝ ์์ฒด)๋ฅผ ๊ตฌํํ๊ฒ ๋๊ณ , UIAlertAction
์ ๋ฉ์์ง ์ฐฝ ๋ด๋ถ์ ๋ค์ด๊ฐ ๋ฒํผ์ ๊ตฌํํ๊ฒ ๋๋ค.
let alert = UIAlertController(title: "Alert", message: "Sample", preferredStyle: UIAlertController.Style.alert) // UIAlertController์ ์ธ์คํด์ค ์์ฑํ๊ธฐ, preferredStyle์์ Action sheet์ธ์ง, alert์ธ์ง ๊ณ ๋ฅผ ์ ์๋ค.
let cancel = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel) // ๋ฒํผ์์ฑ
alert.addAction(cancel) // ์๋ฆผ์ฐฝ์ ๋ฒํผ์ถ๊ฐ
self.present(alert, animated: false) // ์๋ฆผ๋์ฐ๊ธฐ , ์๋์ผ๋ก ๋ซํ๋ฏ๋ก dismiss๋ ํ์ํ์ง ์๋ค.
UIAlertAction.Style
์๋ฆผ์ฐฝ ๋ฒํผ์ ์คํ์ผ์ด๋ค. ์ด 3๊ฐ์ง๊ฐ ์๋ค.
UIAlertAction์ ํ๋ผ๋ฏธํฐ handler
๋ฒํผ์ด ํด๋ฆญ ๋์์๋ ์คํํ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ค. ํจ์๋ ํด๋ก์ ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์ด๋ ๋ฒํผ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ์ ๋ณด๋ ์ธ์๊ฐ์ผ๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ UIAlertAction
ํ์
์ ์ธ์๊ฐ ํ๋๋ฅผ ์
๋ ฅ๋ฐ๋ ํ์์ผ๋ก ์ ์ํด์ผํ๋ค.
ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ๋๋ ๋งค๊ฐ๋ณ์๋ ์ธ๋๋ฐ๋ก ๋์ ํ ์ ์๋ค.
UiAlertAction(title: "cancel", style: .cancel) {(_) in
// code
// code
}
์ด๊ฑฐํ ์ถ์ฝ
์ด๊ฑฐํ์ ๊ฒฝ์ฐ๋ ์ถ์ฝํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
preferredStyle: UIAlertcontroller.Style.alert
๋ถ๋ถ์ .alert
๋ก ์ ์ด๋ ์ปดํก์ผ๋ฌ๋ ์ธ์ํ ์ ์๋ค.
์ ๋ ฅ ํ๋๋ฅผ ๊ฐ์ง ๋ฉ์์ง์ฐฝ
๋ฉ์์ง ์ฐฝ์ ํตํด ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ์ ์๋ ์๋ค. (Appstore login์ฐฝ์ด ๋ํ์ ์ด๋ค) ๊ตฌํ ๋ฐฉ๋ฒ์UIAlertController
๊ฐ์ฒด์ ํ
์คํธ ํ๋๋ฅผ ์ถ๊ฐํด ์ฃผ๋ฉด ๋๋ค. <alert ์ธ์คํด์ค>.addTextField(configurationHadnelr:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
...
...// alert ์ด๋ผ๋ ๋ณ์์ ์๋ฆผ์ฐฝ ์ธ์คํด์ค ์์ฑ (์ ๋ถ๋ถ ์ฝ๋์ ๊ฐ์ผ๋ฏ๋ก ์๋ต)
alert.addTextField(configurationHandler: {(textField) in
textField.placeholder = "Password" // ํ๋ ์ด์ค ํ๋
textField.isSecureTextEntry = true // ์ํธ์ฒ๋ฆฌ
})
self.present(alert, animated:false)
- ๋ฉ์์ง์ฐฝ์ ํ
์คํธ ํ๋๋
.textField
์์ฑ์ ํตํด ์ฐธ์กฐ ํ ์ ์๋ค. textField
๋ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (์ฒซ๋ฒ์งธ ํ ์คํธ ํ๋๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด ์ธ๋ฑ์ค 0๋ฒ)- ํ
์คํธ ํ๋์ ์์ฑ์ ์ถ๊ฐํ ์ค์ ์ด ์๋ค๋ฉด,
alert.addTextField()
๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
Local ์๋ฆผ
๋ก์ปฌ ์๋ฆผ์ ์ฑ ๋ด๋ถ์ ๋ฉ์์ง๋ฅผ iOS ์๋ฆผ ์ผํฐ๋ฅผ ํตํด ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฑ์ด ์ข ๋ฃ๋๊ฑฐ๋, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ผ ๋๋ ์ ๋ฌํ ์ ์๋ค.
๋ก์ปฌ ์๋ฆผ์ iOS์ค์ผ์ค๋ฌ์ ์ํด ๋ฐ์ก๋๋๋ฐ, ๋ฉ์์ง ๋ด์ฉ๊ณผ ๋ฐ์ก ์๊ฐ์ iOS์ค์ผ์ค๋ฌ์ ๋ฑ๋กํด๋์ผ๋ฉด ํด๋น ์๊ฐ์ ๋ง์ถ์ด ๋ฐ์ก๋๋ค. ์ฑ์ด ์คํ์ค์ด๋ผ๋ฉด, ์๋ฆผ์ฐฝ์ ์ด์ฉํ๋๊ฒ ํจ์จ์ ์ด๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ก์ปฌ์๋ฆผ์ ์ด์ฉํ๋๊ฒ ํจ์จ์ ์ด๋ค.
iOS 10 ์ด์ ์๋ UILocalNotification
๊ฐ์ฒด ์์ ๋ก์ปฌ ์๋ฆผ์ ์ฒ๋ฆฌํ์ง๋ง, ์ต๊ทผ์๋ UserNotification
ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
UserNotification ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ ๋ก์ปฌ ์๋ฆผ
UserNotification
์ ์๋์ ์ํ ์ฌ๋ฌ๊ฐ์ง ๊ฐ์ฒด๋ค์ ํฌํจํ ํ๋ ์์ํฌ์ด๋ค. ์ฌ๊ธฐ์ ์ํ ์ฌ๋ฌ๊ฐ์ง ์๋ฆผ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ UN
์ผ๋ก ์์ํ๋ ์ ๋์ด๋ฅผ ๊ฐ์ง๋ค. ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ import UserNotification
์ ํด์ฃผ์ด์ผํ๋ค.
UserNotification์ ์ฃผ์๊ฐ์ฒด๋ค
UNMutableNotificationContent
- ์๋ฆผ์ ํ์ํ ๋ฉ์์ง์ ๊ฐ์ ๊ธฐ๋ณธ ์์ฑ๋ค์ ๋ด๋ ์ฝํ ์ธ ์ญํ ์ ํ๋ค.
- ์ฑ ์์ด์ฝ์ ๋ฐฐ์ง, ์ฌ์ด๋ ์ค์ ๋ ์ด ๊ฐ์ฒด๋ฅผ ํตํด์ ํ๋ค.
UNTimeIntervalNotificationTrigger
- ์๋ฆผ์ ๋ฐ์ก ์กฐ๊ฑด์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.
- ์๋ฆผ ๋ฐ์ก ์๊ฐ, ๋ฐ๋ณต ์ฌ๋ถ ๋ฑ์
Date()
ํ์ ํน์UNTimeIntervalNotificationTrigger
์ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์๋ค.
UNNotificationRequest
- 1, 2๋ฒ์ ๊ฐ์ฒด๋ค์ ํตํด์ ์๋ฆผ์ ํ์ํ ์์ฑ๋ค์ ๊ฐ์ถ๊ณ , 1,2๋ฒ์ ์ธ์๊ฐ์ผ๋ก ๋ฐ์ ์ด ํด๋์ค๋ฅผ ์ด๊ธฐํํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ์๋ฆผ ์์ฒญ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
UNUserNotificationCenter
- ์ค์ ๋ฐ์ก์ ๋ด๋นํ๋ ์๋ฆผ์ผํฐ์ด๋ค.
- ์ด ๊ฐ์ฒด๋ ์ฑ๊ธํค ๋ฐฉ์์ผ๋ก ๋์ํ๋ฏ๋ก, ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ์์ฑํ ์ ์๋ค.
current()
๋ฅผ ํตํด์ ์ฐธ์กฐ ์ ๋ณด๋ง ๊ฐ์ ธ ์ฌ ์ ์๋ค.
์ค์ต(์ฝ๋)
์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ฎ๊ฒผ์๋ ๋ก์ปฌ ์๋ฆผ์ด ๋ฐ์ํ๋ ๊ฐ๋จํ ์์ ์ด๋ค. ๋ก์ปฌ์๋ฆผ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ฒ ์์๋๋ก ๊ธฐ์ตํด๋ณด๋ฉด,
- ์ฌ์ฉ์๋ก๋ถํฐ ์๋ฆผ ํ์ฉ์ ์น๋ฝ๋ฐ๊ธฐ.
UIMutableNotificationContent
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆผ ์ฝํ ์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.- ์ฑ ์์ด์ฝ badge๋ฅผ 1๋ก ์ค์
- TItle, subtitle ์ ๋ ฅ
- ์๋ฆผ ๋ฉ์์ง ์ค์
- ์ฌ์ด๋ ์ค์ (
UNNotificationSound
) UNTimeIntervalNotificationTrigger
ํด๋์ค๋ฅผ ์ด๊ธฐํํ์ฌ, ์๋ฆผ ๋ฐ์ก ์กฐ๊ฑด์ ์ง์ ํ ๊ฐ์ฒด ์์ฑํ๊ธฐ. (์๊ฐ์ค์ ๊ณผ ๋ฐ๋ณต์ฌ๋ถ๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.)UNNotificationRequest
ํด๋์ค๋ฅผ ์ด๊ธฐํํ์ฌ ์๋ฆผ ์์ฒญ ๊ฐ์ฒด ์์ฑํ๊ธฐ. ๊ฐ์ฒด ์์ด๋๋ ์ค์ ํ๋ค. ๊ฐ์ฒด ์์ด๋๋ ์ฌ์ฉ์๊ฐ ์ด๋ ์๋ฆผ ๋ฉ์์ง๋ฅผ ํด๋ฆญํ๋์ง ์๋ณํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋๋จธ์ง ์ธ์๊ฐ์ผ๋ก ์๋ฆผ ์ฝํ ์ธ ์ ์๋ฆผ ๋ฐ์ก ์กฐ๊ฑด ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ค.- ์์ฑ๋ ์๋ฆผ ์์ฒญ ๊ฐ์ฒด๋ฅผ ๋ ธํฐํผ์ผ์ด์ ์ผํฐ์ ์ถ๊ฐํ๋ค. ๋ ธํฐํผ์ผ์ด์ ์ผํฐ๋ iOS์ ์ค์ผ์ค๋ง ์ผํฐ์ ์ด ๊ฐ์ ๋ฑ๋กํ๊ณ , ๋ฐ์กํ๊ฒ ๋๋ค.
์ฌ์ฉ์๋ก๋ถํฐ ๋ก์ปฌ ์๋ฆผ ์น์ธ๋ฐ๊ธฐ
AppDelegate.swift ํ์ผ
import UIKit
import UserNotifications
import CoreData
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 10.0, *){ // iOS10.0 ์ด์๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
//๊ฒฝ๊ณ ์ฐฝ, ๋ฐฐ์ง, ์ฌ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์๋ฆผ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์๊ฒ ๋์ ์ฌ๋ถ๋ฅผ ์คํํ๋ค.
let notiCenter = UNUserNotificationCenter.current()
notiCenter.requestAuthorization(options: [.alert, .badge, .sound]){(didAllow, e) in}}else{
}
return true
}
...
...
...
if #available()
๊ตฌ๋ฌธ์ iOS๋ฒ์ ๋ณ๋ก ์คํ ๋ก์ง์ ๋๋๊ธฐ ์ํจ์ด๋ค.
requestAuthorization()
๋ฉ์๋๋ฅผ ํตํ์ฌ ์ฌ์ฉ์์๊ฒ ์๋ฆผ ์ค์ ์ ๋ํ ๋์๋ฅผ ๋ฐ์ ์ ์๋ค. options์ธ์๋ ์๋ฆผ ๋ฉ์์ง๋ฅผ ๊ตฌ์ฑํ ์์๋ค์ด๋ค.(์๋ฆผ์ฐฝ, ๋ฐฐ์ง, ์ฌ์ด๋)
๋๋ฒ์งธ ์ธ์๋ ํด๋ก์ ์ด๋ค. ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ didAllow๋ ์ฌ์ฉ์์ ๋์ ์ฌ๋ถ๊ฐ BOOL๊ฐ์ผ๋ก ๋ค์ด์ค๊ณ , ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ e๋ ์ค๋ฅ ๋ฐ์์์ ์ฌ์ฉ๋๋ ์ค๋ฅ ๊ฐ์ฒด ํ์ ์ด๋ค.
sceneWillResignActive(_:)
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋ค์ด๊ฐ์ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค. iOS13 ์ด์ ์๋ AppDelegate์ applicationWillResignActive(_:)
์ ์ ์๋์ด ์์์ผ๋, iOS13 ์ดํ ์๋ช
์ฃผ๊ธฐ ์ด๋ฒคํธ ์ ๋ฌ๋ฐฉ์์ด ๋ณ๊ฒฝ๋์ด์ SceneDelegate์ sceneWillResignActive(_:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
SceneDeleagte.swift ํ์ผ
func sceneWillResignActive(_ scene: UIScene) {
if #available(iOS 13.0, *){
UNUserNotificationCenter.current().getNotificationSettings{
settings in if settings.authorizationStatus == UNAuthorizationStatus.authorized{
let nContent = UNMutableNotificationContent()
//์ฝํ
์ธ ์์ฑ ์ ์
nContent.badge = 1
nContent.title = "๋ก์ปฌ ์๋ฆผ ๋ฉ์์ง"
nContent.subtitle = "๋ค์ ์ฑ์ ์ด์ด์ฃผ์ธ์"
nContent.body = "์ ์ฑ์ ๋๊ฐ์
จ๋์?!"
nContent.sound = UNNotificationSound.default
nContent.userInfo = ["name" :
"Lee"]
//์๋ฆผ ๋ฐ์ก ์กฐ๊ฑด ๊ฐ์ฒด(์ฆ, ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋์๊ฐ๊ณ 5์ด๋ค์ ์๋ฆผ๋ฐ์)
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "wakeup", content: nContent, trigger: trigger) //์๋ฆผ ์์ฒญ ๊ฐ์ฒด
UNUserNotificationCenter.current().add(request) //Notification Center์ ์ถ๊ฐ
}else{
print("์ฌ์ฉ์๊ฐ ๋์ํ์ง ์์์ต๋๋ค.")
}
}
}else{
//iOS 13 ์ดํ ๋ฒ์
}
}
๊ฒฐ๊ณผํ๋ฉด(๋ก์ปฌ์๋ฆผ)
๋ฐ์์๋ฆผ ์ฒ๋ฆฌํ๊ธฐ
์ฌ์ฉ์๊ฐ ์๋ฆผ์ ๋ฐ๊ณ , ์ด๋ฅผ ํฐ์นํ์๋ ๋ณ๋์ ์ก์
์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. UserNotification
ํ๋ ์์ํฌ์์๋ ์ด๋ฅผ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ค. ์์ ์ฝ๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํ๊ณ 5์ด๋ค์ ์๋์ ์ธ๋ฆฌ๋๋ก ์ฝ๋๋ฅผ ์งฐ๋ค. ์ด ์๋ ๋ฉ์์ง๋ฅผ ํด๋ฆญํ์๋ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์
AppDelegate ํด๋์ค ์ ์๋ถ๋ถ์
UNUserNotificationCenterDelegate
ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ค.
import UIKit
import UserNotifications
import CoreData
@main
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
AppDelegate ๋ด๋ถ์ didFinishLaunchingWithOptions ํจ์์์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ง์ ํด์ค๋ค.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if #available(iOS 10.0, *){
let notiCenter = UNUserNotificationCenter.current()
notiCenter.requestAuthorization(options: [.alert, .badge, .sound]){(didAllow, e) in}
notiCenter.delegate = self
}else{
}
return true
}
๋ค์์ผ๋ก๋ AppDelegate.swift์ ๋ ธํฐํผ์ผ์ด์ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
- ์ฑ์ด ์คํ์ค์ด๋ฉด์ ์ฌ์ฉ์๊ฐ ์๋ฆผ์ ํฐ์นํ์๋ AppDelegate์ ๋ค์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉด ๋๋ค.
Willpresent ๋ฉ์๋
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("willpresent")
if notification.request.identifier == "wakeup"{
let userInfo = notification.request.content.userInfo
print(userInfo["name"]!)
}
completionHandler([.alert, .badge,.sound])
}
- ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๊ณ , ์ฌ์ฉ์๊ฐ ์๋ฆผ์ ํฐ์นํ์๋
DidReceive ๋ฉ์๋
@available(iOS 10.0 , *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if response.notification.request.identifier == "wakeup" {
let userInfo = response.notification.request.content.userInfo
print("didReceive")
print(userInfo["name"]!)
}
completionHandler()
}
'๐ฑ iOS > -- UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
(iOS) ํ ์ด๋ธ ๋ทฐ (TableView) 2021.08.02
-
(iOS) ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ํตํด ์ด์ ํ๋ฉด์ ๊ฐ ์ ๋ฌํ๊ธฐ (Delegate , Protocol) 2021.07.31
-
(iOS) ํ๋ฉด ์ ํ ๊ณผ์ ์์์ ๋ฐ์ดํฐ ์ ๋ฌ , ViewController ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ 2021.07.26
-
(iOS) ์ฝ์ฝ์ ํฐ์น , iOS์ ๊ณ์ธต๊ตฌ์กฐ (CocoaTouch) 2021.07.19
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค