내가 ddong... 이 된 FCM. 알람은 우리 앱의 주요 기능 중 하나였고 알람 기능을 개발하기 위해 FCM을 사용했다. 올해 FCM 사용법이 바뀌어서 정보 찾는 게 어려웠다. 혼자 할 수 있는 게 아닌데 혼자 하겠다고 끙끙대서 날린 시간도 있다. 반성 반성 또 반성. 나 진짜 소통 잘 못하는구나를 느껴 아주 조금 우울했었지만 백엔드 팀원과 합심해서 기능 구현을 성공해 행복했다.
FCM을 사용하기로 결정하고 내 디바이스 토큰을 받고 내 디바이스와 FCM 서버를 연결했을 때 내가 이해한 작동 원리를 이랬다.
- FCM에서 알람 타이틀 및 내용, 시간을 정한다.
- FCM 서버에서 내 디바이스로 알람을 보낸다.
그럼 내 디바이스에서 알람 내용이랑 시간을 설정하면 되겠네?? 라는 생각이 들었다.
그래서 내가 생각한 건
- 내 디바이스에서 알람 타이틀, 내용, 시간을 설정한다.
- FCM 서버로 보낸다.
- 지정한 시간이 되면 FCM 서버에서 내 디바이스로 알람을 보낸다.
여기서 의문 하나가 들었다. 그 시간이 됐는지 FCM이 어떻게 알지??????
더 찾아보니 Firebase에서 제공하는 DB가 있었다. 그럼 그 DB에 시간을 포함한 알람 정보를 넣으면 되지 않나?? 라고 생각했다. 그래서 2, 3 번 사이에 한 단계를 더 추가해
- 내 디바이스에서 알람 타이틀, 내용, 시간을 설정한다.
- FCM 서버로 보낸다.
- Firebase DB에 알람 정보를 저장한다.
- 지정한 시간이 되면 FCM 서버에서 내 디바이스로 알람을 보낸다.
근데 여기서 또 새로운 의문이 들었다. DB에 저장했다고 알람이 특정 시간에 울리나?? DB에서? 아님? 어떤 기능이 있어서? 알람이 어떻게 제 시간에 울리게 하는 거지??
혼자 고민하고 있었는데 이건 우리 서버와 FCM 서버가 연결돼야 해결할 수 있는 문제였다.... 혼자 고민되다가 백엔드 팀원한테 도움을 요청해서 그 팀원이 FCM 서버랑 연결했다. 2 - 3일을 날리게 됐는데 1, 2차 통틀어서 아주 쓴 기억이 됐다.
앱을 실행하면 FCM 서버와 연결을 하고 디바이스 토큰을 가지고 온다. 디바이스 토큰은 redux에 저장했다.
서버 연결
alert, badge, sound 모두 true로 설정한다. 근데 디바이스 설정에도 영향을 받아서 디바이스를 진동이나 무음으로 해놓으면 소리가 안 울린느 거 같았다. 우린 안드로이드 앱을 만들었기 때문에 Platform.OS를 안드로이드로 설정했다. IOS도 설정하면 된다. npm start 명령어를 실행하고 제일 처음 앱에 들어갔을 때 FCM 서버가 연결된다. 그 뒤에 앱만 끄고 다시 열어도 FCM 서버는 계속 연결되어 있다.
created == false라면 Channel already exist or failed to create.가 콘솔에 찍히게 했는데 둘의 경우도 구분해야 하니 구분해서 콘솔에 메시지를 출력하는 코드를 쓰는 게 더 좋을 거 같다.
디바이스 토큰 받기
redux에 저장한다.
로그인을 할 때 백으로 전송
'project > ssafy' 카테고리의 다른 글
[싸피 회고] 특화 프로젝트 2 - 리덕스(Redux) (0) | 2024.11.02 |
---|---|
[싸피 회고] 특화 프로젝트 1 - 리액트 네이티브 네비게이션 (0) | 2024.11.02 |