Java로 Firebase Cloude Message (Application Push) 구현하기

Firebase Cloude Message(이하 FCM)을 구현하여 Web 및 App Device에 Push Message를 보내는 기능을 구현해봅니다. FCM 구현에는 송수신을 위한 두 가지 주요 구성요소가 필요합니다.

  1. Firebase용 Cloud Functions 또는 앱 서버와 같이 메시지를 작성, 타겟팅, 전송할 수 있는 신뢰할 수 있는 환경
  2. 해당 플랫폼별 전송 서비스를 통해 메시지를 수신하는 Apple, Android 또는 웹(자바스크립트) 클라이언트 앱

1. Firebase Admin SDK 의존성 추가하기

  • Firebase Admin SDK를 사용하기 위해서는 해당 서버에 Java 8 이상이 설치되어 있어야 합니다.
// Gradle - build.gradle
dependencies {
  implementation 'com.google.firebase:firebase-admin:9.0.0'
}

// Maven - pom.xml
<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.0.0</version>
</dependency>

 

2. SDK 승인 및 Firebase 객체 초기화하여 생성하기

  • 보안을 위한 key를 생성한다고 생각하면 되는데, firebase의 경우 key - value 형태의 Json 파일로 되어있고, 이 파일을 만들어서 자신의 project 폴더에 위치시켜야 합니다. 비공개 키 파일을 생성하는 방법은 아래와 같습니다.
    1. Firebase Console에서 설정 > 서비스 계정을 엽니다.
    2. 새 비공개 키 생성을 클릭한 다음 키 생성을 클릭하여 확인합니다.
    3. 키가 들어 있는 JSON 파일을 안전하게 저장합니다.
  • 설정이 완료되었으면 SDK를 위에서 생성한 json 키로 승인 해 줍니다.
private static FirebaseApp getFirebaseApp() throws IOException {
    FileInputStream fis = new FileInputStream(privateKeyPath);
    FirebaseOptions fbOptions = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(fis))
        .build();
    fbApp = FirebaseApp.initializeApp(fbOptions, key);
    
    return fbApp;
}

 

3. FCM 전송하기

  • 위에서 생성한 FirebaseApp 객체를 사용하여 메세지를 전송하는 방법은 아래와 같습니다.
// 규격에 맞게 메세지 작성하기
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .build();

// 보내기
String sendResult = FirebaseMessaging.getInstance(fbApp).send(message);
// 결과 출력
System.out.println("FCM sent message: " + sendResult);
  • 전송에 성공하면 Firebase Admin SDK가 projects/{project_id}/messages/{message_id} 형식으로 ID 문자열을 반환합니다.
    {
      "name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
    }