투케이2K

70. (TWOK/UTIL) [Ios/Swift] 파이어베이스 푸시 (firebase push) 알림 메시지 받음 처리 정리 본문

투케이2K 유틸파일

70. (TWOK/UTIL) [Ios/Swift] 파이어베이스 푸시 (firebase push) 알림 메시지 받음 처리 정리

투케이2K 2022. 7. 26. 21:17

[설 명]

프로그램 : Ios / Swift

설 명 : 파이어베이스 푸시 (firebase push) 알림 메시지 받음 처리 정리

 

[소스 코드]

    // MARK: - [푸시 알림 전달 받음 상태 확인]
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]){
        print("")
        print("===============================")
        print("[AppDelegate >> didReceiveRemoteNotification]")
        print("--------------------")
        print("설명 :: 리모트 푸시 알림 확인")
        print("--------------------")
        print("applicationState :: \(String(describing: UIApplication.shared.applicationState))")
        print("===============================")
        print("")
        
        
        // [switch 문을 사용해서 분기 처리 실시]
        switch UIApplication.shared.applicationState {
        case .active:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: 포그라운드 상태에서 푸시알림 전달받음")
            print("===============================")
            print("")

            break
        case .background:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: 백그라운드 상태에서 푸시알림 전달받음")
            print("===============================")
            print("")
            
            // 파싱 수행할 변수 정의
            var pushTitle = ""
            var pushMessage = ""
            var pushMsgType = ""
            var pushMessageId = ""
            
            // 전체 데이터를 딕셔너리 형태로 변경
            let dicData = userInfo as! [String: Any]
            
            // 개별 파싱 수행 실시
            if (dicData.keys.contains("aps")){
                
                // aps 파싱 수행
                var apsDic = dicData["aps"] as! [String: Any]
                
                // alert 파싱 수행
                if (apsDic.keys.contains("alert")){
                    var alert = apsDic["alert"] as! [String: Any]
                    
                    // 개별 데이터 삽입
                    pushTitle = String(describing: alert["title"] ?? "")
                    pushMessage = String(describing: alert["body"] ?? "")
                    pushMsgType = String(describing: dicData["msgType"] ?? "")
                    pushMessageId = String(describing: dicData["messageId"] ?? "")
                }
            }
            
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: [파싱] 백그라운드 푸시알림")
            print("--------------------")
            print("pushTitle :: \(pushTitle)")
            print("--------------------")
            print("pushMessage :: \(pushMessage)")
            print("--------------------")
            print("pushMsgType :: \(pushMsgType)")
            print("--------------------")
            print("pushMessageId :: \(pushMessageId)")
            print("===============================")
            print("")
            
            // [현재 애플리케이션 구동 상태 확인 실시]
            var ApplicationRun = S_Preference().getString(_sKey: S_FinalData.A_Application_Run)
            
            if ApplicationRun.trim().equals(_string: "RUN") { // [앱이 실행 중인 경우]
                
                // MARK: [상태 저장 : 앱이 실행 중이지만 백그라운드 상태로 내려가있는 경우]

            }
            else {

                // MARK: [상태 저장 : 사용자가 앱 작업 목록 날림]

            }
            break
        case .inactive:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: 푸시 클릭 접속 확인")
            print("===============================")
            print("")

            break
        default:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: default")
            print("===============================")
            print("")

            break
        }
    }











// MARK: - [노티피케이션 알림 딜리게이트 추가]
extension AppDelegate: UNUserNotificationCenterDelegate {
    
    // -----------------------------------------
    // [앱이 foreground 상태 일 때, 알림이 온 경우]
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        print("")
        print("===============================")
        print("[AppDelegate >> willPresent]")
        print("--------------------")
        print("설명 :: 앱 포그라운드 상태 푸시 알림 확인")
        print("--------------------")
        print("userInfo :: \(notification.request.content.userInfo)") // 푸시 정보 가져옴
        print("--------------------")
        print("title :: \(notification.request.content.title)") // 타이틀
        print("--------------------")
        print("body :: \(notification.request.content.body)") // 내용
        print("--------------------")
        print("sound :: \(notification.request.content.sound!)") // 소리
        print("--------------------")
        print("data [keys] :: \(notification.request.content.userInfo.keys)") // 커스텀 json 데이터
        print("--------------------")
        //print("data [sort] [푸시 타입] :: \(String(describing: notification.request.content.userInfo["sort"] ?? ""))") // 무음, 진동, 소리 발생 여부
        print("===============================")
        print("")

        // -----------------------------------------
        // [completionHandler : 푸시 알림 상태창 표시]
        completionHandler([.alert, .badge, .sound])
        // -----------------------------------------
    }
    
    // -----------------------------------------

    // [앱이 살아있고 background 상태 일 때, 알림이 온 경우 >> 포그라운드 전환 상태]
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        print("")
        print("===============================")
        print("[AppDelegate >> didReceive]")
        print("--------------------")
        print("설명 : 앱 백그라운드 >> 포그라운드 상태 푸시 알림 확인")
        print("--------------------")
        print("response :: \(response)") // 응답 전체
        print("--------------------")
        print("title :: \(response.notification.request.content.title)") // 타이틀
        print("--------------------")
        print("body :: \(response.notification.request.content.body)") // 내용
        print("--------------------")
        print("sound :: \(response.notification.request.content.sound!)") // 소리
        print("--------------------")
        print("data [keys] :: \(response.notification.request.content.userInfo.keys)") // 커스텀 json 데이터
        print("--------------------")
        //print("data [sort] [푸시 타입] :: \(String(describing: response.notification.request.content.userInfo["sort"] ?? ""))") // 무음, 진동, 소리 발생 여부
        print("===============================")
        print("")

        ///*
        if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            
            // [애플리케이션 작업 날림 감지 위함]
            var ApplicationRun = S_Preference().getString(_sKey: S_FinalData.A_Application_Run)

            if C_Util().stringNotNull(str: ApplicationRun) == true { // MARK: [앱이 실행 중인 경우]
                
                print("")
                print("===============================")
                print("[AppDelegate >> didReceive]")
                print("--------------------")
                print("설명 : [백그라운드 >> 포그라운드] 푸시 클릭 이벤트 확인")
                print("===============================")
                print("")
            }
            else {
               
                print("")
                print("===============================")
                print("[AppDelegate >> didReceive]")
                print("--------------------")
                print("설명 : [앱 종료 상태 >> 포그라운드] 푸시 클릭 이벤트 확인")
                print("===============================")
                print("")
            }
        }

        // [completionHandler : 푸시 알림 상태창 표시]
        completionHandler()
    }
    
    // -----------------------------------------
}

 

반응형
Comments