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) 값이 들어간다.
'Spring' 카테고리의 다른 글
springboot yml 환경 분리하기 (2) | 2024.03.12 |
---|---|
@JsonProperty 사용이유? 사용법 (0) | 2024.03.06 |
springboot 이상적인 폴더 구조 (0) | 2023.09.18 |
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. (0) | 2023.08.01 |
@RequestBody 와 @ResponseBody 란? (0) | 2023.06.12 |