네온 레인 · Firebase 랭킹 설정 (전용 Firebase 프로젝트)
Firestore + 익명 로그인. firebase-config.js 가 비어 있으면 이 기기 로컬 랭킹으로 동작합니다.
데이터 구조 (컬렉션 neonlane_scores)
- 문서 ID
<board>__<uid>(플레이어당 보드별 1행), 필드{ board, name, score, dist, combo, day, ts } - board
dYYYYMMDD— 일일 랭킹(오늘의 곡) / boardall— 명예의 전당(역대 최고) - 일일 챔피언 = 최근 14일 각 일일 보드의 1위. 정렬: 점수 내림차순, 같으면 먼저 달성한 사람
- 프리 플레이는 랭킹에 반영되지 않습니다
설정 순서 (콘솔에서)
- 프로젝트 만들기: Firebase 콘솔 → 프로젝트 추가 (예:
neon-lane). Analytics 는 꺼도 됩니다. - Firestore Database → 데이터베이스 만들기 → 위치
asia-northeast3 (서울)→ 프로덕션 모드. - Authentication → 시작하기 → 로그인 방법 → 익명 사용 설정.
- 규칙: Firestore → 규칙 탭에 이 폴더의
firestore.rules전체를 붙여넣고 게시. - 인덱스: Firestore → 인덱스 → 복합 → 추가: 컬렉션
neonlane_scores,board오름차순 /score내림차순 /ts오름차순, 쿼리 범위 “컬렉션”. (또는firebase deploy --only firestore:rules,firestore:indexes --project <프로젝트ID>) - 웹 앱 등록: 프로젝트 설정 → 일반 → 내 앱 → 웹(</>) 앱 추가 → 표시되는
firebaseConfig의apiKey,authDomain,projectId,appId를firebase-config.js에 입력.
한계
- 익명 로그인 + 클라이언트가 보내는 점수라서, 규칙의 범위(점수는 거리 대비 상한 이하, 본인 행만, 더 높은 점수로만 갱신, 삭제 불가) 안에서 조작된 점수까지는 막지 못합니다. 엄격한 방지는 서버(Cloud Functions)에서 검증해야 합니다.
day는 기기 날짜 기준입니다. 앱 데이터를 지우면 새 익명 uid 가 되어 이전 기록과 연결되지 않습니다.