Google Play 게임즈 서비스 품질 체크리스트

게임 품질은 설치 수, 플레이어 평점 및 리뷰, 참여도, 플레이어 유지율의 측면에서 게임의 장기적 성공에 영향을 미칩니다. 게임을 게시하기 전에 매력적인 기능과 직관적이고 멋지게 디자인된 UI를 통해 게임 플레이어의 기본적인 기대치를 충족하는지 확인해야 합니다.

이 문서를 활용하면 게임의 성공에 큰 영향을 미칠 수 있는 품질, 기능 세트, UI와 같은 핵심적인 측면에 집중할 수 있습니다. 각 중점 영역에는 최소 요구사항, 권장사항, 유용한 참고사항으로 구성된 체크리스트가 제시되어 있습니다. 플레이어에게 최고의 제품을 제공하려면 체크리스트의 권장사항을 가능한 한 충실하게 따르시기 바랍니다.

1. 로그인

다음 체크리스트에 포함된 작업은 게임에서 플레이어 로그인 기능을 구현하는 데 적용됩니다. 로그인 개념에서 로그인이 어떻게 작동하고 로그인을 어떻게 구현해야 하는지 자세히 알아보세요. 모바일 게임에서 로그인을 구현하는 방법과 관련된 코드 예제는 Android에서 로그인 구현하기를 참고하세요.

ID 중요도 설명
1.1 필수 Google Play 게임즈 서비스로 플레이어를 로그인합니다.
1.1.1. 게임이 시작될 때 자동으로 플레이어 로그인 및 백업으로 수동 로그인 사용

게임에서 자동 로그인을 구현하면 플레이어가 Google Play 게임즈 서비스에서 제공하는 모든 기능을 빠르게 인증하고 승인받을 수 있습니다. 자동 로그인이 실패하면 앱에서 대화형으로 로그인하라는 메시지를 플레이어에게 표시해야 합니다. 플레이어는 대화형 로그인을 사용하여 게임에 로그인하도록 선택할 수 있으며 Play 게임즈는 게임에서 사용하도록 프로필이 올바르게 구성되었는지 확인합니다. 자동 로그인과 대화형 로그인을 병용하면 사용자의 불편을 최소화하면서 로그인률을 높일 수 있습니다.

플레이어가 로그인하지 않기로 선택하는 경우 이를 기억하고 플레이어에게 메시지를 다시 표시하지 않습니다. 대신 로그인 버튼을 제공하세요. 로그인 버튼은 플레이어가 쉽게 찾을 수 있어야 합니다. 예를 들어, 로그인 버튼은 기본 화면에서 액세스할 수 있거나 설정 화면에 있어야 합니다. 이 버튼은 게임 메뉴의 여러 단계에 숨겨져서는 안 됩니다. 플레이어가 게임을 시작할 때마다 계속해서 자동으로 로그인되도록 시도합니다. 환경설정을 변경하고 자동 로그인할 수 있습니다.

1.2 필수 로그인 클라이언트를 만들 때 Play 게임즈 이외의 범위를 요청하지 마세요. 이렇게 하면 Play 게임즈 이외의 범위를 요청하면 사용자가 대화형 로그인을 사용하게 되므로 플레이어가 게임에 자동으로 로그인할 수 있습니다.

이미 Play 게임즈 이외의 범위를 요청하는 경우 더 이상 사용하지 않는 API와 함께 GoogleSignInOptions 생성에서 불필요한 범위를 삭제합니다. 다른 범위를 요청해야 하는 경우 (예: 마케팅 목적으로 사용자의 이메일을 보려는 경우)에는 로그인 프로세스의 일부가 아닌 관련된 시간에 수행합니다.

// This is the proper way to do it
GoogleSignInOptions signInOption = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
1.3 필수 플레이어가 로그인 상태를 유지하도록 허용

플레이어가 게임에 로그인한 후 플레이어가 명시적으로 로그아웃할 때까지 게임이 시작될 때마다 자동으로 연결합니다.

1.4 필수 로그인하는 동안 '연결 중' 팝업을 적절하게 표시합니다.

