[Spring] Firebase 푸시 연동

NameJM·2024년 3월 4일

java

목록 보기
4/4

Spring Boot 2.7.10, JDK 1.8 기준


Firebase

  • Firebase에서 프로젝트 설정 -> 서비스 계정 -> Firebase Admin SDK -> 비공개 키 생성

종속성 추가

implementation 'com.google.firebase:firebase-admin:8.1.0'

설정 추가

  • firebase에서 내려받은 키 resources폴더에 복사 후 application.yml에 아래 추가
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;
    }
}

0개의 댓글