안녕하세요! 이전 글 "[Android] FCM 사용하기 (1)" 에서 FCM 기본 사용법을 다룬 데 이어, 이번 글에서는 실제 사용하면서 겪게 되는 몇 가지 궁금증, 특히 백그라운드 동작에 대한 심층적인 내용을 다뤄보겠습니다. FCM을 활용한 푸시 알림을 구현하면서 예상치 못한 동작 때문에 고민하신 분들에게 도움이 될 거라 생각합니다.
본론: 이전 글에서 설명했던 것처럼, Firebase Cloud Messaging(FCM)을 통해 POST 방식으로 메시지를 전송하면 앱이 포그라운드에 있는지, 백그라운드에 있는지에 따라 처리 방식이 크게 달라집니다. 포그라운드의 경우에는 FirebaseMessagingService의 onMessageReceived() 메서드가 호출되어 메시지를 직접 처리할 수 있습니다. 이는 개발자가 의도한 대로 데이터를 받아 처리할 수 있으므로 편리합니다.
하지만 백그라운드일 때는 상황이 복잡해집니다. 백그라운드 상태에서 메시지를 받으면 onMessageReceived()는 호출되지 않고, 대신 시스템에서 자동으로 Notification을 생성하여 사용자에게 표시합니다. 그리고 Notification을 클릭하더라도 onMessageReceived()는 실행되지 않습니다. 이러한 차이는 앱의 리소스 사용량과 배터리 소모를 최소화하기 위한 Android 시스템의 최적화 전략 때문입니다.
그렇다면 백그라운드에서의 메시지 처리 및 사용자에게 원하는 정보를 전달하려면 어떻게 해야 할까요? 여기서 중요한 것은 Notification에 데이터를 담아 전달하고, Notification을 클릭했을 때 앱이 실행되면서 해당 데이터를 처리하는 전략 입니다. 즉, onMessageReceived()에서 직접 처리하는 것이 아니라, Notification을 통해 사용자에게 알림을 보내고, Notification을 통해 앱으로 전달된 데이터를 이용하여 원하는 동작을 수행해야 합니다. 이를 위해 Notification의 Intent에 필요한 데이터를 담아 전송하고, 앱 실행 시 Intent를 통해 해당 데이터를 받아 처리하는 방식을 고려해야 합니다. 이는 백그라운드에서의 메시지 처리에 대한 효율적인 접근 방식입니다.
결론: FCM을 사용하여 안정적이고 효율적인 푸시 알림 시스템을 구축하기 위해서는 포그라운드와 백그라운드 상황을 명확히 이해하고, 각 상황에 맞는 처리 전략을 수립해야 합니다. 백그라운드에서의 Notification 활용 및 데이터 전달 방식은 필수적인 부분이며, onMessageReceived()에만 의존하는 방식으로는 완벽한 푸시 알림 구현이 어렵다는 점을 명심해야 합니다. 다음 글에서는 백그라운드에서의 Notification 처리와 데이터 전달을 구현하는 방법에 대해 자세히 다루도록 하겠습니다.