2025.04 1주차
4월 1일
React Native Expo 환경에서 FCM 알림 기능 구현하기 (with. Firebase Function)
문서 작성- firestore function 처음 사용해봤는데, 꽤 유용. v2로 module을 사용해서 구현
- 생각보다 어렵지 않음. 약간의 오류가 있었지만 금방 logging해서 알아냈다. 2시간정도 만에 알림 다 구현해서 뿌듯
- chatGPT로 앱 로고 만들기
- 기타 ui 버튼 rounded, 헤더 padding값 등 수정
- Sentry 환경설정
4월 2일
-
Sentry 설정 마무리
-
알림센터 기능 구현 완료
-
알림 수신할 때 app notification badge 카운트 증가하도록, Notification 페이지 조회할때 안읽은 카운트에따라 업데이트되도록 useEffect로 구현!
-
나눔 노트 ui 싹 갈아엎고, 아래 아이스브레이킹 등 FellowshipContent를 타입에 맞게 데이터 구조를 쓰도록 하고, 내부 컴포넌트 싹 분리하고 리팩터링.
-
재사용성 + contentType이 변할 수 있는걸 고려해서 (적용, 직접 커스텀 등 추가가능) 개발
-
내리는 props 개수도 최대한 줄이고, 함수 재호출 할만한거도 다 고려헤서 구현완료(isLeader를 상위에서 한번만 관리, props로 내려보냄)
-
updateDoc()에서 중첩된 객체를 flattenObject로 변환해서 업데이트하도록 구조 싹 변경
-
ScrollView 내부 버튼을 누를때 keyboard가 사라지는 현상
- 복잡한 list를 useState로 써서 문제인줄 알았는데, setText를 써도 똑같이 튕긴다..
DefaultValue
를 줘서 해결!
- 복잡한 list를 useState로 써서 문제인줄 알았는데, setText를 써도 똑같이 튕긴다..
-
useImperativeHandle를 통해서 자식 컴포넌트에서 실행되는 함수를 상향식으로 설정이 가능하다
useImperativeHandle(ref, () => ({
openTopic: handleOpenTopic,
}));
4월 3일
기도제목
- 본인만 기도제목 수정할 수 있도록 isOwner 상태 추가
- 기도제목 리스트 컴포넌트 분리 리팩터링
- 더블 탭시 튕기는 현상 수정
- UIThread에서 실행.. RunOnJS로 감싸서 해결
const doubleTap = Gesture.Tap()
.maxDuration(250)
.numberOfTaps(2)
.onEnd(() => {
runOnJS(toggleLike)();
});
- 기도제목에 Haptic 추가
- 기도제목의 Heart 클릭시 애니메이션 추가
알림
- 알림 설정 화면 추가
- auth에 있던 user 로직 리팩터링(분리)
- UserGroup을 하위 collection에서 관리하도록 수정. 따라서 관련 로직 싹 갈아엎고 수정(+ onboarding에서 notification 상태 기본 업데이트)
useInitializeApp에서 아래 함수가 호출되는데, getToken() 이후 실행이 완료되지 않은 상태에서 로딩이 완료되어서, user 상태가 없는 상태에서 Group, 기도제목 API 호출해서 튕기는 현상 발생
const subscriber = auth.onAuthStateChanged(async (user) => {
const token = await getToken();
로그를 추적해보니 알고보니 loading 상태가 async-storage에서 false로 바뀐 다음, 다시 시작할 때 true로 바뀌지 않아서 항상 false 인 상태. (추정)
-> 그래서 함수 실행도 전에 로딩 상태가 끝났다고 되어서 (isLoaded) screen이 렌더링.....
onAuthStateChanged 내부에 authLoading 상태를 직접 변경하도록 수정
const [authLoading, setAuthLoading] = useState(true);
- 그룹 별 알림 설정 기능 구현 완료
Llm이 짜줫는데 isselectee상태로만 관리했엇는데, 탭 상태는 따로 두고,Record로 배열 아닌 객체로 state관리.. 신기햇다
- 기도제목 익명 관리를
isAnonymous
필드를 추가해서 관리하도록 변경, Edit 모드일 때 useLocalSearchParams을 통해서 가져오는데, string value 밖에 안돼서 그냥 'true' | 'false'로 추가.