Android 기기에서는 로그인 흐름을 호출할 때마다 Google Play 게임즈 '연결 중' 팝업을 표시해야 합니다. 이렇게 하려면 GamesClient 클래스의 setViewForPopups() 메서드를 호출해야 합니다. 게임 시작 시 플레이어에게 자동으로 로그인할 때 이 팝업이 표시되는지 확인합니다. 이를 통해 플레이어는 게임에 올바르게 로그인하고 있음을 알게 됩니다.

다음 예에서는 로그인 중에 Android 게임에 '연결 중' 팝업이 표시된 다음 Google Play 게임즈 서비스 로고의 간단한 애니메이션을 보여줍니다.

'연결 중' 팝업이 표시된 스크린샷
1.5 필수 플레이어에게 로그아웃 옵션을 제공합니다.

로그인 후에는 플레이어에게 항상 로그아웃 옵션이 있어야 합니다.

앱의 관련 게임 화면 (예: 플레이어 설정 화면)에 로그아웃 버튼을 제공하는 것이 좋습니다.

1.6 권장사항 플레이어가 로그인을 거부했는지 확인합니다.

게임이 처음 로그인 과정을 시작할 때 플레이어가 로그인을 거부한 경우 (예: 로그인 UI에서 취소를 클릭함)에도 플레이어가 게임플레이를 할 수 있도록 허용해야 합니다.

플레이어가 게임을 다시 실행할 때 대화형 로그인 흐름을 자동으로 호출하지 마세요. 이러한 플레이어는 나중에 설정 시스템에 있어야 하는 로그인 버튼을 사용하여 로그인하도록 선택할 수 있습니다. 이렇게 하면 플레이어가 게임을 시작할 때마다 로그인을 거부하지 않아도 됩니다.

한 가지 예외는 로그인 여부에 따라 다른 게임플레이 기능에 액세스하려는 경우 (예: 리더보드에 점수 제출)입니다. 이 경우 게임플레이를 계속 진행하기 전에 플레이어에게 로그인하라는 메시지를 표시하세요.

1.7 권장사항 로그인한 플레이어 수를 극대화합니다.

더 많은 플레이어가 Google Play 게임 서비스에 로그인하도록 하면 협력적이고 경쟁적인 게임플레이의 기회를 늘려 플레이어에게 유리합니다. Google Play 게임즈 서비스에 로그인된 플레이어의 수를 최대화하려면 위에서 설명한 대로 플레이어에게 로그인하라는 메시지를 자동으로 표시하는 것이 좋습니다.

그러지 않으면 다음 시점 중 하나에서 플레이어를 가능한 한 빨리 로그인 흐름으로 안내합니다 (가장 먼저 권장됨).

  • 게임이 시작된 직후
  • 컷신이나 튜토리얼과 같은 입문용 환경이 끝난 직후
  • 플레이어가 게임 어디에서든 Google 로그인 버튼을 클릭할 때
1.8 참고사항 Google 브랜드 가이드라인을 준수합니다.

플레이어에게 매력적, 일관적, 포괄적인 환경을 제공하려면 Google Play 게임즈 서비스 브랜드 가이드라인을 따라 게임을 구현하세요.

1.9 참고사항 플레이어에게 로그인 상태라는 사실을 알립니다.

로그인된 플레이어를 대신하여 게임에서 어떤 작업을 수행하는 경우, 이에 관해 적절한 알림 또는 힌트를 표시합니다. 예를 들어, 로그인된 플레이어가 레벨을 완료하면 다음과 같은 메시지를 통해 플레이어의 점수와 업적이 자동으로 업로드된다는 사실을 알릴 수 있습니다. '현재 Google 계정을 통해 로그인되어 있습니다. 게임 내 업적과 점수는 자동으로 저장됩니다.'

1.10 필수 Play 게임즈 서비스 ID를 사용하여 플레이어의 진행 상황을 백업합니다.

