광어네 맛집

[Notification Push] FCM Push 알림 들어올 때 분기처리 AppDelegate 본문

Swift/navigator👨🏻‍✈️

[Notification Push] FCM Push 알림 들어올 때 분기처리 AppDelegate

Lautner Jacob 2022. 2. 25. 15:39
728x90
반응형

이 포스팅이 발행될 때면
아마 또 하나의 프로젝트도 끝이 날 거 같다!

요번에 다룰 내용은
다른 블로그에 글이 그렇게 많이 있지 않아서
내가 써보려고 하는데 

조금 틀리거나 부족한 부분도 있을 수 있으니 주의!!!

 

가장 먼저 

Firebase FCM 문서에 보면 기본 세팅이 있으니 거기까지는 쉽게 할 수 있을 듯!

 

그 다음으로 문제가 위에 베너를 클릭했을 때 어떻게 해줄거냐하면
AppDelegate / SceneDelegate에서 처리해주면 됨!

( SceneDelegate가 왜 나온진 다음으로 미루고 )

 

다음 함수에서 어떤 순서로 들어오는 지 먼저 확인해보자구요

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
	print("noti 앱 처음")
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
	print("noti 체크222")
}
    
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
	print("noti 체크111")
}
    
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
	print("noti 체크333")
}

 

 

각 함수 마다 하는 일이 다르긴 하지만
프린트로 다 찍어보니 이렇게 

앱 처음 -> 체크 1 -> 체크 2-> 체크 3

이 순서대로 실행이 됨!
(이건 부정확할 수 가 있는게 테스트 할 때 조금씩 달라짐
-> 그치만 분기 처리는 didReceiveRemoteNotification 저기서 하면 됨!)

 

그러면 우리는 어떻게 분기처리를 할 수 있냐!

UserInfo를 이용하면 됨!

 

서버에서 어떻게 날아오는지에 따라 다르지만 
[AnyHashable : Any] -> Json으로 바꿔준 뒤에 해결해주면 됩니다

( 물론 모델 구성을 잘해야겠죠? )

 

 

1. 데이터를 Json으로 변환할 때는 한줄로 가능하지만

let convertData = try? JSONEncoder().encode(data)

 

2. 우리가 해야하는건
[AnyHashable : Any] -> Json 이런 형식임
그러면 아래처럼 하면 됨!

var userInfo = userInfo as NSDictionary? as? [String: Any] ?? [:]
guard let convertInfo = try? JSONSerialization.data(withJSONObject: userInfo.self, options: [.prettyPrinted]) else {return}
let json = try? JSONDecoder().decode(Model.self, from: convertInfo)

 

복잡복잡하죠?ㅋㅋㅋㅋㅋ

 

AnyHashable을 String으로 바꿔준 뒤에
Data형식으로 바꿔주고
다시 Json으로 바꿔준거임

 

여기 끝이 아님
저기서 뽑아낸 json도 옵셔널이라서 
옵셔널을 빼서 사용해야겠죠?

 

그럼 오늘 포스팅은 정신없이 끝낸 거 같은데
개발하는데 모두가 도움이 되길 바라며 ㅎㅎㅎ

 

 

728x90
반응형