티스토리 뷰

Project

FCM (Firebase Cloud Messaging) 사용기 - 1

Nickolodeon 2024. 10. 1. 00:52

FCM 이란?

Firebase Cloud Messaging 의 줄임말로, 메시징 기능을 클라우드 서버에서 제공해주는 구글의 서비스이다.

 

개요

프로젝트를 하는 도중에 FCM 을 사용해 볼 수 있는 기회가 생겼다. 용도는 특정 알림 기능을 모바일 단말에 푸시로 전달하는 것이었다. 기존에 구현되어 있는 기능이었으나, 최근에 FCM Legacy API 가 만료됨에 따라 V1 으로 마이그레이션하는 작업을 하게 되었다.

FCM 동작 플로우

프로젝트 생성

먼저 FCM 은 위에서 언급한대로 클라우드 서버에서 기능을 제공하기 때문에, 어떤 프로젝트 하위에서 푸시를 주고받을 건지 정해야 한다. 그래서 프로젝트를 생성하면 아래와 같은 페이지로 관리가 가능하다:

 

이름들은 가렸지만, 클라우드 메시징을 관리하는 페이지임을 확인할 수 있다.

 

관리자 페이지는 프로젝트별로 생성이 되고, 프로젝트 정보는 아래 항목들을 포함한다:

  • 프로젝트 이름
  • 프로젝트 ID
  • 프로젝트 번호
  • Web API 키

private key 생성

이후 좌측 네비게이션 바에 있는 Project Overview 항목 오른쪽의 톱니바퀴를 누르면, Project settings 메뉴를 확인할 수 있다. Service accounts 탭에 Generate new private key 버튼을 누르면 FCM 을 사용하기 위한 인증에 필요한 key 를 생성할 수 있다.

단말 토큰 생성

private key 가 푸시 자체를 보내기 위한 인증에 필요하다면, 각 단말이 FCM 을 사용하는지 여부는 단말 토큰을 통해 인증하게 된다. 이 토큰은 각 단말을 분별하는 데에 사용된다. 최초에 앱을 설치할 때 생성되며, 나의 경우 RDB 에 저장해두고 관리하고 있었다.

 

Spring 에서 FCM 활용하기

의존성 라이브러리 추가

다른 모든 기능과 마찬가지로, 빌드 시에 관련 라이브러리에 대한 의존성을 갖고 있어야 Spring 어플리케이션 내에서 FCM 을 사용할 수 있다. 아래는 Maven 으로 빌드된 프로젝트에서 의존성을 추가하는 방법이다:

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>9.3.0</version>
</dependency>

 

firebase-admin 은 SDK 형태로 만들어져서 코드로 구현 시 FCM 의 기능들을 편리하게 사용할 수 있게 도와준다.

아래는 firebase-admin 라이브러리를 활용한 코드의 예시이다:

package framework.config;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import javax.annotation.PostConstruct;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @deprecated Firebase Admin SDK 방식은 아직 적용되지 않았으므로
 * 우선은 {@link api.presence.bo.service.PushNotificationServiceImpl} 활욯.
 */
@Deprecated
@Configuration
public class FirebaseConfig {

    @Value("#{config['firebase.admin.sdk.key.name']}")
    private String FIREBASE_KEY_NAME;

    @PostConstruct
    public void initFirebase() throws IOException {
        Resource resource = new ClassPathResource("/" + FIREBASE_KEY_NAME);
        FileInputStream stream = new FileInputStream(resource.getFile());;
        try {
            GoogleCredentials googleCredentials = GoogleCredentials.fromStream(stream);
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(googleCredentials)
                    .build();
            FirebaseApp.initializeApp(options);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            stream.close();
        }
    }
}

 

위와 같이, 단순히 클래스들을 import 하여 연관된 메서드들을 호출하는 것만으로도 FCM 사용이 가능하다.

 

다음 글에서는 이렇게 세팅된 FCM 을 통해 구체적으로 어떻게 푸시 메시지를 주고 받을 수 있는지 알아보겠다.

 

 

'Project' 카테고리의 다른 글

Kafka 메시지 브로커 활용기 - 1  (1) 2024.12.03
레디스 활용기 - 2  (1) 2024.07.08
레디스 활용기 - 1  (1) 2024.05.28
@@sql_mode 변경 방법  (0) 2024.05.23
plugin org.asciidoctor.convert was not found 에러 해결  (0) 2023.05.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함