개발/Java & Kotlin

[Spring] Expo FCM 푸시알림 구현하기 (3)

devhooney 2024. 6. 12. 09:34
728x90

 


 

 

Expo FCM 푸시알림 구현하기!

 

 

클라이언트 설정 및 구현은 여기서!

[RN] Expo FCM 푸시알림 구현하기 (2) (tistory.com)

 

[RN] Expo FCM 푸시알림 구현하기 (2)

Expo FCM 푸시알림 구현하기!  설정은 여기서![RN] Expo FCM 푸시알림 구현하기 (1) (tistory.com) { const fcmToken = await messagi" data-og-host="devhooney.tistory.com" data-og-source-url="https://devhooney.tistory.com/315" data-og-url="

devhooney.tistory.com

 

 

 

1. 서버쪽 firebase 설정

https://console.firebase.google.com/u/0/?hl=ko

 

로그인 - Google 계정

이메일 또는 휴대전화

accounts.google.com

 

 

파이어베이스 콘솔에서

좌측 상단에 프로젝트 개요 오른쪽 톱니바퀴 > 프로젝트 설정 클릭

화면 뜨면 서비스 계정 클릭 후 Admin SDK 구성 스니펫 자바 선택 후 새 비공개 키 생성 버튼 누르면 json파일이 다운로드 된다. 이걸 프로젝트 root/resources 에 넣었다 나는(위치는 자유)

 

 

 

 

728x90

 

 

 

 

 

2. bean 등록

@Configuration
public class FirebaseConfig {
    @Bean
    public FirebaseApp initializeFirebase() throws IOException {
        FileInputStream serviceAccount =
                new FileInputStream("src/main/resources/serviceAccountKey.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(googleCredentials)
        FirebaseOptions options = FirebaseOptions.builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .build();
        if (FirebaseApp.getApps().isEmpty()) { //<--- IMPORTANT! 이것은 빈이 여러 번 생성되는 것을 방지합니다.
            FirebaseApp.initializeApp(options);
        }
        return FirebaseApp.getInstance();

        return FirebaseApp.initializeApp(options);
    }

}

 

 

3. 코드 작성

- Controller

@RestController
@RequestMapping("/api/fcm")
public class FcmController {
  	@Autowired 
    private FcmService fcmService;
    
    
    @PostMapping("/send")
    public String sendNotification(@RequestBody Map<String, String> payload) {
        String token = payload.get("token");
        String title = payload.get("title");
        String body = payload.get("body");

        fcmService.sendNotification(token, title, body);
        return "Notification sent successfully";
    }
}

 

 

- Service

@Service
public class FcmService {

    public void sendNotification(String token, String title, String body) {
        Notification notification = Notification.builder()
                .setTitle(title)
                .setBody(body)
                .build();

        Message message = Message.builder()
                .setToken(token)
                .setNotification(notification)
                .build();

        try {
            String response = FirebaseMessaging.getInstance().send(message);
            System.out.println("Successfully sent message: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

이제 API 요청을 하면 FCM 토큰 주인인 기기로 메시지가 전송된다.

 

 

 

728x90