본문 바로가기

spring(스프링)

spring boot + FCM push하는 방법

반응형

FCM(Firebase Cloud Message)의 구조는  우리의 서버에서 FCM백엔드에 메세지 요청을 전송하면 FCM은 사용자 기기의 앱 즉 클라이언트 앱에 메시지를 보내게 되어있습니다 

우리의 서버는 FCM 백엔드에 올바른 형식으로 지정된 메시지 요청을 보내야 합니다 


기본 설정

Firebase Admin SDK를 이용하시는게 훨씬 편하실거에요

 

1.프로젝트 생성

https://console.firebase.google.com/

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

2.비공개키 생성 

 

3.resources 하단에 추가 

4.의존성 추가 

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

 

이제 최소한의 설정은 끝이 났습니다 


구현

-빈등록

@Configuration
public class FirebaseConfig {
    @Bean
    public FirebaseApp firebaseApp() throws IOException {
        FileInputStream serviceAccountFile = new FileInputStream("src/main/resources/serviceAccount-File.json");
        FirebaseOptions options = FirebaseOptions
                .builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccountFile))
                .build();
        return FirebaseApp.initializeApp(options);
    }
    @Bean
    public FirebaseMessaging firebaseMessaging(FirebaseApp firebaseApp){
        return FirebaseMessaging.getInstance(firebaseApp);
    }
}

-service 

@Service
public class FirebaseMessagingService {
   private FirebaseMessaging firebaseMessaging;

    public FirebaseMessagingService(FirebaseMessaging firebaseMessaging) {
        this.firebaseMessaging = firebaseMessaging;
    }

    public String sendMessage(String targetToken, String title, String body) throws FirebaseMessagingException {
        Message message = makeMessage(targetToken, title, body);
       return firebaseMessaging.send(message);
    }

    public Message makeMessage(String targetToken, String title, String body) {
        Notification notification = Notification
                .builder()
                .setTitle(title)
                .setBody(body)
                .build();
        Message message = Message
                .builder()
                .setNotification(notification)
                .setToken(targetToken)
                .build();
        return message;
    }

}

Notification 객체는 모바일 환경에서 제목과 본문을 표시합니다.

Message 객체는 올바르게 요청을 할 수 있게 많은 메소드를 지원합니다 

//Message 
Message.builder()
 .setToken(String)단일 사용자
 .setTopic(String)주제 별
 .setAndroidConfig() 안드로이드 설정
 .setApnsConfig() 애플
 .setWebpushConfig() 웹

기기별로 색상과 아이콘을 설정할 수있습니다 역시 구글이네요 

 

부족한부분이 있거나 모르는 부분이있으시다면 댓글주세용

반응형