안녕하세요..
이제 겨울은 다 갔는지 봄비가 내리네요..
Wavve+ v1.2.0 업데이트했습니다.
1.실시간 채팅기능 추가
- 환경설정 채팅기능 활성화시 채팅방 모듈 추가
- 라이브 및 vod 방송 시청시 실시간 채팅 기능 추가
( 컨텐츠 시청중 리모컨 위로버튼을 누르고 있으면 채팅창 열림 / 아래로 버튼 누르고 있으면 채팅창 닫힘)
- 빠른말 전송기능 및 빠른말 등록 기능(스마트폰 자판입력 창)
- 입력 메세지 기능 및 핸드폰으로 문자 입력 지원
(음성인식 텍스트입력 모드 및 스마트폰 자판 입력 기능 추가(QR코드로 사이트 연결 및 연동))
2. TVING 로그인
- TVING 인증 후 프로필 선택 기능 추가
3. 컨텐츠 재생시 에러 복구 로직 추가
- 하드웨어 문제등으로 초기화 에러시 자동 화질 변경 기능 추가 (1080p -> 720p -> 480p)
4. 환경설정 기능 추가
- 화면의 메인메뉴 버튼 높이 및 사이즈 설정 추가(화면설정)
- 실시간 채팅 기능 추가 / 대화명 설정 및 채팅창 투명도 설정 (채팅설정)
5. 코드 안정화





