포스트

Play 게임즈 리더보드를 22개에 붙였다가 20개를 뗐습니다 — 코드는 한 곳, 막힌 건 Cloud 프로젝트 한도

토스 게임센터 랭킹을 쓰는 미니게임 25개의 구글 플레이판에 Google Play 게임즈 리더보드를 붙이기 시작해 22개까지 설정하고 업데이트를 냈습니다. 게임 코드는 손대지 않고 공용 코드 한 곳에서 갈라지게 했고, 콘솔은 앱마다 아홉 단계였습니다. 그런데 Cloud 프로젝트가 계정당 25개로 막혔고 증가 신청은 세 번 다 거절됐습니다. 결국 사용자가 있는 2개만 남기고 20개를 뗀 과정까지 정리했습니다

Play 게임즈 리더보드를 22개에 붙였다가 20개를 뗐습니다 — 코드는 한 곳, 막힌 건 Cloud 프로젝트 한도

한 달 전 미니게임에 기록탭을 붙였습니다. 일간·주간·월간·명예의 전당은 앱 안에 남기고, 남과 비교하는 전체 랭킹은 토스 게임센터에 맡기는 구조였습니다.

문제는 구글 플레이판이었습니다. 같은 게임을 플레이 스토어에도 내고 있는데, 거기에는 토스 게임센터가 없습니다. 플레이판 사용자는 자기 기록만 볼 수 있고 남과 비교할 곳이 없었습니다.

그래서 토스 랭킹을 쓰는 게임 25개 모두에 Google Play 게임즈 서비스(PGS) 리더보드를 붙이기로 했습니다. 한두 개만 먼저 시험해 보자는 의견도 있었지만, 기록이 남는 게임이면 다 붙이는 쪽으로 정했습니다. 결과부터 말하면 22개까지 붙였다가 이틀 뒤 20개를 다시 뗐습니다. 그 과정을 적어 둡니다.

게임 코드는 건드리지 않았다

25개 게임마다 랭킹 코드를 따로 고치면 25번 실수할 기회가 생깁니다. 그래서 기록탭을 만들 때 쓴 공용 플랫폼 코드 한 곳에서 갈라지게 했습니다.

  • 앱이 시작될 때 안드로이드 쪽에 “PGS 리더보드가 설정돼 있는가”를 묻습니다.
  • 설정돼 있으면 기존의 토스 랭킹 버튼이 ‘🏆 Play 게임즈 랭킹’으로 바뀌고, 누르면 PGS 랭킹 화면이 열립니다.
  • 설정이 없으면 예전처럼 동작합니다.

게임은 판이 끝나면 예전처럼 “기록 저장”만 부릅니다. 그 기록을 토스로 보낼지 PGS로 보낼지는 플랫폼 코드가 정합니다. 앱마다 리더보드 ID는 표 한 장(앱 이름·정렬 방향·형식·ID)에 적어 두고, ID가 채워진 앱만 빌드할 때 PGS가 켜집니다. 콘솔 설정이 끝나지 않은 앱은 ID 칸이 비어 있으니 자동으로 예전처럼 나갑니다.

토스와 다르게 한 두 가지

매 판 올린다. 토스에는 신기록일 때만 점수를 올립니다. PGS는 오늘·이번 주·전체 기간의 최고점을 알아서 남겨 줍니다. 그래서 신기록이 아니어도 매 판 올립니다. 그래야 ‘오늘’, ‘이번 주’ 탭이 채워집니다.

처음 한 번은 예전 최고 기록을 올린다. 업데이트 전부터 오래 한 사람은 자기 최고 기록을 깨기 전까지 랭킹에 안 뜹니다. 그래서 PGS에 처음 연결될 때 기기에 남아 있던 최고 기록을 한 번만 올립니다. 토스 쪽에도 같은 장치가 있는데, 표시는 따로 둬서 서로 영향을 주지 않게 했습니다.

점수 형식은 두 가지입니다. 점수가 높을수록 좋은 게임(뱀 게임·2048 등)은 숫자로, 빨리 깰수록 좋은 게임(지뢰찾기·스도쿠 등)은 시간(밀리초)으로 올립니다. 리더보드의 정렬 방향은 게시한 뒤에는 바꿀 수 없어서, 표의 값과 콘솔 값을 맞춰 보고 만들었습니다.

콘솔은 앱마다 아홉 단계

코드는 한 번이면 끝났지만, 콘솔 설정은 앱마다 해야 했습니다. 뱀 게임으로 한 번 해 보니 이런 순서였고, 앱 하나에 클릭이 60번쯤 들었습니다.

  1. Google Cloud 프로젝트 만들기
  2. Play Console에서 게임즈 서비스 프로젝트를 만들고 1번 프로젝트와 연결
  3. Cloud 쪽 OAuth 동의 화면(앱 이름·지원 메일·홈페이지·개인정보처리방침) 설정 후 게시
  4. 앱 서명 키의 SHA-1 지문으로 안드로이드 OAuth 클라이언트 만들기
  5. Play Console에 그 클라이언트로 사용자 인증 정보 등록
  6. 리더보드 만들기
  7. 게임 속성(표시 이름·설명·카테고리·아이콘·그래픽 이미지) 입력
  8. 게임즈 서비스 프로젝트 게시
  9. 데이터 보안 양식에 PGS 항목 추가

