Firebase Cloud Messaging 과 함께 푸쉬 지원

Firebase Auth 와 함께 구글/페이스북 로그인에 이은 포스팅입니다. FCM (Firebase Cloud Messaging) 을 적용하여 앱에 푸쉬를 지원해봅시다.

Set Up a Firebase Cloud Messaging Client App on Android 문서를 참고했습니다.

About FCM Message

About FCM Message 문서를 참고했습니다.

  • notification 키를 설정할 때 : FCM 이 앱을 대신하여 앱이 백그라운드 상태일 때에만 메세지를 자동으로 표시합니다. 포그라운드 상태일 때에는 FirebaseMessagingService 의 onMessageReceived 콜백이 호출됩니다.
  • data 키를 설정할 때 : 클라이언트 앱에서 직접 데이터 메세지를 처리토록 합니다. 백그라운드/포그라운드 여부에 상관없이 FirebaseMessagingService 의 onMessageReceived 콜백이 호출됩니다. data 키만 설정하셔야 합니다. notification 키를 같이 설정하시면 콜백이 호출되지 않습니다.

앱 구현

주요 변경내역은 다음과 같습니다.

Firebase Cloud Messaging 의 주요 클래스는 다음 2가지입니다.

  • FirebaseMessagingService : FCM 메세지를 받을 때 onMessageReceived 콜백이 호출됩니다. Service 이므로 AndroidManifest.xml 에 등록이 필요합니다.
  • FirebaseInstanceIdService : FCM Token 이 변경될 때 onTokenRefresh 콜백이 호출됩니다. 토큰은 FirebaseInstanceId.getInstance().getToken() 을 통해 획득할 수 있습니다.

푸쉬 요청하기

Firebase Console 에서 푸쉬를 전송하면 필히 notification key 를 설정할 수 밖에 없습니다. 그래서 앱이 실행 중 (Foreground) 일 때에만 onMessageReceived 콜백을 받을 수 있습니다.

직접 파이썬을 통해 푸쉬 요청을 해보겠습니다. 다음은 requests 라이브러리를 활용한 푸쉬요청 예제입니다. 예제의 server_key 는 Firebase Console 의 Project Settings > CLOUD MESSAGING 탭에서 확인하실 수 있습니다. token 은 유저별 토큰이며, 앱을 실행하시면 디버그 콘솔을 통해 확인하실 수 있습니다.

코드에 server_key, token 값을 설정하시고, message_body 에 전송하고자 하는 메세지를 넣어주세요. 앱 실행 여부에 상관없이 Toast 로 메세지가 출력됨을 확인하실 수 있습니다.

보다 자세한 FCM 프로토콜은 Firebase 클라우드 메세징 HTTP 프로토콜 문서를 참고해보세요.

Toast 메세지 스타일 개선

기본 Toast 메세지는 스타일이 너무 밋밋하므로 tastytoast 라이브러리를 통해 스타일을 개선해보겠습니다.

백그라운드에서 다음과 같이 Toast 로 푸쉬가 잘 뜹니다.

tastytoast 를 통해 푸쉬 메세지를 보여줍니다.

감사합니다.