Notice
Recent Posts
Recent Comments
Link
투케이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()
}
// -----------------------------------------
}
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments