최근에 프로젝트에 FCM을 도입하였다.
기존에 APNs로 되어있는 것에서 FCM 토큰을 받아 로그인 시 넘겨 푸시서비스를 이용하는데
postman 프로그램 (https://www.getpostman.com) 에서 테스트할 때는 백그라운드, 포그라운드 모두 수신이 잘 되었었고 푸시 메세지 클릭하면 로직대로 잘 이동을 했었다.
그런데 서버 담당자가 만든 프로그램 -> FCM -> 휴대폰 푸시 수신으로 진행할 당시 포그라운드모드로 테스트를 진행하였는데
푸시를 수신해서 클릭하면 화면 링크로 이동을 해야하는데, 그렇지않고 다른 화면으로 이동 후 원래 화면으로 돌아와야 푸시 수신을 알라내고 이동하는 오류가 있었다.
FCM 공식 문서에서 <포그라운드 앱에서 데이터 메시지 처리> 내용을 확인할 수 있는데 일부 내용은 아래와 같다.
FIRMessagingDelegate
messaging:didReceiveMessage:
로 메시지를 처리해야 합니다.연결하려면 AppDelegate
에서 shouldEstablishDirectChannel
플래그를 YES
로 설정합니다. FCM은 연결을 관리하면서 앱이 백그라운드로 전환되면 연결을 종료하고 앱이 포그라운드로 전환되면 다시 연결합니다.
앱이 포그라운드 상태일 때 데이터 메시지를 수신하려면 messaging:didReceiveMessage:
를 구현합니다. 앱이 백그라운드 상태일 때는 이 콜백이 없어도 여전히 데이터 메시지를 수신할 수 있지만 포그라운드 상태일 때는 이 콜백을 처리해야 합니다.
우리는 APN이 아닌 FCM에서 직접 수신할 예정이기 때문에 FCM 서비스에 연결하는 과정이 필요하다.
그래서 위의 문서에 나온대로 AppDelegate에서 shouldEstablishDirectChannel 플래그를 YES로 설정해줄 필요가 있다.
플래그는 MessagingDelegate의 messaging:didReceive remoteMessage에 작성하여준다
이 플래그를 설정하면 포그라운드에서 푸시를 받고, 클릭할 때 원하는 로직대로 바로 움직이게된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | extension AppDelegate : MessagingDelegate { // [START refresh_token] func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { print("Firebase registration token: \(fcmToken)") } // [END refresh_token] // [START ios_10_data_message] // Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground. // To enable direct data messages, you can set Messaging.messaging().shouldEstablishDirectChannel to true. func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { print("Received data message: \(remoteMessage.appData)") Messaging.messaging().shouldEstablishDirectChannel = true } // [END ios_10_data_message] } | cs |
해당 함수 외에 AppDelegate에서 FCM 수신을 위한 로직을 확인하고 싶다면 아래 링크를 확인하면 된다.
현재 Firebase docs와 약간의 차이가 있다.
https://github.com/firebase/quickstart-ios/tree/master/messaging
#FCM데이터수신
#FCM데이터수신포그라운드
'Programming > iOS' 카테고리의 다른 글
[iOS/Swift3.0] IBAction: Target-Action 알아보기 (0) | 2018.05.15 |
---|---|
[iOS/Swift3.0] Swift FCM Closed App Push Notification Click Event (1) | 2018.04.23 |
[iOS/Swift3.0] 디바이스언어와 languageCode가 다를 때 (1) | 2018.04.12 |
[iOS/Swift3.0] Xcode9 Assets 오류 (0) | 2017.10.25 |
[iOS/Swift3.0] Xcode9 image `image referenced from a nib in the bundle with identifier` 문제 해결 (0) | 2017.10.19 |