플레이어가 기기를 전환하거나 재설정할 때 또는 여러 기기에서 플레이할 때 플레이어의 진행 상황이 손실되지 않도록 하려면 진행 상황을 클라우드 저장 솔루션에 백업하고, 자체 백엔드 게임 서버를 사용하는 경우에는 Play 게임즈 서비스 ID를 안전하게 키로 사용합니다. 플레이어가 Play 게임즈 서비스 ID로 로그인한 경우 관련 계정에 진행 상황이 있는지 확인합니다. 진행 상황이 있는 경우 플레이어가 중단한 부분부터 다시 시작할 수 있도록 허용합니다. 자체 클라우드 저장 솔루션 또는 Play 게임즈 서비스의 저장된 게임을 사용할 수 있습니다.

사용자가 로그인하지 않은 경우 플레이어의 진행 상황을 로컬에 유지하도록 시도한 다음 플레이어가 마침내 로그인할 때 진행 상황을 동기화합니다. 이렇게 하면 플레이어가 게임에 바로 로그인하지 않아도 진행 상황이 손실되는 일을 방지할 수 있습니다.

2. 업적

다음 체크리스트에 포함된 작업은 게임에서 업적 기능을 구현하는 데 적용됩니다.

ID 중요도 설명
2.1 필수 모든 업적이 달성 가능한지 확인합니다.

플레이어는 개발자가 만든 모든 업적을 획득할 수 있어야 합니다.

2.2 권장사항 업적 구분

이미지, 텍스트, 설명은 모두 업적별로 달라야 합니다.

2.3 권장사항 업적 점수를 균형 있게 매깁니다.

업적 점수는 업적을 달성하는 데 필요한 시간이나 기술의 정도에 비례해야 합니다.

2.4 권장사항 다양한 난이도의 업적을 설계합니다.

플레이어가 캐주얼 게임을 플레이하여 얻을 수 있는 쉬운 업적 몇 개, 더 많은 기술이나 노력이 필요한 중간 난이도의 업적 여러 개, 가장 게임을 열심히 플레이하는 플레이어를 위한 매우 어려운 업적 1, 2개 정도를 준비합니다.

예를 들어, 다음 스크린샷에서는 플레이어들이 게임을 계속 플레이하도록 동기를 부여하고 팬층을 유지하기 위한 어려운 난이도의 업적을 확인할 수 있습니다.

보석 5,000개 획득을 요구하는, 달성하기 어려운 업적
2.5 참고사항 업적을 초반에 배치하지 않습니다.

게임플레이의 초반 5분 이내에 2개 이상의 업적을 제공하지 마세요. 게임을 처음 접하는 플레이어가 게임에 관심을 갖게 될 정도로 열심히 플레이하지 않게 되기 때문입니다.

의도치 않게 게임플레이 중 너무 초반에 업적이 부여되도록 만들지 마세요. 예를 들어 '피해를 입지 않고 레벨 완료'와 같이 게임 초반에 쉽게 얻게 될 가능성이 높은 업적은 피해야 합니다.

2.6 참고사항 매력적인 게임 내 활동과 관련된 업적을 정의합니다.

업적 달성을 유도할 수 있도록 게임에 한층 매력을 더하고 다시 플레이하고 싶어지게 만드는 측정항목을 선택합니다. 예를 들어 '죽은 좀비 숫자''캐릭터가 걸은 거리'보다 좀 더 흥미로운 측정항목입니다.

2.7 참고사항 색상 업적 아이콘을 사용합니다.

Google Play 게임즈 서비스에서는 그레이 스케일 버전의 업적 아이콘을 사용하여 업적 달성 여부를 표시합니다. 모든 업적 아이콘에 검은색 (또는 흰색)을 사용해야 하는 경우 색이 있는 배경에 아이콘을 표시하세요.

2.8 참고사항 숨겨진 업적 사용을 최소화합니다.

숨겨진 업적은 게임 내 스포일러를 피하기 위해서만 사용해야 하며 흔하게 사용해서는 안 됩니다.

2.9 참고사항 우연히 얻을 가능성이 높은 업적은 피합니다.

