개발하는 두더지

kotlin + firebase 를 이용한 Push Notification 구현(1) 본문

Java,Android

kotlin + firebase 를 이용한 Push Notification 구현(1)

덜지 2018. 7. 9. 11:20


Kotlin + firebase(FCM) 을 이용하여 Push Notification 구현하는 방법을 알아보겠습니다.


1. 코틀린을 사용할 것이므로 코틀린 프로젝트로 생성



2. Tools -> Firebase -> cloud messaging 



3. Firebase에서 직접 프로젝트를 생성

connect to firebase 버튼을 클릭하여 자동으로 firebase 프로젝트를 생성합니다.


google-services.json 파일을 다운받아 app/ 에 복사해줍니다.


4. add FCM to your app


build.gradle ( project level )

dependencies {
...

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.0.1'
}


app/build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

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

android {
compileSdkVersion 27
defaultConfig {
...
}
...
}

repositories {
jcenter()
google()
}

dependencies {
...


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

...


}


Kotlin 파일을 하나 만들어 줍니다

class MyFirebaseMessagingService : FirebaseMessagingService() {

private val TAG = "FirebaseService"

/**
* FirebaseInstanceIdService is deprecated.
* this is new on firebase-messaging:17.1.0
*/
override fun onNewToken(token: String?) {
Log.d(TAG, "new Token: $token")
}

/**
* this method will be triggered every time there is new FCM Message.
*/
override fun onMessageReceived(remoteMessage: RemoteMessage) {
Log.d(TAG, "From: " + remoteMessage.from)

if(remoteMessage.notification != null) {
Log.d(TAG, "Notification Message Body: ${remoteMessage.notification?.body}")
sendNotification(remoteMessage.notification?.body)
}
}

private fun sendNotification(body: String?) {
val intent = Intent(this, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
putExtra("Notification", body)
}

var pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
val notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

var notificationBuilder = NotificationCompat.Builder(this,"Notification")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Push Notification FCM")
.setContentText(body)
.setAutoCancel(true)
.setSound(notificationSound)
.setContentIntent(pendingIntent)

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



AndroidManifest.xml 에 service 태그 추가합니다

<application
...

<service
android:name=".firebase.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>






firebaseinstanceidservice onTokenRefresh() 메소드는 17.1.0 버전에서 deprecated 되었습니다.




FirebaseMessagingService 의 onNewToken() 에서 새롭게 token 값을 받을 수 있습니다.

앱이 재설치되거나 유효기간이 만료되면 자동으로 토큰을 새로 생성해 줍니다.


앱을 최초 실행하면 아래와 같이 새로운 토큰을 받습니다. 이 토큰을 이용하여 직접 단말기로 Push Message 를 보낼 수 있습니다.



Firebase Console에 들어가서 메시지를 보내봅니다.






지금까지 정말 간단한 Notification 받는 방법을 구현해봤습니다.


다음엔 Notification 메시지를 꾸미고, 주제 또는 그룹에 맞는 대상에게만 알림을 보내는 방법을 알아보겠습니다.


Comments