환경설정에서 채팅설정의 채팅기능 활성화를 하셔야 아래 기능이 동작됩니다.
실시간 TV 나 VOD 보시면서 리모컨 위로가기 꾹 누르시면 채팅창이 나오고요..
음성 메세지 택스트 변환되서 올라가고
빠른말 전송
QR코드로 스마트폰에서 입력하셔도 됩니다.
채팅창닫는건 리모컨 아래로 꾹 누르시면 닫힙니다..
채팅창이 떠 있을떄는 위 아래 채널 변경은 안되구여..
스마트폰은 화면 두번 클릭하시면 창이 나옵니다. 닫는것도 두번 클릭...
버그가 얼마나 생길려나 모르겠네요..~
🚀 Wavve+ TV: 스마트 실시간 채팅 시스템 기술 스펙 정리
1. 개요 (Overview)
Wavve+ 채팅 시스템은 안드로이드 TV 시청 경험을 단순한 관람에서 '소통'으로 확장하기 위해 설계되었습니다. 리모컨 타이핑의 한계를 **스마트폰 동기화(Story Mode)**와 음성 인식(STT) 기술로 해결한 것이 특징입니다.
2. 핵심 기술 스택 (Tech Stack)
- Framework: Flutter (Cross-platform)
- Backend: Firebase Realtime Database (NoSQL, Real-time Sync)
- Authentication: Firebase Anonymous Auth (기기별 고유 UID 발급)
- Hosting: Firebase Hosting (모바일 입력 웹페이지 배포)
- State Management: StreamBuilder (실시간 데이터 바인딩)
3. 주요 기술 기능 (Core Features)
① 하이브리드 입력 시스템 (Triple Input Method)
TV 리모컨의 불편함을 해결하기 위해 세 가지 입력 방식을 동시에 지원합니다.
- 스마트폰 연동 (QR Sync): TV 화면의 QR 코드를 스캔하면 별도의 앱 설치 없이 모바일 웹 자판을 통해 채팅 입력 및 TV 상용구 버튼 실시간 편집 가능.
- 음성 인식 (Speech-to-Text): speech_to_text 패키지를 활용, 리모컨 마이크를 통해 음성을 텍스트로 변환하여 전송.
- 커스텀 상용구 (Quick Phrases): 자주 쓰는 문구를 버튼화하여 리모컨 OK 버튼 한 번으로 전송.
② 실시간 데이터 동기화 (Real-time Sync & Tracking)
- TV-모바일 동기화: TV에서 채널을 돌리면 핸드폰 웹페이지가 이를 감지하여 자동으로 해당 채널 채팅방으로 이동하는 '채널 트래킹' 구현.
- 지능형 Presence: onDisconnect 로직을 활용하여 사용자가 앱을 종료하거나 방을 나갈 때 실시간 인원수를 정확히 집계.
- 실시간 메시징: WebSocket 기반의 Firebase Stream을 사용하여 0.1초 내외의 초저지연 메시지 전송 구현.
③ TV 최적화 UI/UX (TV Optimized Experience)
- 포커스 관리 (Focus Management): FocusNode와 FocusScope를 정밀 제어하여 채팅창 열기/닫기 시 리모컨 주도권을 완벽하게 관리.
- 가속 탐색 (Accelerated Focus): 상용구 리스트가 길어질 경우 Scrollable.ensureVisible을 통해 포커스를 따라 리스트가 자동으로 스크롤됨.
- 오디오 세션 제어: 음성 인식 시 방송 소리가 멈추지 않도록 audio_session의 mixWithOthers 옵션을 적용하여 끊김 없는 시청 환경 제공.
4. 데이터 최적화 및 보안 (Data & Security)
① 데이터 다이어트 (Data Pruning)
서버 부하와 비용을 절감하기 위해 지능형 데이터 관리 로직을 적용했습니다.
- 최신 50개 제한: limitToLast(50)를 사용하여 채팅창 진입 시 메모리 사용량 최소화.
- 자동 삭제 로직 (Pruning): 메시지가 100개가 넘어가면 가장 오래된 데이터를 20개씩 자동 삭제하여 DB 용량 최적화. (단, 공지/건의방은 보존)
② 강력한 보안 규칙 (Security Rules)
Google Cloud Console과 Firebase를 연동한 다층 보안을 적용했습니다.
- 도메인 화이트리스트: 등록된 주소(*.web.app, localhost) 외의 불법 API 접근 차단.
- UID 검증: auth != null 조건을 통해 인증된 사용자만 쓰기 권한 부여.
- 데이터 변조 방지: 이미 작성된 메시지는 수정/삭제가 불가능하도록 !data.exists() 규칙 적용.
- 특수문자 필터링: Firebase 경로 에러를 유발하는 특수문자(., #, $, [, ])를 자동으로 세척(Sanitize)하는 로직 포함.
5. 주요 라이브러리 (Dependencies)
| 라이브러리 | 용도 |
| firebase_database | 실시간 NoSQL 데이터 통신 |
| qr_flutter | 스마트폰 연동용 QR 코드 생성 |
| speech_to_text | 리모컨 마이크 음성 인식 엔진 |
| intl | 채팅 시간 및 날짜 포맷팅 |
| audio_session | 음성 인식 중 배경음 제어 |
6. 마무리
단순히 "글자를 주고받는 기능"을 넘어, TV 기기의 물리적 제약을 소프트웨어적으로 어떻게 해결했는가가 이번 프로젝트의 핵심입니다. 특히 Firebase를 활용한 기기간 상태 동기화는 안드로이드 TV 앱 개발의 새로운 사용자 경험(UX) 방향을 제시합니다.
'프로그램 > 개발품들...' 카테고리의 다른 글
| 🚀 Wavve+ v1.2.2 업데이트 릴리즈 노트 (0) | 2026.03.11 |
|---|---|
| 🚀 Wavve+ Android TV / v1.2.1 업데이트 안내 (0) | 2026.03.03 |
| 제품 검수용 바코드 체크 APP 개발(VESSEL Barcode Checker v1.4) (0) | 2026.02.22 |
| Wavve+ Unofficial Client for Android TV / 웨이브 실시간 방송 및 컨텐츠전용 안드로이드TV 앱 (SBS 및 TVING 컨텐츠 모듈 추가) (1) | 2026.02.22 |
| S1 클라우드 API 연동: 레거시 그룹웨어를 위한 실시간 통합 근태 대시보드 개발 (3) | 2025.07.09 |