Spring

springboot FCM 푸시 API 사용법

초록색거북이 2024. 2. 2. 10:22
728x90
반응형
SMALL

Firebase Cloud Messaging (FCM) 다양한 플랫폼에서 푸시 메시지를 편리하게 전송할 있는 솔루션으로,

 

iOS, Android, Web 플랫폼에 종속되지 않고 사용할 수 있다.

 

이를 통해 개발자는 플랫폼별로 별도로 개발하는 번거로움을 있다.

 

iOS => APNS (Apple Push Notification Service)

Android => GCM (Google Cloud Messaging)

위와 같은 서비스를 사용해야 했는데.

 

FCM은 이러한 작업들을 통합하여 한 번의 코드로 여러 플랫폼에 메시지를 전송할 수 있게 해준다.

 

  • 플랫폼 독립성: FCM을 사용하면 iOS, Android, Web 등 다양한 플랫폼에서 푸시 메시지를 처리할 수 있어 플랫폼 간의 일관성을 유지할 수 있다.
  • 통합된 관리: FCM 대시보드를 통해 푸시 메시지를 관리하고 모니터링할 수 있어 개발자들이 각 플랫폼에 따라 별도로 관리할 필요가 없다.
  • 간편한 개발: FCM은 간단하고 일관된 API를 제공하여 각 플랫폼에 맞게 개발할 필요 없이 푸시 메시지를 전송할 수 있다.
  • 성능 안정성: Google 인프라를 기반으로 하므로 안정성과 성능이 보장되며, 대규모로 확장 가능하다.

 

 

사용법

Firebase 콘솔 페이지에서 [프로젝트 -> 서비스 계정 -> 새비공개 키 생성]

새비공개 키 생성 버튼을 누르게 되면 json 파일을 다운받는다.

 

단일발송

@Configuration
public class FirebaseConfig {
    @Bean
    public FirebaseApp firebaseApp() throws IOException {
        FileInputStream aboutFirebaseFile = new FileInputStream(String.valueOf(ResourceUtils.getFile("들어있는 경로/fcm-secret-key.json")));

        FirebaseOptions options = FirebaseOptions
                .builder()
                .setCredentials(GoogleCredentials.fromStream(aboutFirebaseFile))
                .build();
        return FirebaseApp.initializeApp(options);
    }

    @Bean
    public FirebaseMessaging firebaseMessaging(FirebaseApp firebaseApp) {
        return FirebaseMessaging.getInstance(firebaseApp);
    }
}

받은 json 파일을 원하는 경로에 넣고, 그 경로의 json을 읽도록 만든다.

 

그이후 Firebase 기본 세팅 코드를 작성한다.

 

@Service
@RequiredArgsConstructor
@Slf4j
public class AdminService {
    private final FirebaseMessaging firebaseMessaging;
   
    public void sendPush(PushRequestDto pushRequestDto) throws FirebaseMessagingException {
     
            firebaseMessaging.send(makeMessage(userInfo.getUserPushToken(), pushRequestDto.getTitle(), pushRequestDto.getContent()));
      
    }

 

makeMessage 메소드

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

 

전송할 Message의 값을 담아준 후 firebaseMessaging.send() 를 이용하여 푸시를 전송해준다.

 

 

단체발송

단일발송할때의 firebase 세팅은 동일.

 

public void sendPushs(PushsRequestDto pushsRequestDto) throws FirebaseMessagingException {
   
    FirebaseMessaging.getInstance().sendEachForMulticast(makeMessages(pushsRequestDto.getTitle(), pushsRequestDto.getContent(), targetUserTokens));

}

 

makeMessages 메소드

public static MulticastMessage makeMessages(String title, String body, List<String> targetTokens) {
    Notification notification = Notification.builder()
            .setTitle(title)
            .setBody(body)
            .build();
    return MulticastMessage.builder()
            .setNotification(notification)
            .addAllTokens(targetTokens)
            .build();

}

 

 

단일 전송과 단체 전송의 다른점은

 

MulticastMessage 객체를 이용하여 .addAllTokens() 값으로 전송할유저의(기기token)리스트값이 들어간다.

 

단일전송은 전송할 유저의 단일(기기token) 값이 들어간다.

728x90
반응형
LIST