'보물상자 100개 찾기''보물상자에서 나올 확률이 1%인 아이템 찾기' 보다 나은 업적입니다.

2.10 참고사항 '업적 사냥꾼'의 입장에서 생각하세요.

개발자가 만드는 모든 업적을 얻으려고 시도하는 플레이어도 있습니다. 이러한 플레이어를 만족시킬 수 있는 업적을 제공하세요. 플레이어가 제어할 수 없는 요소에 너무 많이 의존하거나 플레이어가 게임 내에서 어떤 결정을 내린 후에는 얻을 수 없는 업적을 만들지 마세요.

2.11 참고사항 업적 아이콘이 올바르게 표시되는지 확인합니다.

업적 아이콘이 Android 토스트 메시지에 표시되면 아이콘이 동그라미와 겹쳐지면서 바깥쪽 모서리가 숨겨집니다. 이러한 상황에서도 아이콘이 보기 좋게 표시되는지 확인하세요.

3. 리더보드

다음 체크리스트에 포함된 작업은 게임에서 리더보드 기능을 구현하는 데 적용됩니다.

ID 중요도 설명
3.1 권장사항 기본 메뉴뿐만 아니라 핵심 전환 후에도 리더보드를 표시합니다.

리더보드는 게임이 로드되고 나서 간편하게 액세스할 수 있어야 합니다. 또한 레벨 끝부분에 도달하거나 플레이어가 죽었을 때와 같이 게임 내에서 중요한 전환이 발생했을 때, 플레이어가 즉시 관련 리더보드로 연결되는 링크를 볼 수 있어야 합니다.

3.2 권장사항 제출할 수 있는 점수의 상한선을 정의합니다.

가능하다면 허위가 분명한 점수가 삭제될 수 있도록 리더보드를 정의할 때 상한선을 추가하세요.

3.3 권장사항 맞춤 아이콘을 사용합니다.

정의하는 리더보드별로 맞춤 아이콘을 만듭니다. 게임 아이콘을 그대로 사용하지 마세요. 그러면 Google Play 게임 앱에서 제대로 표시되지 않습니다.

3.4 권장사항 점수 제출 빈도를 적절하게 유지합니다.

레벨 끝부분에 도달하거나 플레이어의 게임 캐릭터가 죽었을 때와 같이 게임에서 중요한 전환이 발생했을 때 점수를 제출합니다. 'Endless Runner' 유형의 게임과 같이 중요한 전환이 발생하지 않는 게임이라면 점수를 얼마나 자주 제출할지를 적절히 판단하시기 바랍니다. 점수를 계속해서 제출하거나 지나치게 자주 제출해서는 안 됩니다.

3.5 참고사항 스코어 태그를 활용합니다.

스코어 태그는 점수를 제출할 때 함께 보낼 수 있는 추가 데이터입니다. 예를 들어 플레이어가 제출한 점수가 유효한지 확인하는 플래그로 스코어 태그를 구현할 수 있습니다.

맞춤 리더보드에서도 이 태그 데이터를 읽을 수 있습니다. 예를 들어, 스코어 태그가 플레이어의 게임플레이가 포함된 YouTube 동영상의 ID로 구성된 경우, 리더보드 내에서 이 동영상을 볼 수 있는 링크를 만들 수 있습니다.

3.6 참고사항 독창적인 리더보드 UI를 디자인합니다.

리소스가 있는 경우, 맞춤 리더보드 뷰에 소셜 리더보드 데이터를 표시하세요. 일반적으로 소셜 리더보드가 공개 리더보드보다 사용자의 참여를 유도하는 데 더욱 효과적입니다. 먼저 소셜 리더보드에 포함된 항목이 있는지 확인하세요. 그렇지 않다면 공개 리더보드를 활용하세요.

3.7 참고사항 다른 플레이어와 비교한 실적을 보여 줍니다.

