Google Play Games サービスの品質チェックリスト

ゲームの品質はインストール数、プレーヤーによる評価やレビュー、エンゲージメント、プレーヤーの継続率といった点でゲームの長期的な成功に影響します。ゲームを公開する前に、魅力的な機能や直感的で優れた UI デザインを提供し、ゲーム プレーヤーの基本的な期待値を満たせるよう準備することが重要です。

ゲームの成功に大きく影響する可能性のある品質、機能セット、UI といった主な要素を、このドキュメントでご確認いただけます。それぞれの最小要件、推奨、任意の改良項目をチェックリストにしてご紹介しています。プレーヤーに最良のサービスを提供できるよう、チェックリストにある推奨事項をできる限り取り入れることをおすすめします。

1. ログイン

ゲームにプレーヤーのログイン機能を実装する場合は、次のチェックリスト タスクをご利用ください。ログインの仕組みと実装方法の詳細については、ログインのコンセプトをご覧ください。モバイルゲームでログインを実装する方法に関するコード例について詳しくは、Android でのログインの実装をご覧ください。

ID 重要度 説明
1.1 必須 Google Play Games サービスでプレーヤーをログインさせる。
1.1.1. ゲームの起動時にプレーヤーを自動的にログインさせます。バックアップとして手動ログインを使用します。

ゲームでは、プレーヤーをすばやく認証して Google Play Games サービスで提供されるすべての機能を利用できるように、サイレント ログインを実装する必要があります。サイレント ログインに失敗した場合、対話形式でのログインを求めるプロンプトをプレーヤーに表示するようアプリを設定する必要があります。インタラクティブなログインを使用すると、プレーヤーはゲームへのログインを指定できます。また、Play Games によって、ゲームで使用できるようにプロフィールが正しく構成されます。サイレント ログインとインタラクティブ ログインを組み合わせることで、ユーザーの負担を最小限に抑えながら、ログイン率を最大化できます。

プレーヤーがログインを辞退した場合、この操作を記憶してプロンプトがプレーヤーに再び表示されないようにします。代わりに、ログインボタンをご用意ください。ログインボタンは、プレーヤーが簡単に見つけられるようにする必要があります。たとえば、メイン画面からアクセスできるようにするか、設定画面に配置する必要があります。ゲームメニューから複数の階層を経た場所には埋め込まないでください。ゲームを起動するたびに、引き続きプレーヤーの自動ログインを試みます。プレーヤーが設定を変更して自動的にログインする可能性があります。

1.2 必須 ログイン クライアントを作成するときに、Play Games 以外のスコープをリクエストしないでください。これにより、プレーヤーはゲームに自動的にログインできるようになります。Play Games 以外のスコープをリクエストすると、ユーザーはインタラクティブなログインを使用する必要があります。

Play Games 以外のスコープをすでにリクエストしている場合は、 GoogleSignInOptions 構文から不要なスコープと、使用していない API を削除します。他のスコープをリクエストする必要がある場合(マーケティング目的でユーザーのメールアドレスを確認する場合など)は、ログイン プロセスの一部としてではなく、関連するタイミングでリクエストしてください。

// This is the proper way to do it
GoogleSignInOptions signInOption = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
1.3 必須 プレーヤーのログイン状態を維持する。

プレーヤーがゲームに正常にログインした後は、プレーヤーが明示的にログアウトしない限り、ゲームが開始されるたびにプレーヤーを自動的に接続します。

1.4 必須 ログイン中に「接続中」ポップアップを正しく表示する。

Android デバイスでは、ログインフローが呼び出されるたびに Google Play Games の「接続中」ポップアップを表示する必要があります。これを行うには、GamesClient クラスの setViewForPopups() メソッドを呼び出す必要があります。ゲームの起動時にプレーヤーが自動的にログインする際に、このポップアップが表示されることを確認してください。これにより、プレーヤーはゲームに正しくログインしていることを認識できます。

次の例では、ログイン中に Android ゲームで「接続中」ポップアップが表示され、その後に続けて Google Play Games サービスのロゴの短いアニメーションが表示される様子を示しています。

「接続中」ポップアップが表示されたスクリーンショット
1.5 必須 ログアウトする方法をプレーヤーに提供する。

ログインしたプレーヤーには、ログアウト方法を必ず提供する必要があります。

アプリ内の関連するゲーム画面(プレーヤーの設定画面など)にログアウトボタンを配置することを検討してください。

1.6 ベスト プラクティス プレーヤーがログインを辞退したかどうかを記憶する。

ゲームの初回ログインフロー時にプレーヤーがログインを辞退した場合(ログイン UI で [キャンセル] をクリックした場合など)でも、プレーヤーが引き続きゲームをプレイできるようにします。

プレーヤーがゲームを再び起動したときに、インタラクティブなログインフローを自動的に呼び出さないようにします。これらのプレーヤーは、設定システムにある [ログイン] ボタンを使用して、後でログインすることもできます。呼び出さないようにすることで、プレーヤーはゲーム開始のたびにログインを繰り返し辞退する必要がなくなります。

