Androidゲームでのリーダーボード



  • この記事は、Google Playゲームサービスに関する記事を和訳したものです。
  • 原文: Leaderboards in Android Game
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年7月ころです。

このガイドは、Androidアプリケーションにて、視覚的なリーダーボードを作成し、プレイヤーのスコアを記録し、スコアを以前のゲームセッションからのプレイヤーのスコアと比較するために、リーダーボード APIを使用する方法を示しています。 APIは com.google.android.gms.gamesおよび com.google.android.gms.games.leaderboardsパッケージにあります。

始める前に

もしまだそうしていなければ、リーダーボードのゲームコンセプトをレビューすることは役立つかもしれません。

リーダーボード APIを使用してコーディングし始める前に:

  • Google Playゲームサービスを使用するために、あなたのアプリをインストールし、セットアップするためのSet Up Google Play Services SDKガイドにある指示に従ってください。
  • Google Play Consoleのガイドの指示に従うことによって、あなたのゲームが表示あるいは更新したいリーダーボードを定義します。
  • Android samples pageにてリーダーボードのコードサンプルをダウンロードし、レビューします。
  • 品質チェックリストに記述された勧告をよく理解してください。

リーダーボードクライアントを取得する

リーダーボード APIを使用し始めるには、あなたのゲームは、まず LeaderboardsClientオブジェクトを取得しなければなりません。 Games.getLeadeboardsClient()メソッドを呼び出し、アクティビティと、現在のプレイヤーの GoogleSignInAccountを渡すことによって、これを行うことができます。 プレイヤーのアカウント情報を取得する方法については、Androidゲームでのサインインを参照してください。

プレイヤーのスコアを更新する

プレイヤーのスコアが変化したとき(例えば、プレイヤーがゲームを終えたとき)、あなたのゲームは、LeaderboardsClient.submitScore()を呼び出し、リーダーボード IDと生のスコア値を渡すことによって、彼らのリーダーボード上のスコアを更新することができます。

次のコードスニペットは、あなたのアプリがプレイヤーのスコアを更新する方法を示しています:

Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .submitScore(getString(R.string.leaderboard_id), 1337);

リーダーボード IDを strings.xmlファイルに定義することは良い習慣です、そうすれば、あなたのゲームはリーダーボードをリソース IDによって参照することができます。 プレイヤーのスコアを更新し読み込むための呼び出しをするときは、あなたの APIクォータを超えることを避けるために、これらの ベストプラクティスにも従ってください。

リーダーボードを表示する

リーダーボードを表示するには、デフォルトのリーダーボードユーザインタフェースを作成するための Intentを取得するために、LeaderboardsClient.getLeaderboardIntent()を呼び出します。 それから、あなたのゲームは startActivityForResultを呼び出すことによって、UIを起動することができます。

次のコードスニペットは、あなたのアプリがプレイヤーのスコアを更新する方法を示しています。 コードスニペットにて、RC_LEADERBOARD_UIは、リクエストコードのための任意の整数です。

private static final int RC_LEADERBOARD_UI = 9004;

private void showLeaderboard() {
  Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getLeaderboardIntent(getString(R.string.leaderboard_id))
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_LEADERBOARD_UI);
        }
      });
}

まったく結果が返されない場合であっても、私たちは、APIが呼び出し元のパッケージの識別子を取得できるように、startActivityForResultを使用しなければなりません。 デフォルトのリーダーボードの UIの一例を以下に示します。