티스토리 뷰

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


FCM을 이용해서 푸시서비스를 구축하면서 . . .


푸시서비스를 새롭게 개발하면서 문제가 된 부분들이 있어서 공유 및 정리차 남겨봅니다.

GCM 3.0 이 도입된 이후로 그 이후에 배포된 FCM도 IOS와 Android 양쪽을 모두 지원하고 있습니다.

APNS를 따로 관리해야 했던 때와 비교하면 한번에 관리가능해졌기 때문에 한결 개발하기 수월해졌다고 할 수 있습니다.

하지만 IOS 와 Android는 푸시메시지의 처리 방식이 서로 달라 실제 구현방법에 차이가 있는점을 확인 할 수 있었습니다.

문제의 원인은 Payload 정의에 따라 IOS/ Android 의 처리 방식이 다르기 때문이었습니다. 


  안드로이드의 payload별 데이터 처리방식의 문제

아래 표를 참조해보면, 

안드로이드는 payload별로 위와 같이 동작합니다.

페이로드 별로 포그라운드 / 백그라운드 동작이 다르며 notification payload가 함께 올 경우 백그라운드에서 Receiver에 메시지 데이터가 넘어오지 않습니다.

이 문제를 해결하기 위해 click_action 파라메터를 notification payload에 추가하고 해당 값에 특정 엑티비티의 패키지 및 엑티비티명을 넣거나 intent action을 설정해 주어 데이터를 수신할 수 있도록 설정해 주어야 합니다.  click_action 파라메터를 추가하면 해당 노티피케이션을 클릭할 경우 data payload의 내용이 intent extra로 추가되어 전달됩니다.  이또한 클릭 되지 않고 삭제되면 데이터가 앱까지 도달하지 않으므로 리스크로 남는 문제가 있습니다.

위 표에서 보듯이 이 문제를 해결하려면 안드로이드에서는 Data Payload만 푸시 메시지에 삽입하여 전달하여야만 합니다.


IOS에서의 FCM 푸시메시지 처리 방식의 문제


IOS에서는 APNS형태로 변환하여 푸시메시지를 전달하는데 이 때 notification payload의 내용이 없으면 푸시메시지가 정상적으로 출력되지 않는 이슈가 발생합니다.  

APNS 프로토콜 문서 링크 

위 문서를 참조해보면 nofification payload의 내용을 APNS의 aps payload의 내용을 구성하는데 사용되는것으로 보입니다.  


Android와 IOS의 메시지 구성을 달리하여 전달해야 한다.


Android는 data payload로만 메시지를 구성하여 전달하고 ios는 notification / data payload를 둘다 구성해서 보내어야 합니다.

하지만 가능하다면 push message에는 필수적인 데이터를 삽입하지 않고 notification으로의 역할만 하도록 한 뒤 해당 Activity 에서 서버와 통신하여 데이터를 가져오는것이 이상적일것으로 보입니다.



  • 참조 문서 링크 모음


FireBase 관련 개발문서

IOS에서의 문제점 참조 블로그

FCM의 프로토콜 문서 



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함