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 任意 ログイン状態であることをプレーヤーに通知する。

ゲームで特定のアクションが自動的に実行される際に、ログインしているプレーヤーに対して適切な通知またはヒントを表示します。たとえば、ログイン プレーヤーが特定のレベルをクリアした場面で、次のようなメッセージを表示してスコアと実績が自動的にアップロードされることを伝えます: 「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 ゲームサービスでは、実績を獲得済みかどうかを示すためにグレースケール バージョンの実績アイコンを使用します。真っ黒(または真っ白)の実績アイコンを使用しなければならない場合は、これらのアイコンを色付きの背景に表示します。

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

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

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

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

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

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

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

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

3.リーダーボード

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

ID 重要度 説明
3.1 ベスト プラクティス メインメニューと主な場面遷移の後にリーダーボードが表示されるようにする。

リーダーボードは、ゲームの読み込み時に簡単にアクセスできる必要があります。ゲームで重要な遷移を行った後(レベルの終了時やプレーヤーが死亡したときなど)、関連するリーダーボードへのリンクが直ちに表示されます。

3.2 ベスト プラクティス 送信できるスコアの上限を定義する。

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

3.3 ベスト プラクティス カスタム アイコンを使用する。

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

3.4 ベスト プラクティス スコア送信の頻度を適切に設定する。

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

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 ゲームにログインしていないかを示すことができます。「友だち」用に 1 つ、「友だち以外」(または、友だちステータスが不明な場合)用に 1 つの、Play ゲームユーザー用の 2 つのアイコンを使用します。
友だちアイコン
「友だち以外」アイコン
4.3 ベスト プラクティス ログインするたびに loadFriends() を呼び出して友だちのリストを表示し、友だちリストが最新の状態であるようにします。更新されたリストがプレーヤーに表示されるようにします。
4.4 ベスト プラクティス ゲームにすでにゲーム内の友だちが含まれている場合は、友だち 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 ゲームサービスの呼び出し回数に留意してください。レート上限への到達を回避しても、呼び出し頻度が高ければネットワーク トラフィックが増大し、デバイスのバッテリー消耗が加速する原因となる可能性があります。このような問題を回避するには、次のような方法があります。

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

6. 保存済みゲーム

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

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

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

  • カバー画像 - ゲームの進行状況をキャプチャし、プレーヤーがゲームを離れた場所を確認するスクリーンショット。
  • 説明 - 表紙の画像に追加のコンテキストを提供する短い説明。
  • タイムスタンプ - プレーヤーが保存済みゲームをプレイした時間の長さ。
6.2 必須 プレーヤーに保存済みゲームの読み込みを許可する。

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