투케이2K

99. (swift/xcode) AnyHashable : Any 형태 데이터를 딕셔너리 (Dictionary) 로 형변환 수행 실시 본문

Swift

99. (swift/xcode) AnyHashable : Any 형태 데이터를 딕셔너리 (Dictionary) 로 형변환 수행 실시

투케이2K 2022. 8. 16. 14:45

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // 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("userInfo :: \(userInfo.description)")
            print("===============================")
            print("")
            break
        case .background:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: 백그라운드 상태에서 푸시알림 전달받음")
            print("--------------------")
            print("userInfo :: \(userInfo.description)")
            print("===============================")
            print("")
            
            // [파싱 수행할 변수 정의]
            var pushTitle = ""
            var pushMessage = ""
            var pushMsgType = ""
            
            // [AnyHashable : Any 형태 전체 데이터를 딕셔너리로 변경]
            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"] ?? "")
                }
            }
            
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: [파싱] 백그라운드 푸시알림")
            print("--------------------")
            print("pushTitle :: \(pushTitle)")
            print("--------------------")
            print("pushMessage :: \(pushMessage)")
            print("--------------------")
            print("pushMsgType :: \(pushMsgType)")
            print("===============================")
            print("")
            break
        case .inactive:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: 푸시 클릭 접속 확인")
            print("--------------------")
            print("userInfo :: \(userInfo.description)")
            print("===============================")
            print("")
            break
        default:
            print("")
            print("===============================")
            print("[AppDelegate >> didReceiveRemoteNotification]")
            print("--------------------")
            print("설명 :: default")
            print("===============================")
            print("")
            break
        }
    }

 

반응형
Comments