์นด์นด์คํก์ ์คํ์ํค์ง ์์ ์ํ์์ ์๋๋ฐฉ์ผ๋ก ๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ ์ค๋ ์๋, ํน์ ์ฑ์์ ๊ด๊ณ ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด์ ๋ฑ๋ฑ
๋ง์ ๊ณณ์์ push notification์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋น
๊ฑฐ์ ํ๋ก์ ํธ ํ ๋๋ง๋ค ํ์๋ก ๊ตฌํํ๊ธฐ๋ ํ๊ณ ์ฒ์์ ํ๋ค๋ณด๋ฉด ๊ฝค๋ ๋ณต์กํด์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋น
๐ฆ๐ฆ๐ฆ
push notification์ด๋
Apple Push Notification service = APNs๋ฅผ ์ด์ฉํด์
์ฑ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋น
์ฑ์ด ์คํ๋์ง ์์ ์ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ ๋ค์ด ์๋ ์ํ์์๋
์ฌ์ฉ์์๊ฒ ํธ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ์ค ์ ์์ต๋๋น
โญ
๋น๊ทผ~ ํน์ ์นดํก! ํ๋ ๊ฒ์ฒ๋ผ ์ํ๋ ์ฌ์ด๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์งง์ ํ
์คํธ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์๋ ์์ต๋๋ค
๋ํ ์ฑ ์์ด์ฝ ์์ ๋จ๋ ๋ฑ์ง์ ๊ฐฏ์๋ฅผ ์ธํ ํด ์ค ์ ์์ผ๋ฉฐ ๋ฏธ๋์ด ์ฒจ๋ถ๋ ๊ฐ๋ฅํฉ๋๋ค
๋ก์ปฌ๋ก push notification์ ๋ณด๋ผ ์ ์์ง๋ง ๋๋ถ๋ถ ์๋ฒ์์ ํธ์๋ฅผ ์ฌ์ฉ์์๊ฒ
๋ณด๋ด๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ ์ด๋ firebase๋ฅผ ์ฌ์ฉํฉ๋๋น
firebase์ ์ด์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ํฌ์คํ ์์ ํ๋๋ก ํ๊ณ ์ด๋ฒ์๋
์ด push notification ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์ ์ฝ๋ ์์์ ํด์ค์ผ ํ ๊ฒ์ ๋ํด์ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋น
๐ ์ฌ์ฉ์๋ก ๋ถํฐ permission ์ป์ด์ค๊ธฐ
์ฌ์ฉ์์๊ฒ ํธ์ ๋ ธํฐํผ์ผ์ด์ ์ ๋ณด๋ด๊ธฐ ์ํด์ ์ฐ์ ์ ์ผ๋ก permission์ด ํ์ํฉ๋๋ค!
์ฌ์ฉ์๊ฐ allow ํ๋ฉด ๊ทธ๋ ํธ์๋ฅผ ๋ณด๋ด๊ณ ์ฌ์ด๋๊ฐ ์๋ ํธ์๋ฅผ ์ค์ ํ๊ณ ํ ์ ์์ต๋๋น
import UserNotifications
func requestPermission() {
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { didAllow, error in
print(didAllow)
}
UIApplication.shared.registerForRemoteNotifications()
}
options ์๋ ๋ค์ํ ์ค์ ์ด ๋ค์ด ๊ฐ ์ ์์ผ๋ ์ฃผ๋ก
์ฑ ์์ด์ฝ์ ์ค๋ฅธ์ชฝ ๋ชจ์๋ฆฌ์ ์ซ์ ๋ฑ์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํ .badge
๊ทธ๋ฆฌ๊ณ ํธ์ ๋ฐ์ ๋ ์ฌ์ด๋ ๋ฐ์์ ์ํ .sound
๋ ธํฐํผ์ผ์ด์ ์ ๋ณด์ฌ์ค .alert
์ด๋ ๊ฒ ์ง์ ํด ์ค๋๋น ์ด ๋ฐ์๋ .carPlay, .provisional, .providesAppNotificationSettings ๋ฑ์ด ์์ต๋๋น
AppDelegate์์ ํธ์ถ ํ ์๋ ์์ผ๋
ํ์์ ๋ฐ๋ผ ํธ์ ๋ ธํฐํผ์ผ์ด์ ์ด ํ์ํ ํ๋ฉด์์ ๊ตฌํํด๋ ๋ฌด๋ฐฉํฉ๋๋ค
์ ๋ ์ฃผ๋ก ์คํ๋์ฌ๊ฐ ๋๋ ํ ๋ฉ์ธ ์์ญ์์ ๊ตฌํํฉ๋๋น
์ฌ์ฉ์๊ฐ Allow๋ฅผ ํด์ ํ์ฉํ ํผ๋ฏธ์
์ ์ผ๋ง๋ ์ง ์ค์ ์์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์
์ฑ ๋ด๋ถ์ ์ธํ ํ๋ฉด์ด๋ ํธ์๋ฅผ ํ์๋ก ํ๋ ์์ญ์
์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ ์ถ์ ํ ์ ์์ต๋๋น
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { didAllow, error in
DispatchQueue.main.async {
}
})
ํด๋ก์ ๋ด๋ถ์์ guard didAllow else {return} ๋ฑ์ผ๋ก ์ฌ์ฉ์์ ํผ๋ฏธ์ ์ค์ ์ ํ์ธํ๊ณ
ํ์ฉ ๋์์ ๋ ์ํํ ์ค์ ์ด๋ ์ฝ๋๋ฅผ ์์ฑํด ์ค ์ ์์ด์!
๐ Callback method
์ฑ์ด ํธ์ ๋ ธํฐํผ์ผ์ด์ ์ ๋ฐ์ผ๋ฉด iOS์์๋ UIApplicationDelegate ๋ฉ์๋๋ฅผ ํธ์ถ ํ๊ฒ ๋ฉ๋๋ค
์ด๋ ํธ์ถ๋๋ ๋ฉ์๋๋ ์ฑ์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ ๋ฉ๋๋ค
์ฐ์ ๋ฐ์น ์์ ์ ๋๋ค
์ฑ์ด ์คํ ๋์ง ์์ ์ํ์์ ์ฌ์ฉ์๊ฐ ํธ์๋ฅผ ๋๋ฌ์ ์ฑ์ ์คํ์ํจ ๊ฒฝ์ฐ
AppDelegate์ didFinishLaunchingWithOptions ์ด ์คํ๋ ๋
lunchOption์์ ํธ์ ๋ฐ์ ๋ด์ฉ์ ํ์ธ ํ ์ ์์ต๋๋น
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let options = launchOptions {
if let remoteNotification = options[UIApplication.LaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] {
// remoteNotification์ ํธ์์์ ๋ฐ์ ๋ด์ฉ์ด ๋ค์ด ์์
}
}
FirebaseApp.configure()
Messaging.messaging().delegate = self
return true
}
launchOptions์
UIApplication.LaunchOptionsKey.remoteNotification ์์
ํธ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค
๊ทธ ๋ค์์ผ๋ก๋ Background ์ ๋๋น
์ฑ์ด ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ์ ์๋์ง๋ง ์์ง ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ
์ํ๋ ํด๋์ค์์
UNUserNotificationCenterDelegate
๋ฅผ ์ฑํํ์ฌ ์๋ ํจ์๋ฅผ ๊ตฌํํด ์ค๋๋น
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
}
๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์์ ํธ์๋ฅผ ๋๋ฅธ ๊ฒฝ์ฐ ํด๋น ๋ฉ์๋๋ฅผ ํ๊ฒ ๋ฉ๋๋น
์ด๋ response์ notification.request.content.userInfo ์ ํธ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์์ต๋๋น!
Foreground๋ ์ฑ์ด ์คํ ์ค์ผ ๋
ํ์ฌ ํ๋ฉด์์ ์ฑ์ ์ฌ์ฉํ๊ณ ์์ ๋ ํธ์๋ฅผ ์ค์ ํด ์ค๋๋ค!
์ด ๋ถ๋ถ์ ๊ตฌํํ์ง ์์ผ๋ฉด ์ฑ์ ์ฌ์ฉ ์ค์ผ ๋ ํธ์๊ฐ ๋ณด์ด์ง ์๊ฑฐ๋
๋ฑ์ง๊ฐ ์นด์ดํ ๋์ง ์๊ฑฐ๋ ์๋ฆฌ๊ฐ ์๋๊ฒ ๋ฉ๋๋ค
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
completionHandler([.alert, .badge, .sound])
}
์ด๋ ํธ์ ๋ฐ์ดํฐ๋ notification.request.content.userInfo์ ๋ค์ด ์์ด์!
๋ง์ฝ ์ฑ์ ์คํํ๊ณ ์ฌ์ฉ ์ค์ผ ๋ (Foreground) ์ํ์ผ ๋ ํธ์๊ฐ ์ค๊ณ
์ฌ์ฉ์๊ฐ ํธ์๋ฅผ ๋๋ฅด๊ฒ ๋๋ฉด
willPresent๋ฅผ ํ๋ฉด์ ์ค์ ํ ์ต์ ๋๋ก ํธ์๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๊ณ
๊ทธ ํ์ didReceive๋ฅผ ํ๊ฒ ๋ฉ๋๋ค!
ํ๋ฆฌ๊ฑฐ๋ ์ ๋ชป ๋ ์ ์ด ์๋ค๋ฉด ๊ผญ ๋๊ธ ๋ถํ๋๋ ค์!!!
๐ฆ๐จ๐จ๐จ๐จ
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Swift] Custom Font ์ฌ์ฉํ๊ธฐ (0) | 2021.12.19 |
---|---|
[Swift] RIBs Architecture ๊ฐ์์ ํ ํ๋ฆฟ ์ค์ (0) | 2021.11.12 |
[SwiftUI 3.0] URLSession ๊ณผ List, @Published, @ObservedObject ์ฌ์ฉํ๊ธฐ (0) | 2021.10.27 |
[iOS/swift] UINavigaitonBar tint color iOS 15 + (0) | 2021.10.21 |
[swift 5] ๋ฐฐ์ด ํ์์ ๋ฌธ์์ด ๋ง๋ค๊ธฐ (0) | 2021.07.26 |
๋๊ธ