728x90
2021.07.27 - [프로그래밍 공부/Spring Boot] - [Java] spring boot - firebase message server
이전 포스팅에서 백단에서의 메세지요청을 만들었으니,
앱에서의 메세지받는 코드를 작성해보자.
우선 디펜던시부터 받아오고~
implementation platform('com.google.firebase:firebase-bom:28.1.0')
implementation 'com.google.firebase:firebase-messaging-ktx'
manifest에 service를 등록해주자
<service
android:name=".service.FirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
여기서, Android8.0 이상을 대상으로 한다면 채널을 우선 만들어 준다.
관련 내용에 대해서는 여기에 설명되어있다. https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="news" />
채널등록을 한 후에, firebase token을 발급받고, initalize 하는 부분을 생성해보자.
private fun initFirebase(){
LogUtil.i(TAG, "initFirebase start")
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
LogUtil.w(TAG, "Fetching FCM registration token failed", task.exception)
return@OnCompleteListener
}
// Get new FCM registration token
val token = task.result.toString()
LogUtil.d(TAG,"fcm token :: $token")
})
FirebaseMessaging.getInstance().subscribeToTopic(
PrefUtil.getPrivateString(this,/*your topic*/)
)
}
firebase token을 발급받고 확인하는 코드이며, topic 주제를 주고받기 위해서는 아래와 같이 subscribeToTopic을 해주어야 한다.
그다음 Service단 FirebaseMessagingService를 extend해준다.
class FirebaseService : com.google.firebase.messaging.FirebaseMessagingService() {
companion object {
private val TAG = FirebaseService::class.java.simpleName
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
}
override fun onNewToken(token: String) {
super.onNewToken(token)
}
}
토큰이 새로 발급된다면 onNewToken으로 들어오게 되는데
폐쇄망같은 경우 firestore에 접근을 못할 수도 있기때문에
sendRegistrationToServer() 라는이름으로 함수를 만들어 서버에 저장한다.
그런데 지금은 딱히 그정도까지는 필요 없기 때문에 onMessageResceived만 작성해도 된다.
LogUtil.i(TAG, "From: ${remoteMessage.from}")
if (remoteMessage.data.isNotEmpty()) {
LogUtil.i(TAG, "Message data payload: ${remoteMessage.data}")
if (/* Check if data needs to be processed by long running job */ true) {
// For long-running tasks (10 seconds or more) use WorkManager.
//scheduleJob()
} else {
// Handle message within 10 seconds
//handleNow()
}
}
remoteMessage.notification?.let {
LogUtil.d(TAG, "Message Notification Body: ${it.body}")
showNotification(
context = this,
title = it.title,
message = it.body
)
}
끄읕
728x90
'프로그래밍 공부 > Android' 카테고리의 다른 글
[android] context 란 (0) | 2022.12.21 |
---|---|
[android] migration 진행중 ... kotlin v, IDE v, library v...etc... (0) | 2022.03.29 |
[kotlin] LiveData & DataBinding (0) | 2021.07.20 |
[kotlin] Android jetpack Navigation (2) | 2021.05.14 |
[Android&Kotlin] gps tracking (3) | 2021.02.04 |