[Android/Kotlin] EventBus 이용해 FCM 푸시 알림 받은 데이터로 TextView 업데이트 해주기

SoyoungLee·2023년 6월 1일
0

안드로이드/코틀린

목록 보기
64/70
post-thumbnail

💌 [Android/Kotlin] EventBus 이용해 FCM 푸시 알림 받은 데이터로 TextView 업데이트 해주기

📌 Postman 을 이용하여 FCM 을 보내보자

요청 타입을 POST 로 url 은 https://fcm.googleapis.com/fcm/send 로 셋팅해준다.

  • FCM 등록 후 받은 서버키를 Headers 의 Authorization 값으로 입력해준다. key=서버키
    Content-Type 값은 application/json 로 설정해준다.

📌 FCM 푸시를 보낼 기기 등록 토큰을 가져온다

    private fun logRegToken() {
        FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w("FCM", "Fetching FCM registration token failed", task.exception)
                return@OnCompleteListener
            }

            // 새 FCM 등록 토큰 받기
            val token = task.result
            SharedData.setSharedData(applicationContext, SharedData.PUSH_TOKEN, token)
            Utils.Log("FCM Registration token: $token")
        })
    }

📌 가져온 토큰을 Body 에 넣어준다

{
    "to": "토큰값",
    "priority": "high",
    "data": {
        "title": "fcm test",
        "body": "postman"
    }
}

전송을 누르면 잘 들어오는 볼 수 있다!

이렇게 받은 데이터를 TextView 에 업데이트 시켜주고 싶다
EventBus 를 이용하여 메인으로 데이터를 보내서 업데이트 시켜주려한다.

💙 앱 수준의 build.gradle 에 추가

  • EventBus 라이브러리를 추가해준다.
// Event Bus
implementation 'org.greenrobot:eventbus:3.3.1'

💙 데이터를 담고 있는 POJO 객체 클래스 생성

데이터를 담아 보낼 객체를 생성한다

data class ResultModel(
    var title: String,
    var body: String
): Serializable

💙 이벤트 발행

EventBus.getDefault().post(event)와 같은 형태로 이벤트를 발행한다

// 메시지 수신
override fun onMessageReceived(message: RemoteMessage) {
	super.onMessageReceived(message)
    
    if (message.data.isNotEmpty()) {
        val title = data["title"]
        val body = data["body"]
        val data = ResultModel(title,body)
        
    	// EventBus를 이용하여 이벤트 발생
		EventBus.getDefault().post(data)
    }
}

💙 이벤트 구독

이벤트 버스로 데이터를 받을 액티비티에 EventBus 구독 등록/해제를 해준다

override fun onStop() {
	super.onStop()
	// EventBus 구독 해제
	EventBus.getDefault().unregister(this)
}

override fun onStart() {
	super.onStart()
	// EventBus 구독 등록
	EventBus.getDefault().register(this)
}

💙 이벤트 수신 처리

@Subscribe(threadMode = ThreadMode.MAIN) // Subscribe 어노테이션 등록
fun onEvent(result: ResultModel) {   // 이벤트 수신 시 이 콜백 메소드 실행
    
	with(binding) {
	
    	tvTitle.text = result.title
    	tvBody.text = result.body
        
	}
}
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글