걸린 곳은 네 군데였습니다.

  • Cloud 프로젝트 하나에 PGS 프로젝트 하나. 앱마다 Cloud 프로젝트가 따로 필요합니다. 이게 결국 전체를 뒤집었는데, 아래에 따로 적었습니다.
  • 서명 키가 두 개인 앱. 8~9월에 거의 모든 앱의 서명 키를 업그레이드했습니다. 옛 키로 서명된 버전을 쓰는 사람도 로그인돼야 하니, 현재 키와 이전 키의 SHA-1로 OAuth 클라이언트와 사용자 인증 정보를 하나씩 더 만들어야 했습니다. 이전 키 지문은 Play Console 앱 서명 화면의 ‘이전 앱 서명 키’ 메뉴 안에 있습니다.
  • 동의 화면에 로고를 올리지 말 것. OAuth 동의 화면에 로고를 올리면 구글의 앱 인증 심사가 걸립니다. 이름과 링크만 넣고 로고는 비워 뒀습니다.
  • 데이터 보안 양식. PGS를 쓰면 사용자 ID와 앱 활동(점수 제출)을 수집하는 것으로 신고해야 합니다. 앱 기능 용도·선택 사항으로 두 항목을 추가했습니다. 광고 앱 공통 항목에 이 두 줄을 더한 양식을 하나 만들어 두고 앱마다 같은 것을 올렸습니다.

브라우저로 콘솔을 눌러 가며 했는데, 브라우저 탭이 화면 뒤로 가면 타이머가 느려져 드롭다운이 안 열리고 작업이 멈추는 일도 있었습니다. 콘솔 작업 중에는 그 탭을 앞에 둬야 했습니다.

22개에서 멈췄다 — 계정당 Cloud 프로젝트 25개

10월 10일까지 22개 게임의 콘솔 설정을 끝내고 업데이트를 모두 심사에 넣었습니다. 가장 먼저 한 뱀 게임은 실제 휴대폰(갤럭시 S23)에서 확인했습니다. 앱을 열면 Play 게임즈에 자동으로 로그인되고, 예전 최고 기록 220점이 한 번 올라가고, 랭킹 버튼을 누르면 PGS 랭킹 화면이 떴습니다.

남은 건 3개였는데, 23번째 Cloud 프로젝트를 만들려고 하자 “프로젝트 한도에 도달했습니다”라는 문구가 떴습니다. 이 계정의 Cloud 프로젝트는 원래 있던 3개와 PGS용 22개를 합쳐 25개가 끝이었습니다.

할당량 증가를 세 번 신청했습니다. 세 번 모두 “할당량이 충분히 남아 있다”는 자동 회신으로 거절됐습니다. 콘솔은 한도에 막혔다고 하는데, 신청 창구는 넉넉하다고 답하는 상황입니다. 세 번째에는 콘솔 문구를 그대로 인용해서 냈지만 결과는 같았습니다.

다른 길도 따져 봤습니다.

  • PGS 프로젝트 하나를 여러 게임이 같이 쓰기. 문서상 이건 같은 게임의 다른 판본(무료판·유료판 등)을 위한 기능입니다. 서로 다른 게임을 묶는 용도가 아닙니다.
  • 다른 구글 계정에서 Cloud 프로젝트 만들기. 할당량을 피하려고 계정을 여러 개 쓰는 것은 Cloud 약관에 걸릴 수 있습니다. 계정 하나가 막히면 앱 전체가 위험해지는 구조라 쓰지 않았습니다.

그래서 20개를 뗐다

방향을 바꿨습니다. 실제로 쓰는 사람이 있는 게임에만 리더보드를 남기기로 했습니다. 기준은 플레이의 활성 기기 30대 이상입니다. 이 기준을 넘은 건 하늘 점프와 벽돌깨기 2개였습니다.

나머지 20개는 10월 11일에 리더보드를 떼는 업데이트를 냈습니다. 코드는 처음에 만든 구조 그대로라 표에서 ID만 빼면 됐습니다. 데이터 보안 양식도 PGS 항목을 뺀 원래 양식으로 되돌렸습니다. 업데이트가 모두 출시된 것을 확인한 뒤, 10월 12일에 쓰지 않게 된 Cloud 프로젝트 20개를 종료했습니다.

다만 종료해도 바로 자리가 나지 않습니다. 종료한 프로젝트는 30일 동안 삭제 대기 상태로 남아 할당량을 계속 차지합니다. 그래서 11월 11일 이후에야 자리가 돌아옵니다. 그때까지는 새 PGS를 만들 수 없습니다.

앞으로 만드는 게임은

처음에는 새 기록형 게임에 PGS를 기본으로 넣기로 하고 출시 점검 스크립트까지 고쳐 두었습니다. 이 규칙은 거뒀습니다. 신작은 PGS 없이 출시하고, 플레이 사용자가 기준만큼 모인 게임만 나중에 붙입니다. 표에 그 게임의 줄만 미리 만들어 두면, 붙일 때는 ID만 넣으면 됩니다.

돌아보면 처음 나왔던 “한두 개만 먼저 시험해 보자”는 의견이 맞았습니다. 22개에 붙이는 데 든 콘솔 작업과 심사, 그리고 다시 떼는 업데이트까지 생각하면, 사용자가 있는 게임부터 하나씩 붙이는 쪽이 훨씬 쌌을 겁니다. 할당량이 있는 자원은 쓰기 전에 총량부터 확인할 것. 이번에 얻은 교훈입니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.