기록 지키기 — 켜는 법

코드는 다 돼 있습니다 · 콘솔에서 네 가지만 하시면 됩니다

카카오·구글 로그인, 서버 저장, 어느 쪽이 나중 것인지 가리는 일, 계정 지우기까지 코드는 전부 들어가 있습니다. 아래 네 단계를 거쳐 맨 마지막에 cloud-config.js에 두 줄만 채우면 켜집니다.

채우기 전까지는 이 기능이 통째로 꺼져 있습니다 — 화면에 나타나지도 않고, 서버로 아무것도 나가지 않으며, 게임은 지금처럼 기기 안에서만 돕니다. 잘못 켜질 걱정은 없습니다.

먼저 알아 두실 것

로그인은 끝까지 「선택」입니다

로그인은 결제 때문이 아닙니다. 결제는 구글 플레이가 전부 맡습니다 — 로그인이 없어도 옥은 사집니다. 로그인은 오직 폰을 바꿔도 기록이 따라오게 하기 위한 것입니다.

그래서 안 하셔도 게임은 하나도 빠짐없이 다 됩니다. 그 덕에 Play Console의 「앱에 제한된 부분이 있나요」는 여전히 「아니요」입니다.

로그인하기 전에는 서버에 한 글자도 보내지 않습니다. 익명 세션조차 만들지 않습니다 — 안 만들면 지울 것도, 새어 나갈 것도, 설명할 것도 없습니다.

서버에 두는 것

표 한 줄이 전부입니다 — 누구의 것인지(계정 번호)와 게임 기록 한 덩이(단계·냥·옥·수련·호). 이름도 전화번호도 두지 않고, 이메일은 로그인 쪽이 갖고 있지 우리 표로 옮겨 오지 않습니다.

하나

Supabase 프로젝트 만들기

감사담 것과 섞지 마십시오. 동의 화면에 「감사담」이 떠서 낱말산 사용자가 어리둥절해지고, 두 서비스의 사용자 데이터가 한 곳에 섞입니다. 낱말산 전용으로 새로 만드십시오.

service_role 키는 손대지 마십시오

같은 화면에 service_role 키도 있습니다. 그건 모든 사람의 기록을 다 읽는 열쇠입니다. 웹에 올라가는 파일에 절대 넣지 마십시오. 우리가 쓸 것은 anon public 하나뿐입니다.

둘

표와 자물쇠 만들기 — SQL 한 번

Supabase 대시보드 → 왼쪽 SQL Editor → New query → 저장소의 supabase/0001_saves.sql을 통째로 붙여 넣고 Run. 한 번만 하면 됩니다.

이 한 번으로 세 가지가 생깁니다.

생기는 것하는 일
saves 표사람마다 기록 한 줄
RLS 넉 줄 한 사람은 제 줄만 봅니다. 이게 없으면 anon 키를 쥔 누구나 남의 기록을 읽습니다 — 가장 중요한 줄입니다
delete_me() 로그인한 사람이 제 손으로 제 계정을 지웁니다. 구글 플레이가 요구하는 기능입니다
실행한 뒤 한 번 확인하십시오

Table Editor → saves를 열면 표 이름 옆에 「RLS enabled」 라고 떠 있어야 합니다. 안 떠 있으면 SQL이 끝까지 안 돌아간 것이니 다시 실행하십시오.

셋

구글 로그인 — console.cloud.google.com

감사담 때와 같은 순서입니다. 다만 프로젝트는 새로 만듭니다 — 동의 화면에 뜨는 이름이 「낱말산」이어야 하기 때문입니다.

출시 전에 반드시 — 게시 상태를 「프로덕션」으로

기본값인 테스트(Testing) 상태에서는 등록한 계정 100명만 로그인됩니다. 스토어에 올라간 뒤에 이 상태면 대부분의 사람에게 로그인이 그냥 실패합니다.

「프로덕션」으로 올리면 구글 검증이 붙는데, 범위가 email · profile · openid뿐이면 민감하지 않은 범위라 대개 바로 통과합니다. 다만 미리 해 두십시오 — 심사 끝나고 하면 그만큼 늦어집니다.

익명으로 하시려면 — 지원 이메일 하나만 조심

구글 쪽에는 이메일 칸이 둘인데 성격이 다릅니다.

  • 사용자 지원 이메일(브랜딩) — 로그인 동의 화면에 「이 앱 개발자에게 문의」로 사용자에게 보입니다
  • 개발자 연락처 정보 — 구글만 봅니다. 사용자에게는 안 보이니 평소 주소를 넣으셔도 됩니다