ただし、プレーヤーがログイン必須のゲームプレイ機能(リーダーボードへのスコアの送信など)にアクセスを試みる場合は例外です。このような場合は、ゲームプレイを続ける前にログインを求めるプロンプトを表示します。

1.7 ベスト プラクティス ログインしているプレーヤーの数を最大にする。

多くのプレーヤーが Google Play Games サービスにログインすれば、ゲームプレイにおいて協力や競争の機会が増えるため、プレーヤーのメリットとなります。Google Play Games サービスにログインするプレーヤーの数を増やすには、前述のようにログイン プロンプトをプレーヤーに自動的に表示することを強くおすすめします。

または、次のいずれかの時点でプレーヤーをできるだけ早くログインフローに誘導します(推奨順)。

  • ゲーム開始直後
  • カットシーンやチュートリアルといった導入部の直後
  • プレーヤーがゲーム内の任意の場所で Google ログインボタンをクリックしたとき
1.8 任意 Google のブランドの取り扱いガイドラインを遵守する。

魅力的で一貫したエクスペリエンスをプレーヤーに提供できるよう、Google Play Games サービスのブランドの取り扱いガイドラインを適用してください。

1.9 任意 ログイン状態であることをプレーヤーに通知する。

ゲームで特定のアクションが自動的に実行される際に、ログインしているプレーヤーに対して適切な通知またはヒントを表示します。たとえば、ログイン プレーヤーが特定のレベルをクリアした場面で、次のようなメッセージを表示してスコアと実績が自動的にアップロードされることを伝えます: 「You are signed in with Google. Your achievements and scores will be saved automatically.(Google にログインしているため、実績とスコアは自動的に保存されます。)」

1.10 必須 Play ゲームサービス ID を使用してプレーヤーの進捗状況をバックアップする。

デバイスの切り替えやリセットをする、または複数のデバイスでプレイする際にプレーヤーの進捗状況が失われないようにするには、進捗状況をクラウド保存ソリューションにバックアップし、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.6 任意 魅力的なゲーム内アクティビティに関する実績を定義する。

ゲームの魅力を高め、もう一度プレイしたくなるような実績を構築できる指標を選択してください(たとえば、「倒したゾンビの数」は「キャラクターの歩数」よりも高い関心を得られる指標です)。

2.7 任意 色付きの実績アイコンを使用する。

Google Play Games サービスでは、実績を獲得済みかどうかを示すためにグレースケール バージョンの実績アイコンを使用します。真っ黒(または真っ白)の実績アイコンを使用しなければならない場合は、これらのアイコンを色付きの背景に表示します。

2.8 任意 非公開の実績の使用を最小限に抑える。

実績を非公開とするのはゲームのネタバレを避ける場合のみとし、標準的に実績を非公開にしないようにしてください。

2.9 任意 運に頼りすぎる実績は避ける。

「宝箱に入っている可能性が 1% のアイテムを見つける」実績よりも「宝箱を 100 個見つける」実績をおすすめします。

2.10 任意 「実績ハンター」の立場で考える。

中には、作成されたすべての実績を獲得しようとするプレーヤーもいます。このようなプレーヤーの要望に応える実績を用意するようにしてください。プレーヤーが制御できない要素に頼りすぎる、またはプレーヤーがゲーム中になんらかの決断を下した後は獲得できなくなる実績は作成しないでください。

2.11 任意 実績アイコンが正しく表示されることを確認する。

Android トーストで実績アイコンを表示すると、アイコンは円形で囲まれ、その外側の角は表示されなくなります。このような状態でも、アイコンがきれいに表示されることを確認してください。

3. リーダーボード

ゲームにリーダーボード機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
3.1 推奨 メインメニューと主な場面遷移の後にリーダーボードが表示されるようにする。

リーダーボードは、ゲームの読み込み時にすぐにアクセスできるようにします。ゲーム内で重大な場面遷移があった後(レベル終了時やプレーヤーの死亡時など)は、すぐに関連するリーダーボードへのリンクをプレーヤーに表示します。

3.2 推奨 送信できるスコアの上限を定義する。

可能であれば、スコアが明らかに虚偽である場合はリーダーボードの定義時に破棄されるよう制限を追加してください。

3.3 推奨 カスタム アイコンを使用する。

定義した各リーダーボードのカスタム アイコンを作成します。Google Play Games アプリでは表示の解像度が低下するため、ゲームのアイコンをそのまま使用しないでください。

3.4 推奨 スコア送信の頻度を適切に設定する。

レベルの終了時やプレーヤーのゲーム キャラクターの死亡時など、ゲーム内の重要な場面遷移の後にスコアを送信します。重要な場面遷移がないゲーム(「エンドレス ランナー」系のゲームなど)の場合は、スコアを送信する頻度を適切に判断してください。連続して、または毎秒スコアを送信することは避けます。

3.5 任意 スコアタグを利用する。

スコアタグとは、スコアの送信時に追加できるデータのことです。たとえば、プレーヤーの送信スコアが有効であることを確認するフラグとしてスコアタグを実装できます。

