[Android/Kotlin] FCM 이용해 푸쉬알림 보내기

hyomin·2022년 3월 3일
0

Android

목록 보기
5/9

FCM PUSH 알림 보내기

먼저 파이어베이스에 들어가서 프로젝트의 서버키를 받아오도록 한다.

프로젝트 설정에서 클라우드 메시징에서 확인할 수 있다.

class FCMService {
  
    fun sendPostToFCM(token: String, chatData :UserDTO, message :String) {
        var mFirebaseDatabase = FirebaseDatabase.getInstance()!!
     
        mFirebaseDatabase.getReference("users")
            .child(chatData.email)
            .addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onDataChange(dataSnapshot: DataSnapshot) {
                    var userData = dataSnapshot.getValue(UserDTO::class.java)
                    val toTimeStamp = Date()
                    val datef =  SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS", Locale.getDefault())
                    val createAt= datef.format(toTimeStamp)

                    Thread(
                        Runnable {
                            kotlin.run {
                                try {
                                    val root = JSONObject()
                                    val notification = JSONObject()

                                    notification.put("title", "write anything")
                                    notification.put("body", message)
                                  
                                   
                                    root.put("data", notification) // 여기서 data와 notification 두가지 중 설정하면 된다.
                                    root.put("channel_id",CHANNEL_ID)
                                    root.put("to", token)
                                   
                                    val Url = URL(FCM_MESSAGE_URL)!!
                                    val conn = Url.openConnection() as HttpURLConnection
                                    conn.setRequestMethod("POST")
                                    conn.setDoOutput(true)
                                    conn.setDoInput(true)
                                    conn.addRequestProperty("Authorization", "key=" + SERVER_KEY) //받아 온 서버키를 넣어주세요
                                    conn.setRequestProperty("Accept", "application/json")
                                    conn.setRequestProperty("Content-type", "application/json")

                                    val os = conn.getOutputStream()
                                    os.write(root.toString().toByteArray(Charsets.UTF_8));

                                    os.flush();
                                    conn.responseCode
                                } catch (e: Exception) {
                                    e.printStackTrace()
                                }
                            }

                        }
                    ).start()

                }

                override fun onCancelled(error: DatabaseError) {
                    TODO("Not yet implemented")
                }

            })

        }
    }

아래와 같은 포맷으로 전달되게 된다.
data 객체는 원하는데로 format해서 사용하면 됩니다!

{
 
  "data": {
    "title": "write anythig",
    "body": "test body",
    "createAt":"2022-03-01 11:11:11.111"  
    ...
  }, 
  "to": device_token,
  "channe_Id": "your chanel id"
}

이렇게 보내면 cloude message 에서 테스트 했던거와 동일하게 해당 token의 디바이스에 알람이 가게 된다.

data 에 보내는 사람의 token이나 email을 함께 실어서 보내면, 서로 메세지를 주고 받는 것이 가능해진다. 👍
메세지 내역을 DB에 저장해서 load 할 수도 있겠다.

지금 하고 있는 프로젝트에서는 카카오톡 처럼 실시간 메세지 창이 필요하지 않아 채팅창을 만들어 보지는 않았지만, 추후에 더 공부해서 만들어보고 싶다.

profile
🌱

0개의 댓글