Spring Boot 2.7.10, JDK 1.8 기준
implementation 'com.google.firebase:firebase-admin:8.1.0'
app:
firebase:
keyPath: "/config/key/application-key.json"
@RequiredArgsConstructor
@Slf4j
@Transactional
public class FirebaseMessageService {
@Value("${app.firebase.keyPath}")
private String PATH;
@PostConstruct
private void init() throws IOException {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(new ClassPathResource(PATH).getInputStream()))
.build();
FirebaseApp.initializeApp(options);
}
public static RestResult sendPushToToken(String title, String body,List<String> tokenList) throws Exception {
RestResult result = new RestResult();
if(tokenList.isEmpty()) {
result.setMessage("parameter tokenList is null");
return result;
}
if(tokenList.size() > 0) {
MulticastMessage multiCast = MulticastMessage.builder()
.setNotification(Notification.builder().setTitle(vo.getTitle()).setBody(vo.getBody()).setImage("/assets/icon.png").build())
.putData("title", vo.getTitle())
.putData("body", vo.getBody())
.putData("navigateTo",vo.getNavigateTo())
.setFcmOptions(FcmOptions.builder().build())
.setAndroidConfig(
AndroidConfig.builder()
.setPriority(AndroidConfig.Priority.HIGH)
.setNotification(AndroidNotification.builder().setIcon("/assets/icon.png")
.setPriority(AndroidNotification.Priority.MAX).build()).build())
.setApnsConfig(ApnsConfig.builder().setAps(Aps.builder().build()).build())
.addAllTokens(tokenList)
.build();
BatchResponse response = FirebaseMessaging.getInstance().sendMulticast(multiCast);
if (response.getFailureCount() > 0) {
List<SendResponse> responses = response.getResponses();
for (int i = 0; i < responses.size(); i++) {
if (!responses.get(i).isSuccessful()) {
log.info("List of tokens that caused failures: " + tokenList.get(i));
}
}
}
result.setSuccess(true);
return result;
} else {
log.info("Invalid Tokens");
}
return result;
}
}