๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/iOS

[iOS] ํ‘ธ์‰ฌ ์•Œ๋ฆผ ํƒญํ–ˆ์„ ๋•Œ ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ธฐ(How to handle Push Notification?)

by Fomagran ๐Ÿ’ป 2021. 8. 9.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma๐Ÿ‘Ÿ ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜์€ ์œ ์ €๊ฐ€ ํ‘ธ์‰ฌ ์•Œ๋ฆผ๋ฐ”๋ฅผ ํƒญํ–ˆ์„ ๋•Œ ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~


Preview

 


AppDelegate

 

๋จผ์ € UserNotifications๋ฅผ import ํ•ด์ค๋‹ˆ๋‹ค.

 

import UserNotifications

 

์•„๋ž˜์™€ ๊ฐ™์ด userNotificationCenter๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.

 

let userNotificationCenter = UNUserNotificationCenter.current()

 

didFinishLaunchingWithOptions ๋ฉ”์„œ๋“œ์— ์œ„์—์„œ ๋งŒ๋“ค์–ด์ค€ userNotificationCenter์˜ ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ self๋กœ ํ•ด์ค๋‹ˆ๋‹ค.

 

application.registerForRemoteNotifications()๋„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”!

 

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        userNotificationCenter.delegate = self
        application.registerForRemoteNotifications()
        return true
    }

 

UserNotificationCenterDelegate๋ฅผ extension ํ•ด์ฃผ์‹œ๊ณ 

 

userNotificationCenter์˜ didReceive ๋ฉ”์„œ๋“œ์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ์–ด๋– ํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

extension AppDelegate: UNUserNotificationCenterDelegate {
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        
        let application = UIApplication.shared
        
        //์•ฑ์ด ์ผœ์ ธ์žˆ๋Š” ์ƒํƒœ์—์„œ ํ‘ธ์‰ฌ ์•Œ๋ฆผ์„ ๋ˆŒ๋ €์„ ๋•Œ
        if application.applicationState == .active {
            print("ํ‘ธ์‰ฌ์•Œ๋ฆผ ํƒญ(์•ฑ ์ผœ์ ธ์žˆ์Œ)")
        }
        
        //์•ฑ์ด ๊บผ์ ธ์žˆ๋Š” ์ƒํƒœ์—์„œ ํ‘ธ์‰ฌ ์•Œ๋ฆผ์„ ๋ˆŒ๋ €์„ ๋•Œ
        if application.applicationState == .inactive {
  	    print("ํ‘ธ์‰ฌ์•Œ๋ฆผ ํƒญ(์•ฑ ๊บผ์ ธ์žˆ์Œ)")
        }
    }

 

์—ฌ๊ธฐ์„œ ์–ด๋–ค ํ‘ธ์‰ฌ ์•Œ๋ฆผ์„ ๋ˆŒ๋ €๋Š”์ง€ ํ™•์ธํ•ด์•ผ๊ฒ ์ฃ ?

 

์ €๋Š” ํ‘ธ์‰ฌ ์•Œ๋ฆผ์˜ ํƒ€์ดํ‹€์„ ํ†ตํ•ด์„œ ํ™•์ธํ–ˆ๋Š”๋ฐ์š”.

 

ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„ ๋ฉ”์„œ๋“œ์—์„œ response.notification.request.content๋ฅผ ์ด์šฉํ•ด์„œ

 

ํ‘ธ์‰ฌ ์•Œ๋ฆผ์˜ title,body,identifier ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

if application.applicationState == .inactive {
            //ํ‘ธ์‰ฌ ์•Œ๋ฆผ ํƒ€์ดํ‹€์ด ์ฑ„ํŒ…์ผ๋•Œ
            if response.notification.request.content.title == "์ฑ„ํŒ…" {
        
            }
        }

 

์ด์ œ ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„์•ผ๊ฒ ์ฃ ?

 

์ €๋Š” ํƒญ๋ฐ”์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๋Š” NotificationCenter๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋Š”๋ฐ์š”.

 

NotificationCenter์˜ userInfo๋ฅผ ํ†ตํ•ด ํ‘ธ์‰ฌ ์•Œ๋ฆผ์˜ ํƒ€์ดํ‹€์— ํ•ด๋‹นํ•˜๋Š” ํƒญ๋ฐ” ์•„์ดํ…œ์˜ index๋ฅผ ์ „๋‹ฌํ•ด์ค๋‹ˆ๋‹ค.

 

if application.applicationState == .inactive {
            //ํ‘ธ์‰ฌ ์•Œ๋ฆผ ํƒ€์ดํ‹€์ด ์ฑ„ํŒ…์ผ๋•Œ
            if response.notification.request.content.title == "์ฑ„ํŒ…" {
        	NotificationCenter.default.post(name: Notification.Name("showPage"), object: nil, userInfo: ["index":1])
            }
        }

TabbarController

 

ํƒญ๋ฐ” ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„ NotificationCenter์— ์˜ต์ €๋ฒ„๋ฅผ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค.

 

 NotificationCenter.default.addObserver(self, selector: #selector(showPage(_:)), name: NSNotification.Name("showPage"), object: nil)

 

๊ทธ๋ฆฌ๊ณค userInfo์˜ index๋ฅผ  ํ™•์ธํ•ด์„œ selectedIndex๋ฅผ ํ•ด๋‹น index๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ํ‘ธ์‰ฌ ์•Œ๋ฆผ์„ ํƒญํ–ˆ์„ ๋•Œ 

 

์›ํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

@objc func showPage(_ notification:Notification) {
        if let userInfo = notification.userInfo {
            if let index = userInfo["index"] as? Int {
                self.selectedIndex = index
            }
        }
    }

 

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๊ณ  ํ‘ธ์‰ฌ์•Œ๋ฆผ์„ ํƒญํ•˜๋ฉด ํƒญ๋ฐ”์˜ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ ์ฑ„ํŒ…๋ฐฉ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

 


์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ ํ‘ธ์‰ฌ์•Œ๋ฆผ์„ ์œ ์ €๊ฐ€ ํƒญํ–ˆ์„ ๋•Œ ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด์•˜๋Š”๋ฐ์š”.

 

ํ˜น์‹œ๋ผ๋„ ๊ถ๊ธˆํ•˜์‹  ์ ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€