본문으로 건너뛰기

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를 줘서 해결!
  • 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'로 추가.