
MBTI 메이트 - Apps on Google Play
This app is an MBTI-based random chat platform that allows users to chat with people who match their MBTI type.
https://play.google.com/store/apps/details?id=kr.co.placea.mbti_community
한 줄 소개
MBTI를 중심으로 게시글 · 친구/공개 채팅 · 랜덤 매칭 · 포인트 시스템을 제공하는 Flutter + Firebase 기반 MBTI 커뮤니티 앱
게시판 · 채팅 · 랜덤매칭 · 포인트 · 푸시 알림 앱의 기능을 갖춘 소셜 커뮤니티 앱입니다.
기본 정보
- 프로젝트명
- MBTI 메이트
- 역할
- 기획 / 개발 / 배포
- 인원
- 1인 개발
- 플랫폼
- Android (Play Store 배포)
- 기술 스택
- Flutter, Dart, Firebase Auth, Cloud Firestore, FCM, GetX, Cloud Functions
핵심 기능
- 📷 [로그인]
- 📷 [홈 / 피드]
- 📷 [게시판]
- 📷 [채팅]
- 📷 [랜덤매칭]
- 📷 [마이페이지]
주요 기능
1) Firebase 로그인 / 회원 관리
- 이메일·비밀번호 회원가입 / 로그인
- 비밀번호 재설정 메일 발송
- Firebase Authentication, Firestore를 이용한 닉네임, MBTI, 성별, 지역, 포인트 저장
- 앱 실행 시 세션 확인 후 홈 / 로그인 분기


2) 커뮤니티 게시판
- 게시판: 전체 / 익명 / MBTI 유형별 게시판
- 게시글 작성, 검색, 좋아요, 댓글, 대댓글 기능
- 홈 피드: 전체 / 익명 / 핫 / 오늘의 글 필터



3) 실시간 채팅 (Firestore)
- 친구 1:1 채팅, 공개 채팅방
- Firestore .snapshots() 기반 실시간 메시지 수신
- 채팅방 ID 규칙: 1:1은 uid 조합 정렬, 공개방은 고정 ID
- FCM Topic으로 메시지 전송 시 상대에게 푸시 알림


4) FCM 푸시 알림
- Foreground / Background / Terminated 상태별 알림 처리
- FCM 토큰 구독/해제로 채팅방별 알림 on/off
- 알림 탭 시 해당 채팅방으로 Deep Link 이동
- Local Notification 채널 chat_messages 연동
6) 포인트 시스템
- 회원가입 시 포인트 지급
- 출석, 매칭 소모, 확성기, 닉네임 변경 등 포인트 연동
- 포인트 내역 페이지
7) 기타
- MBTI 16유형 소개 (성격/직업/궁합)
- 한/영 다국어 easy_localization
- 쿠팡파트너스 WebView
- 프로필 수정, 로그아웃, 회원탈퇴
사용 기술
Frontend: Flutter / Dart / GetX
Backend: Firebase Auth, Cloud Firestore, FCM, Cloud Functions
UI: ConvexAppBar, Carousel Slider
Etc: flutter_local_notifications, easy_localization, webview_flutter
아키텍처 요약
[ Flutter App ] ├─ Firebase Auth — 로그인 / 세션 ├─ Cloud Firestore — 유저 · 게시글 · 채팅 · 포인트 ├─ FCM + Local Noti — 채팅 푸시 / Deep Link └─ Cloud Functions — notifications 문서 생성 시 푸시 발송
어려웠던 점 & 해결
1) FCM 알림이 안오는 현상 해결
문제
FCM 토큰은 빌드/재설치 시 변경되는데, 서버/클라이언트에 이전 토큰이 남아 알림이 누락되는 현상
해결
- ○ 앱 실행 시 최신 토큰을 다시 받아 저장하는 함수에서 문제 확인
- ○ 채팅 알림을 Topic 구독 방식으로 전환해 토큰이 바뀌어도 방 단위 push 가능
- ○ Foreground/Background 핸들러 분리 및 Local Notification 채널 구성
배운 점
FCM 토큰은 언제든 갱신될 수 있어 1회 등록이 아니라 앱 시작/로그인마다 동기화가 필요
2) Firestore 실시간 채팅
문제
메시지 동기화 지연, 채팅방 구분, 알림과 화면 상태 충돌
해결
- ○ Firestore stream으로 메시지 실시간 구독
- ○ 유저 uid 조합으로 Room ID 일관 생성
- ○ 해당 채팅방을 보고 있으면 Foreground 알림 생략
배운 점
채팅은 저장만이 아니라 구독 범위, 방 식별, 알림 조건을 함께 설계해야 안정적
핵심 성과
- Firebase Auth + Firestore로 회원·게시판·채팅·포인트 단일 백엔드 구성
- FCM Topic + Deep Link로 채팅 알림 UX 완성
- 랜덤매칭, 편지, 포인트 등 재방문 유도 요소 추가
Flutter + Firebase(Auth/Firestore/FCM/Functions)로 커뮤니티(게시판)와 실시간 채팅을 구현했고, FCM 토큰 갱신 이슈는 토큰 재동기화 + Topic 구독으로 안정화하여 채팅 푸시/딥링크 UX를 완성했습니다.