나중에 바꿀 수 있습니다 — 프로젝트를 다시 만들 필요 없이 Google Auth Platform → 브랜딩에서 고치면 됩니다. 다만 드롭다운에는 본인이 소유한 주소만 뜹니다. 새 주소를 쓰시려면 그 계정을 IAM에서 프로젝트 소유자로 추가한 뒤 그 계정으로 로그인해 고르십시오.

전용 주소 하나가 네 군데에 쓰입니다

어차피 Play 스토어 등록정보의 연락처 이메일은 스토어 페이지에 공개됩니다 — 구글이 필수로 요구하고 누구나 봅니다. 그래서 전용 주소는 어느 쪽이든 한 번은 필요합니다.

  • 구글 동의 화면 지원 이메일
  • Play 스토어 연락처 세부정보 (공개)
  • 카카오 개발자 계정
  • 개인정보처리방침과 계정 삭제 안내의 받는 곳

하나 만들어 네 군데에 같은 것을 쓰시면 한 군데도 평소 주소가 새지 않습니다. 스토어에 올라간 뒤에 고치면 이미 퍼진 뒤라, 지금 만드는 쪽이 훨씬 쌉니다.

넷

카카오 로그인 — developers.kakao.com

이메일은 안 받습니다 — 코드가 이미 그렇게 돼 있습니다

카카오 콘솔에서 카카오계정(이메일)이 「권한 없음」으로 잠겨 있는 것이 정상입니다. 개인 개발자 앱은 이 항목을 아예 요청할 수 없고, 억지로 요구하면 KOE205로 로그인 자체가 막힙니다.

그래서 닉네임만 받습니다. 기록을 잇는 열쇠는 처음부터 이메일이 아니라 계정 번호였고, 이메일이 하던 일은 「어느 계정으로 이었는지」를 화면에 보여 주는 것뿐이라 닉네임으로 충분합니다. 오히려 모으는 개인정보가 하나 줄어듭니다.

그래서 Supabase에서 한 칸을 켜야 합니다

카카오가 이메일을 주지 않으므로, Authentication → Providers → Kakao 안의 「Allow users without an email」을 켜십시오. 이게 꺼져 있으면 Supabase가 이메일 없는 로그인을 거부합니다 — 카카오 창까지 다 거치고 돌아와서 실패합니다.

구글 쪽은 끈 채로 두십시오. 구글은 이메일을 늘 주므로 켤 이유가 없습니다.

마지막

두 줄 채우고 판 올리기

cloud-config.js를 열어 1단계에서 적어 둔 두 값을 넣습니다.

window.NM_CLOUD = {
  url: "https://xxxxxxxx.supabase.co",
  key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....."
};
이 파일은 캐시됩니다 — 판 번호를 꼭 올리십시오

sw.js 맨 위의 var V = "natmal-15"에서 숫자를 하나 올리고 함께 올리셔야 합니다. 안 그러면 이미 깔린 폰은 예전의 빈 설정을 계속 씁니다.

올린 뒤 「규칙」을 열어 「기록 지키기」 칸이 나타났는지, 카카오·구글 단추가 눌리는지 확인하십시오. 설정이 비어 있으면 이 칸은 아예 안 보입니다 — 그게 안 켜졌다는 표시입니다.

켠 뒤

Play Console에서 함께 고쳐야 하는 것

로그인을 켜는 순간 이메일을 모으게 됩니다. 「아무것도 모으지 않습니다」는 그때부터 쓸 수 없습니다. 아래를 함께 고치지 않으면 심사에서 막히거나, 통과한 뒤에 문제가 됩니다.

자리바꿀 답
로그인 세부정보 아니요 — 그대로입니다. 로그인이 선택이고 잠긴 자리가 없습니다
데이터 보안 수집함으로 바뀝니다
· 이메일 주소 — 선택 · 계정 관리 목적 · 공유 안 함
· 앱 활동(게임 기록) — 선택 · 앱 기능 목적 · 공유 안 함
· 전송 중 암호화됨 · 삭제 요청 가능
계정 삭제 URL wordgamebest.vercel.app/docs/account-delete.html
개인정보처리방침 주소는 그대로 · 내용이 이미 고쳐져 있습니다
계정 삭제는 구글이 요구합니다

계정을 만드는 앱은 앱 안에서 지우는 길과 웹으로 지우는 길을 둘 다 둬야 합니다. 둘 다 돼 있습니다 — 앱에서는 「규칙 → 계정 지우기」, 웹에서는 위의 주소입니다.