오대리ㅣㅣㅣㅣ
This commit is contained in:
87
mobile/README.md
Normal file
87
mobile/README.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# IYKYKA — Flutter 클라이언트
|
||||
|
||||
멀티 컨텍스트(일상·업무 등) 기반 메신저 **IYKYKA**의 모바일 앱입니다. 서버 REST API + WebSocket과 연동합니다.
|
||||
|
||||
---
|
||||
|
||||
## 실행 방법
|
||||
|
||||
프로젝트 루트의 [README.md](../README.md)에 서버 기동 방법이 있습니다. 서버가 떠 있는 상태에서:
|
||||
|
||||
```bash
|
||||
cd mobile
|
||||
flutter pub get
|
||||
flutter run --dart-define=API_BASE=http://127.0.0.1:8787
|
||||
```
|
||||
|
||||
- **Android 에뮬레이터** → `API_BASE=http://10.0.2.2:8787`
|
||||
- **웹** → `sqflite` 미지원으로 로컬 메시지 캐시 전체는 동작하지 않을 수 있음. **Android / iOS / Windows 데스크톱** 권장
|
||||
|
||||
---
|
||||
|
||||
## 기술 스택 (요약)
|
||||
|
||||
| 구분 | 사용 |
|
||||
|------|------|
|
||||
| 상태·DI | `flutter_riverpod` |
|
||||
| 라우팅 | `go_router` |
|
||||
| HTTP | `dio` (JWT 인터셉터) |
|
||||
| 소켓 | `web_socket_channel` |
|
||||
| 로컬 DB | `sqflite` (방별 메시지 캐시) |
|
||||
| 보안 저장소 | `flutter_secure_storage` (토큰) |
|
||||
| 설정 | `shared_preferences` (테마·알림 스위치 등) |
|
||||
| 푸시 | `firebase_core` / `firebase_messaging`, 포그라운드는 `flutter_local_notifications` |
|
||||
| 앱 정보 | `package_info_plus` (설정 화면 버전 표시) |
|
||||
|
||||
---
|
||||
|
||||
## 구현된 기능
|
||||
|
||||
### 인증·세션
|
||||
- 회원가입 / 로그인, JWT 저장 및 API 자동 부착
|
||||
- 로그아웃 시 소켓 종료 후 로그인 화면으로 이동
|
||||
|
||||
### 컨텍스트·홈
|
||||
- 컨텍스트 목록·선택(일상 / 업무 등), 해당 컨텍스트 기준 방·멤버·내 프로필
|
||||
- 이메일 초대, 업무 컨텍스트 생성, 그룹 채팅방 만들기
|
||||
- 하단 탭: 대화 / 멤버 / 내 프로필
|
||||
|
||||
### 채팅
|
||||
- WebSocket 실시간 메시지, 방 구독
|
||||
- **오프라인/끊김 시** 전송 실패 메시지를 메모리 큐에 쌓았다가 **연결 복구 후 순차 전송**
|
||||
- 1:1 방: **상대 입력 중** 표시(타이핑 이벤트·디바운스), **읽음** 표시(서버 읽음 상태 + WS 갱신)
|
||||
- 메시지 읽음 처리(마지막 메시지 기준) API 호출
|
||||
- 로컬 `sqflite`에 방별 메시지 캐시(동기화·오프라인 열람 보조)
|
||||
|
||||
### 검색
|
||||
- **메시지 / 방 / 친구** 탭으로 구분, **클라이언트 측 필터**(쿼리 문자열)
|
||||
|
||||
### 설정
|
||||
- 앱 이름·**버전**(`package_info_plus`)
|
||||
- **테마**: 시스템 / 라이트 (OS 다크여도 앱은 라이트 토스 스타일 유지)
|
||||
- **푸시 알림** 스위치(SharedPreferences; 켜진 경우 FCM 초기화·토큰 서버 등록 시도)
|
||||
- 로그아웃
|
||||
|
||||
### 푸시(FCM)
|
||||
- Firebase 초기화 실패 시에도 앱 기동은 계속(미설정·플레이스홀더 `firebase_options` 대비)
|
||||
- FCM 토큰을 서버 `registerPushToken`으로 등록, 토큰 갱신 시 재등록
|
||||
- 포그라운드 수신 시 로컬 알림 표시(설정 가능 범위 내)
|
||||
|
||||
### UI
|
||||
- 토스 느낌의 라이트 테마(`theme/toss_theme.dart`)
|
||||
|
||||
---
|
||||
|
||||
## 검증 명령
|
||||
|
||||
```bash
|
||||
dart analyze lib
|
||||
flutter test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 참고
|
||||
|
||||
- 서버에서 실제 원격 푸시 발송(Firebase Admin 등)은 별도 연동 단계일 수 있으며, 클라이언트는 토큰 등록까지 동작하도록 구성되어 있습니다.
|
||||
- 실제 배포·스토어 빌드 전에는 `firebase_options.dart` 및 Android/iOS Firebase 설정을 프로젝트에 맞게 교체해야 합니다.
|
||||
Reference in New Issue
Block a user