본문 바로가기
Android

[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 21 - 파이어베이스 클라우드 메시징

by 들풀민들레 2022. 2. 28.
본 글은 [Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 - 이지스퍼블리싱 (2022)] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책 혹은 인강을 통해 확인해 주세요.

 

 

 

 

매니페스트 설정


서버에서 FCM 서버에 전달하는 정보는 앱을 식별하는 토큰과 알림, 데이터로 구분됩니다

data는 키와 값 모두 개발자가 임의로 구성할 수 있지만 notification은 title과 body 키에 값을 등록해야 합니다. 이처럼 데이터와 별도로 알림 정보를 두는 이유는 대부분 앱에서 FCM 메시지를 받을 때 사용자에게 알림으로 상황을 알려 주므로 알림 구성 정보를 일반 데이터와 구분하기 위해서입니다.

 

물론 앱이 FCM 메시지를 받을 때 꼭 알림을 발생시키거나 notification 정보를 활용해야 하는 것은 아닙니다. 하지만 notification 정보가 있으면 코드에서 알림을 발생시키지 않아도 자동으로 발생하게 할 수 있습니다. 그러려면 매니페스트 파일에 다음과 같은 메타 데이터를 설정해 둬야 합니다.

 

<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="fcm_default_channel" />

서비스 컴포넌트 작성하기


앱에서 FCM 토큰과 메시지를 받는 서비스를 작성해야 합니다. FCM 서비스는 intent-filter의 action 문자열을 com.google.firebase.MESSAGING_EVENT로 선언합니다.

<service
android:name=".fcm.MyFirebaseMessageService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

그리고 서비스 컴포넌트 클래스는 FirebaseMessagingService를 상속받아서 작성합니다.

 

class MyFirebaseMessageService : FirebaseMessagingService() {
override fun onNewToken(p0: String) {
super.onNewToken(p0)
Log.d("kkang", "fcm token..........$p0")
}
override fun onMessageReceived(p0: RemoteMessage) {
super.onMessageReceived(p0)
Log.d("kkang", "fcm message..........${p0.data}")
}
}

서비스에 onNewToken() 함수를 재정의해 놓으면 FCM 서버로부터 토큰이 전달될 때 자동으로 호출되며 매개변숫값이 토큰입니다. 그리고 onMessageReceived() 함수를 재정의해 놓으면 FCM 서버에서 메시지가 전달될 때 자동으로 호출되며 매개변수 객체의 data 프로퍼티로 메시지를 얻을 수 있습니다.