리더보드 API는 점수 창 표시 기능(예: 플레이어의 순위 위아래로 10위 정도까지 표시)을 지원합니다. 맞춤 뷰는 사용자의 참여를 유도하는 강력한 방법입니다. 또한 레벨의 끝에 도달하거나 플레이어의 게임 캐릭터가 죽었을 때와 같은 게임 내 중요한 전환이 발생했을 때 맞춤 뷰를 바로 표시할 수도 있습니다. 플레이어가 자신의 순위 정보를 확인하기 위해 불필요한 클릭을 하지 않도록 조정하세요.

4. 친구

다음 체크리스트에 포함된 작업은 게임에서 Friends API를 구현하는 데 적용됩니다.

ID 중요도 설명
4.1 필수 플레이어가 목록에 표시되면 Play 게임즈 프로필이 있는 사용자 옆에 Play 게임즈 아이콘을 표시합니다.

이 목록은 기존 친구 목록, 최근 재생한 친구 목록 또는 그 외 친구 목록일 수 있습니다.

4.1.1. Play 게임즈 아이콘은 클릭 가능해야 합니다.
사용자가 이 아이콘을 누르면 게임에서 getCompareProfileIntent() 또는 getCompareProfileIntentWithAlternativeNameHints()를 호출하여 사용자가 다른 플레이어와 프로필을 비교해 볼 수 있는 UI를 표시합니다.
4.1.2. 인게임 플레이어 이름을 맞춤설정할 수 있는 플레이어 프로필 및 친구 초대 지원
플레이어가 게임 내에서 자신의 Play 게임즈 프로필과 다른 이름을 설정하여 사용하는 경우, getCompareProfileIntentWithAlternativeNameHints()를 사용하여 현재 플레이어와 상대방 플레이어에게 인게임 대체 이름을 제공합니다. 그러면 프로필 조회 환경과 프로필에서 전송된 친구 초대에 대체 이름이 사용됩니다. 영구적인 전역 플레이어 이름만 값으로 전달하고 임의의 사용자 콘텐츠는 전달하지 않습니다. 이 요구사항을 따르면 게임 내에서 전송된 친구 초대를 통해 두 플레이어의 환경이 설정됩니다.
  • 받는 사람은 게임 이름과 함께 초대를 보낸 사람의 인게임 이름을 보게 됩니다.
  • 보낸 사람이 친구 상태를 확인하면 받는 사람의 인게임 이름과 초대를 보낸 게임이 표시됩니다.
4.2 권장사항 서로 다른 아이콘을 사용하여, 이미 친구인 Play 게임즈 사용자를 표시하고 아직 Play 게임즈 친구는 아니지만 Play 게임즈로 로그인한 사용자를 표시합니다. Play 게임즈 사용자에게는 두 개의 아이콘을 사용합니다. 즉, '친구'를 나타내는 아이콘 하나와 '친구 아님'을 나타내기 위한(또는 우정 상태를 알 수 없는 경우) 아이콘 하나를 사용합니다.
친구 아이콘
침구 아님 아이콘
4.3 권장사항 친구 목록이 최신 상태가 되도록 로그인할 때마다 loadFriends()를 호출하고 친구 목록을 표시합니다. 플레이어에게 업데이트된 목록이 표시되도록 합니다.
4.4 권장사항 게임에 이미 게임 내 친구가 포함되어 있다면 Friends API를 사용하여 Play 게임즈 친구를 추가하여 친구 목록을 늘리세요. 플레이어가 인게임 친구 목록에 있고 동시에 Play 게임즈 친구인 경우 '친구' 아이콘을 표시합니다.
4.5 권장사항 플레이어가 친구 목록에 대한 액세스 요청을 거부한 경우 사용자가 액세스 권한을 부여하기 위한 작업 (예: 'Play 게임즈 친구 가져오기' 버튼 누르기)을 취하지 않는 한 액세스를 요청하는 대화상자를 다시 표시하지 않습니다.
4.6 권장사항 플레이어가 친구 목록에 대한 액세스를 거부한 경우 나중에 친구 목록 액세스 권한을 부여할 수 있는 방법을 제공합니다 (예: 'Play 게임즈 친구 가져오기' 버튼 누르기).
4.7 권장사항 백엔드 서버에서 플레이어 ID나 친구 목록을 사용하는 경우 ID 또는 목록에 안전하게 액세스해야 합니다. 또한 이전의 게임과 플레이어의 경우 플레이어용 Android SDK에서 반환되는 플레이어 ID는 다른 플레이어가 동일한 게임에서 그 플레이어를 볼 때 보게 되는 ID와 다를 수 있습니다. 이는 친구 목록을 사용할 때 특히 관련 있습니다. 그러나 REST API 내에서 반환되는 player_id는 항상 일관적이며 항상 다른 플레이어에게 표시되는 ID입니다.

