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

이번 강좌에서는 Firebase Cloud Messaging (FCM)을 활용하여 자바로 안드로이드 애플리케이션 내에서 푸시 알림을 구현하는 방법에 대해 자세히 설명합니다. FCM은 구글이 제공하는 클라우드 서비스로, 모바일 애플리케이션에서 사용자에게 메시지를 전송할 수 있는 기능을 제공합니다.

1. Firebase Cloud Messaging (FCM) 소개

Firebase Cloud Messaging(FCM)은 개발자가 서버와 클라이언트 앱 간의 메시지를 전송할 수 있도록 해주는 무료 서비스입니다.
FCM을 통해 푸시 알림을 보내거나, 기기 간에 메시지를 전송하거나, 데이터 메시지를 보내는 작업을 수월하게 진행할 수 있습니다.

1.1 FCM의 주요 특징

  • 푸시 알림을 무료로 지원합니다.
  • 안드로이드, iOS, 웹 등 다양한 플랫폼을 지원합니다.
  • 메시지 전송에 대한 세부적인 설정이 가능합니다.
  • 백그라운드에서 알림 처리를 지원합니다.

2. Firebase 프로젝트 설정

FCM을 사용하기 위해서는 Firebase 프로젝트를 생성해야 합니다.
다음 단계에 따라 Firebase 프로젝트를 설정해줍니다.

2.1 Firebase 콘솔 접속

1. Firebase 콘솔에 접속합니다.
2. 구글 계정으로 로그인합니다.
3. “프로젝트 추가” 버튼을 클릭하여 새 프로젝트를 생성합니다.

2.2 Firebase Cloud Messaging 활성화

1. Firebase 프로젝트 대시보드에서 “Cloud Messaging”을 선택합니다.
2. 서버 키와 발신자 ID를 확인합니다. 추후 안드로이드 앱과의 연동에 필요합니다.

3. 안드로이드 스튜디오 프로젝트 설정

▶ 다음 단계로 Firebase를 안드로이드 프로젝트에 통합하는 방법을 알아보겠습니다.

3.1 안드로이드 스튜디오 설치

Android Studio를 설치하고 새 프로젝트를 생성합니다.
개발에 앞서 최소 SDK 버전 및 프로젝트 언어를 Java로 설정합니다.

3.2 Firebase 연동

1. 안드로이드 스튜디오에서 “Tools” 메뉴를 선택한 후 “Firebase”를 클릭합니다.
2. Firebase Assistant가 열리면 “Cloud Messaging”을 찾아 “Set up Firebase Cloud Messaging”을 클릭합니다.
3. Firebase SDK가 자동으로 프로젝트에 추가됩니다.

3.3 Gradle 설정

build.gradle (Module: app) 파일에서 필요한 의존성을 추가해야 합니다.


dependencies {
    implementation 'com.google.firebase:firebase-messaging:23.0.0' // 버전은 최신으로 변경
}

3.4 AndroidManifest.xml 설정

안드로이드 매니페스트 파일에 FCM을 사용할 수 있도록 설정을 추가해줍니다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fcmexample">

    <application
        ...
        >

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

    </application>

</manifest>

4. FCM 메시지 수신 구현

FCM 메시지를 수신하기 위해 FirebaseMessagingService를 상속받은 클래스를 구현해야 합니다.

4.1 FirebaseMessagingService 구현

메시지를 수신하는 클래스를 생성하고, onMessageReceived 메서드를 오버라이드합니다.
이 메서드는 푸시 알림 수신 시 호출됩니다.


import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // 메시지 수신 코드 작성
        if (remoteMessage.getNotification() != null) {
            // 알림 표시
            showNotification(remoteMessage.getNotification().getTitle(), 
                             remoteMessage.getNotification().getBody());
        }
    }

    private void showNotification(String title, String message) {
        // NotificationManager를 사용하여 알림 표시
    }
}

5. 메시지 전송하기

이제 FCM을 통해 메시지를 서버에서 발송하는 방법을 알아보겠습니다.
메시지를 보내기 위한 노드.js 서버를 구현하고, 클라이언트 앱에서 오류를 처리하는 법을 배워보겠습니다.

5.1 노드.js 서버 설정

Node.js를 사용하여 FCM을 통해 메시지를 보내는 간단한 서버를 설정합니다.
먼저 필요한 패키지를 설치합니다.


npm install firebase-admin

5.2 서버 코드


const admin = require('firebase-admin');

// Firebase Admin SDK 초기화
admin.initializeApp({
    credential: admin.credential.applicationDefault(),
});

const fcmToken = 'YOUR_DEVICE_TOKEN'; // 메시지를 보낼 기기의 FCM 토큰

const message = {
    notification: {
        title: 'Hello!',
        body: 'This is a test notification.',
    },
    token: fcmToken,
};

// 메시지 전송
admin.messaging().send(message)
    .then((response) => {
        console.log('Successfully sent message:', response);
    })
    .catch((error) => {
        console.log('Error sending message:', error);
    });

6. 알림 표시 구현

수신한 메시지를 사용자에게 보여주기 위해 알림을 표시합니다.
NotificationCompat를 사용하여 알림을 만들 수 있습니다.


import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;

private void showNotification(String title, String message) {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    String channelId = "Channel_ID";
    String channelName = "Channel_Name";

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
        notificationManager.createNotificationChannel(channel);
    }

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(title)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

    notificationManager.notify(1, builder.build());
}

7. 푸시 알림 테스트

서버를 실행하여 지정한 FCM 토큰을 가진 기기에 메시지가 발송되는지 확인합니다.
발송 후 안드로이드 앱을 실행하면 알림이 나타나는지 확인하세요.

8. 결론

이번 강좌에서는 FCM을 활용하여 자바로 안드로이드 앱에서 푸시 알림을 구현하는 방법을 알아보았습니다.
FCM의 강력한 기능을 통해 사용자와의 소통을 원활하게 할 수 있습니다.
다양한 알림 기능과 실시간 데이터 전송을 활용하여 더욱 편리한 앱을 개발해 보세요!