カスタム リーダーボードにも、このタグデータを読み込むことができます。スコアタグがプレーヤーのゲームプレイを含む YouTube 動画の ID で構成されている場合、ゲームのリーダーボード内にそのビデオを表示するためのリンクを作成することができます。

3.6 任意 独自のリーダーボード UI をクリエイティブに設計する。

リソースがある場合は、ソーシャル リーダーボード データ上に独自のカスタム リーダーボード ビューを作成します。通常、プレーヤーにとってソーシャル リーダーボードは公開リーダーボードよりも魅力的なものになります。まず、ソーシャル リーダーボードのエントリがあるかないかを確認し、ない場合は代わりに公開リーダーボードを使用してください。

3.7 任意 競争順位をプレーヤーに示す。

リーダーボードの API では、スコア ウィンドウの表示がサポートされています(例: +/-10 位以内のプレーヤーのランキング)。カスタムビューを作成している場合、これはプレーヤーのエンゲージメントを高めるのに有用です。スコア ウィンドウは、ゲームの重要な場面遷移(レベルの終了時やプレーヤーのゲーム キャラクターの死亡時など)の直後に表示できます。プレーヤーがクリックすることなく、ランキング情報を確認できるようにします。

4. フレンド機能

ゲームに Friends API を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
4.1 必須 プレーヤーがリストに表示されたときに、Play ゲーム プロフィールを持つユーザーの横に Play ゲーム アイコンを表示します。

このリストは、既存の友だちのリスト、最近プレイした友だちのリスト、またはその他の友だちのリストです。

4.1.1. Play Games アイコンがクリック可能であることが必要です。
ユーザーがアイコンを押した場合、ゲームは getCompareProfileIntent() または getCompareProfileIntentWithAlternativeNameHints() を呼び出して、ユーザーが他のプレーヤーのプロフィールと比較できる UI を表示する必要があります。
4.1.2. プレーヤーのプロフィールと友だち招待のサポート。これにより、カスタマイズ可能なゲーム内プレーヤー名を使用できます。
プレーヤーがゲーム内で別の名前を設定し、Play ゲーム プロフィール名を使用しない場合は、getCompareProfileIntentWithAlternativeNameHints() を使用し現在のプレーヤーと表示中のプレーヤーの両方に対して、プロフィール ビューとビューから送信される友だちの招待状のコンテキストとして、代わりにゲーム内名を指定するようにします。任意のユーザー コンテンツではなく、値に対して永続的でグローバルなプレーヤー名のみを渡します。この要件は、ゲーム内から送信された友だちの招待状が、両方のプレーヤーに対してコンテキストを指定することを表します。
  • 受信者には、招待状送信者のゲーム内名とゲーム名が表示されます。
  • フレンドシップを見ると、送信者には、受信者のゲーム内名や、招待元のゲームが引き続き表示されます。
4.2 推奨 さまざまなアイコンを使用して、どの Play ゲームのユーザーがすでに友だちになっているか、また Play ゲームの友だちではなくまだ Play ゲームにログインしていないかを示すことができます。「友だち」用に 1 つ、「友だち以外」(または、友だちステータスが不明な場合)用に 1 つの、Play ゲームユーザー用の 2 つのアイコンを使用します。
友だちアイコン
「友だち以外」アイコン
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) という呼び出しを 1 回送信します(xxx は該当するラウンドでユーザーが出したパンチの合計数です)。または、パンチが 50 回繰り出されるまで待ってから increment(50) という呼び出しを 1 回送信するようにします。

5.3 任意 使用量を常に意識する。

Google Play Games サービスの呼び出し回数に留意してください。レート上限への到達を回避しても、呼び出し頻度が高ければネットワーク トラフィックが増大し、デバイスのバッテリー消耗が加速する原因となる可能性があります。このような問題を回避するには、次のような方法があります。

  • 保存済みゲームを実行する場合は、ボタンをクリックするたびに保存するのではなく、数分に 1 回の頻度で保存する。
  • プレーヤーがゲームオーバーになるまで待ってからハイスコアを送信する。
  • Google Cloud Platform のプロジェクト ダッシュボードに移動して、アプリの 1 日あたりの割り当て量を確認する。

6. 保存済みゲーム

ゲームに保存済みゲーム機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
6.1 必須 保存済みゲームの追加のコンテキストを指定するメタデータを追加する。

保存済みゲームを commit する際は、少なくとも次のメタデータを追加する必要があります。

  • カバー画像 - ゲームの進行状況を記録し、ゲームを中断した場所がわかるスクリーンショット。
  • 説明 - カバー画像の情報を追加する簡単な説明。
  • タイムスタンプ - プレーヤーが保存済みゲームをプレイした時間の長さ。
6.2 必須 プレーヤーに保存済みゲームの読み込みを許可する。

プレーヤーが Play ゲームアプリ、またはデフォルトの保存済みゲーム選択 UI のいずれかから選択した場合に、正しい保存済みゲームを読み込みます。