코틀린 안드로이드 앱개발 강좌, 파이어베이스 클라우드 메시징

최근 몇 년 사이 모바일 앱의 발전과 함께 사용자와의 소통 방법도 많이 변화하였습니다. 특히,
푸시 알림(Push Notification)은 사용자와의 효과적인 커뮤니케이션 방법으로 자리잡았습니다.
파이어베이스 클라우드 메시징(FCM)은 구글이 제공하는 푸시 알림 서비스로, 애플리케이션에 쉽게 통합할 수 있어
많은 개발자에게 사랑받고 있습니다. 이 글에서는 코틀린을 사용한 안드로이드 앱 개발 과정에서 FCM을 설정하고 사용하는 방법에 대해
자세히 설명하겠습니다.

1. Firebase Cloud Messaging(FCM) 소개

FCM은 애플리케이션 서버와 클라이언트 앱 간에 메시지를 전송하기 위한 서비스입니다. 이를 통해 개발자는
실시간으로 사용자에게 알림을 발송할 수 있으며, 애플리케이션의 특정 이벤트에 대한 반응으로 푸시 알림을 보낼 수 있습니다.
예를 들어, 소셜 미디어 앱에서 친구의 게시물에 댓글이 달리면 알림을 받거나, 게임 앱에서 보상이 주어질 때 알림을
통해 사용자를 유치할 수 있습니다.

2. FCM 설치 및 설정

2.1 Firebase 프로젝트 생성

  1. Firebase 콘솔(https://console.firebase.google.com/)에 로그인합니다.

  2. 새 프로젝트를 만들고, 프로젝트 이름을 입력한 후 ‘계속’을 클릭합니다.

  3. Google Analytics를 원하면 활성화할 수 있고, 그렇지 않으면 비활성화하고 ‘생성’ 버튼을 클릭합니다.

  4. 프로젝트 대시보드에서 안드로이드 아이콘을 클릭하여 안드로이드 앱을 추가합니다.

  5. 패키지 이름, 앱 닉네임 등을 입력하고, ‘앱 등록’을 클릭합니다.

  6. google-services.json 파일을 다운로드하여 앱의 ‘app’ 디렉토리에 추가합니다.

2.2 Gradle 설정

프로젝트의 build.gradle 파일에 Google 서비스 플러그인 및 Firebase 의존성을 추가합니다.

        
        // Project level build.gradle
        buildscript {
            dependencies {
                // Add this line
                classpath 'com.google.gms:google-services:4.3.10'
            }
        }
        // App level build.gradle
        apply plugin: 'com.android.application'
        apply plugin: 'com.google.gms.google-services'

        dependencies {
            // Add this line
            implementation 'com.google.firebase:firebase-messaging-ktx:23.0.0'
        }
        
    

3. 메시지 수신을 위한 서비스 생성

FCM에서 메시지를 수신하려면 FirebaseMessagingService를 확장한 서비스를 만들어야 합니다. 생성한 서비스는
FCM 서버로부터 메시지를 수신하여 적절히 처리합니다.

        
        class MyFirebaseMessagingService : FirebaseMessagingService() {
            override fun onMessageReceived(remoteMessage: RemoteMessage) {
                // 메시지가 수신되면 호출됩니다.
                remoteMessage.notification?.let {
                    showNotification(it.title, it.body)
                }
            }

            private fun showNotification(title: String?, message: String?) {
                // 알림 생성 및 표시하는 코드
                val notificationManager =
                    getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

                val notificationBuilder = NotificationCompat.Builder(this, "YOUR_CHANNEL_ID")
                    .setSmallIcon(R.drawable.ic_notification)
                    .setContentTitle(title)
                    .setContentText(message)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)

                notificationManager.notify(0, notificationBuilder.build())
            }
        }
        
    

4. FCM 토큰 관리

클라이언트 앱은 FCM에서 메시지를 받을 수 있도록 고유한 토큰을 발급받습니다. 이 토큰은 서버에 등록하여
특정 클라이언트에 알림을 보낼 수 있도록 합니다. 토큰을 관리하고 업데이트 받기 위한 코드를 작성합니다.

        
        class MyFirebaseMessagingService : FirebaseMessagingService() {
            override fun onNewToken(token: String) {
                super.onNewToken(token)
                // 새로운 토큰을 서버에 등록하는 로직
                sendTokenToServer(token)
            }

            private fun sendTokenToServer(token: String) {
                // 서버에 토큰을 전송하는 코드
            }
        }
        
    

5. FCM 메시지 발송

서버 측에서는 발급받은 FCM 토큰을 이용하여 메시지를 전송합니다. 스마트폰이 아닌 웹 서버에서
메시지를 생성하고 FCM 서버로 전송하는 방식입니다. 예를 들어, Node.js 서버에서 Express.js를 사용하여
메시지를 발송하는 코드를 작성할 수 있습니다.

        
        const admin = require("firebase-admin");
        admin.initializeApp();

        function sendNotification(token, title, body) {
            const message = {
                notification: { title: title, body: body },
                token: token
            };

            admin.messaging().send(message)
                .then((response) => {
                    console.log("Successfully sent message:", response);
                })
                .catch((error) => {
                    console.log("Error sending message:", error);
                });
        }
        
    

6. 테스트 및 검증

이제 FCM 설정이 완료되었습니다. 앱을 실행하여 푸시 알림을 수신할 수 있는지 테스트합니다.
FCM 서버에서 토큰을 사용하여 메시지를 보내고, 클라이언트 앱에서 수신된 메시지가 정상적으로 표시되는지
확인합니다.

7. 결론

Firebase Cloud Messaging(FCM)을 통해 개발자는 다양한 방법으로 사용자에게 알림을 보낼 수 있습니다.
위에서 설명한 과정을 통해 FCM을 안드로이드 앱에 통합하는 방법을 배우셨습니다.
푸시 알림은 사용자 경험을 개선하고, 앱의 참여도를 높이는 데 큰 도움이 되므로 꼭 활용해 보세요.

8. 추가 자료

Firebase 공식 문서: https://firebase.google.com/docs/cloud-messaging
안드로이드 개발자 문서: https://developer.android.com/training/notify-user/group