5. 할당량 및 비율 제한

다음 체크리스트에 포함된 작업은 게임에서 할당량 및 비율 한도를 관리하는 데 적용됩니다. 게임의 할당량을 관리하고 비율 한도 초과를 감지하는 방법을 알아보려면 할당량 및 비율 한도 관리를 참조하세요.

ID 중요도 설명
5.1 권장사항 클라이언트 라이브러리를 사용합니다.

모바일 클라이언트 라이브러리는 개발자가 서비스에 보내는 호출을 줄이기 위해 여러 가지 전략을 사용합니다. 예를 들어, 업적 및 리더보드 데이터가 캐시되어 서비스가 여러 차례 호출을 보내지 않아도 플레이어가 원할 때마다 자신의 업적을 확인할 수 있습니다.

Android 클라이언트 라이브러리는 플레이어의 점수가 최근 제출한 점수보다 좋지 않은 경우 점수를 서버에 전송하지 않습니다. 또한 비율 한도에 도달했음이 감지되면 Android 라이브러리가 높은 빈도의 업적 상승 호출을 자동으로 통합합니다.

5.2 참고사항 높은 빈도의 단계별 업적 호출을 통합합니다.

개발하고 있는 격투 게임에 '펀치 5,000번 날리기'라는 업적이 있다면 플레이어가 펀치를 날릴 때마다 업적 상승 호출을 보내지 마세요. 라운드가 종료될 때까지 기다린 다음 increment(xxx) 호출(xxx는 그 라운드에서 펀치를 날린 총 횟수)을 한 번 전송하거나, 펀치를 50번 날릴 때까지 기다렸다가 increment(50) 호출을 한 번 전송합니다.

5.3 참고사항 사용량을 파악합니다.

Google Play 게임즈 서비스에 보내는 호출 횟수를 파악합니다. 비율 한도에 걸리지 않더라도 호출을 자주 보내면 네트워크 트래픽이 증가하고 기기 배터리가 빨리 소모될 수 있습니다. 잦은 호출을 피하려면 다음 방법을 사용하세요.

  • 저장된 게임을 실행할 때 버튼을 클릭할 때마다가 아니라 몇 분마다 한 번씩 호출을 보냅니다.
  • 플레이어의 게임이 끝날 때까지 기다린 후에 최고점수를 제출합니다.
  • Google Cloud Platform의 프로젝트 대시보드에서 앱의 일일 할당량을 검토합니다.

6. 저장된 게임

다음 체크리스트에 포함된 작업은 게임에서 저장된 게임 기능을 구현하는 데 적용됩니다.

ID 중요도 설명
6.1 필수 메타데이터를 추가하여 저장된 게임에 관한 추가 컨텍스트를 제공합니다.

저장된 게임을 커밋하는 경우 최소한 다음의 메타데이터를 포함해야 합니다.

  • 표지 이미지 - 게임 진행 상황을 보여 주고 플레이어에게 마지막으로 플레이한 부분을 상기시켜 주는 스크린샷입니다.
  • 설명 - 표지 이미지에 관한 추가적인 컨텍스트를 제공하는 간단한 설명입니다.
  • 타임스탬프 - 플레이어가 이 저장된 게임을 얼마나 오랫동안 플레이했는지 나타냅니다.
6.2 필수 플레이어가 저장된 게임을 로드할 수 있게 합니다.

플레이어가 Play 게임즈 앱이나 기본 저장된 게임 선택 UI에서 저장된 게임을 선택하면 해당하는 게임을 정확히 로드합니다.