본 글은 [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 프로퍼티로 메시지를 얻을 수 있습니다.
'Android' 카테고리의 다른 글
SearchView, SearchAutoComplete (0) | 2022.03.29 |
---|---|
gradle sync failed the supplied javahome seems to be invalid (0) | 2022.03.05 |
[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 20 - 파이어베이스의 인증 (0) | 2022.02.28 |
[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 19 - 구글 Play 서비스의 위치 라이브러리 (0) | 2022.02.28 |
[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 18 - Retrofit 라이브러리 (0) | 2022.02.28 |