본문 바로가기

개발이야기/Android

app의 강제종료로 인해 FCM cloud messaging 푸시를 받지 못하는 이유?


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 관리를 함.


결론

- app에 대하여 whitelist에 단말기 제조사에 등록 요청.

End of Document