728x90
Expo FCM 푸시알림 구현하기!
클라이언트 설정 및 구현은 여기서!
[RN] Expo FCM 푸시알림 구현하기 (2) (tistory.com)
1. 서버쪽 firebase 설정
https://console.firebase.google.com/u/0/?hl=ko
파이어베이스 콘솔에서
좌측 상단에 프로젝트 개요 오른쪽 톱니바퀴 > 프로젝트 설정 클릭
화면 뜨면 서비스 계정 클릭 후 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
'개발 > Java & Kotlin' 카테고리의 다른 글
[Java] 의존성 역전하기 (148) | 2024.07.16 |
---|---|
[Java] 계층형 아키텍처의 문제 (101) | 2024.07.12 |
[Spring] AbstractAuthenticationProcessingFilter, OncePerRequestFilter 차이 (159) | 2024.06.06 |
[Java] OrElse, OrElseGet 차이 (165) | 2024.04.15 |
[Spring] 정적파일 캐시에 담기 (158) | 2024.04.12 |