FCM cloud messaging을 사용하면 google의 푸시서버를 활용하여 각 기기에 push를 날릴 수 있다. 그런데 QA를 하던도중 흥미롭게도 push를 받지 못하는 단말이 생겼다.
# 단말 재시작 후
# 안드로이드 settings에서 force kill(강제종료)
흥미로운 사실은, 카카오톡이나 라인과 같은 App들은 단말기를 껐다 켜도, 그리고 강제종료 하더라도 잘 된다는 사실이다.
이를 해결하기 위해 FCM 공식문서를 찾아봤지만 뚜렷하게 나올만한 해결책이 없었고 stackoverflow에서 아래와 같은 정보를 얻게 되었다.
원본 글 : Android app not receiving Firebase Notification when app is stopped from multi-task tray
Stackoverflow 내용 정리
1. FCM의 onMessageReceived는 앱이 최초에 켜져있거나 혹은 foreground, background에서 존재할때 받을 수 있다.
2. Settings에서 force kill 했을 경우에는 앱의 service도 꺼져 있는 상태이므로 받을 수 없다.
Q: 그러면 왜? 어떻게 whatsApp이나 kakaoTalk는 강제로 끄더라도 살아날수 있나?
A: device의 재조사가 해당 message recieve에 대해서 whitelist관리를 함. 그러므로 FCM의 기본 original spec 문서와는 다르게 동작할 수 있는 것임.(force kill 하더라도 message를 지속적으로 받을 수 있는 것) 즉, 삼성이 kakaotalk과 같은 유명 메시지앱들에 대해 whitelist 관리를 함.
결론
'개발이야기 > Android' 카테고리의 다른 글
Pixel에 Android 이미지 설치할때 오류 fastboot too old; please download the latest version 해결하기 (374) | 2019.05.08 |
---|---|
안드로이드에서 외부 jar file import하는 방법 (257) | 2018.12.26 |
Custom listview의 각 item에 animation 적용하기 (373) | 2018.12.13 |
[ConstraintLayout] 효과적인 ConstraintLayout 사용방법 (2169) | 2018.04.22 |
[Instance app]설치 없이 네이티브앱의 사용경험을 제공할 수 있는 방법 (1094) | 2018.04.22 |
구글 게임 플레이 서비스 디버깅 방법 (0) | 2017.09.12 |