코틀린으로 작성한 안드로이드에서 Firebase Messaging Service 사용하기

오늘은 Firebase Messaging Service, 즉 FCM을 코틀린으로 안드로이드 프로젝트에서 써보려 합니다.

설정

apply plugin: 'com.google.gms.google-services'

google-services를 추가해주고,

implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.1.0'

firebase-core와 firebase-messaging을 dependencies에 추가해줍니다.

manifest

<service
    android:name="io.fcm.FirebaseMessagingService"
    tools:ignore="ExportedService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

해당 클래스 파일을 manifest에서 서비스 태그를 추가해줍니다.

class

class FirebaseMessagingService : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        if (remoteMessage!!.notification != null) {
            sendNotification(remoteMessage.notification!!.body!!)
        }
    }
    private fun sendNotification(messageBody: String) {
        val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
        @Suppress("DEPRECATION")
        val notificationBuilder = NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("title")
                .setContentText(messageBody)
                .setSound(defaultSoundUri)


        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.notify(0, notificationBuilder.build())
    }
}

fcm에 의해서 메시지를 수신받고 기기에 알림을 보내는 클래스 파일을 FirebaseMessagingService()를 상속받아 구현해줍니다.

setContentTitle 속성은 푸시 알림의 제목이고, setContentText 속성은 푸시 알림의 본문입니다.

class FirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(s: String?) {
        super.onNewToken(s)
        Log.d("NEW_TOKEN", s)
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        super.onMessageReceived(remoteMessage)
    }
}

onNewToken 메소드를 오버라이드해 로그에 나오는 토큰 값을 이용하여 파이어베이스 콘솔에서 특정 기기에게 푸시 알림을 줄 수 있습니다.

Written on July 23, 2018