티스토리 뷰
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의 내용이 없으면 푸시메시지가 정상적으로 출력되지 않는 이슈가 발생합니다.
위 문서를 참조해보면 nofification payload의 내용을 APNS의 aps payload의 내용을 구성하는데 사용되는것으로 보입니다.
Android와 IOS의 메시지 구성을 달리하여 전달해야 한다.
Android는 data payload로만 메시지를 구성하여 전달하고 ios는 notification / data payload를 둘다 구성해서 보내어야 합니다.
하지만 가능하다면 push message에는 필수적인 데이터를 삽입하지 않고 notification으로의 역할만 하도록 한 뒤 해당 Activity 에서 서버와 통신하여 데이터를 가져오는것이 이상적일것으로 보입니다.
- 참조 문서 링크 모음
'프로그래밍 > ANDROID' 카테고리의 다른 글
Android Architecture Components (AAC) 를 Realm과 접목시켜보자 (0) | 2017.11.23 |
---|---|
[번역] [Qiita] RxJava2 에서 변경점 요약 (0) | 2017.06.09 |
[번역] [Qiita] RecyclerView에 새롭게 적용된 ItemPrefetch 알아보기 (0) | 2016.11.27 |
[Qiita] 안드로이드 테스트에 도움되는 툴 2가지 소개 (0) | 2015.10.26 |
안드로이드에서 메모리 관리 (0) | 2014.08.04 |
- Total
- Today
- Yesterday
- 우래옥
- 청계천 맛집
- 을지로3가
- 야키니쿠
- 리액트 네이티브
- 안드로이드
- 편육
- 리액트
- 도쿄맛집
- 수요미식회
- 일본여행
- 을지면옥
- 필동면옥
- 평양냉면
- 리액트네이티브
- mobx
- 도쿄
- 여행
- observable
- 중쇄를찍자
- android
- Qiita
- 맛집
- 쿠로키 하루
- 덴뿌라
- 평양면옥
- 브이로그
- 일드
- Redux
- react native
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |