광어네 맛집
[Notification Push] FCM Push 알림 들어올 때 분기처리 AppDelegate 본문
[Notification Push] FCM Push 알림 들어올 때 분기처리 AppDelegate
Lautner Jacob 2022. 2. 25. 15:39이 포스팅이 발행될 때면
아마 또 하나의 프로젝트도 끝이 날 거 같다!
요번에 다룰 내용은
다른 블로그에 글이 그렇게 많이 있지 않아서
내가 써보려고 하는데
조금 틀리거나 부족한 부분도 있을 수 있으니 주의!!!
가장 먼저
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도 옵셔널이라서
옵셔널을 빼서 사용해야겠죠?
그럼 오늘 포스팅은 정신없이 끝낸 거 같은데
개발하는데 모두가 도움이 되길 바라며 ㅎㅎㅎ
'Swift > navigator👨🏻✈️' 카테고리의 다른 글
[FastLane]Auto upload TestFlight _ 02 (외부 테스팅 추가) (0) | 2022.06.03 |
---|---|
[Library Error]라이브러리 만들기 (0) | 2022.04.18 |
[FastLane]Auto upload TestFlight (1) | 2022.04.14 |
[Code UI] UIView 순서 바꾸기 (0) | 2022.03.08 |
[ScrollView_TableView_AutoLayout] 셀 높이 관련 이슈 (0) | 2022.02.10 |