C と C++ 向け Play ゲームサービスのスタートガイド

このガイドでは、ネイティブ C または C++ ゲーム プロジェクトをセットアップして Play Games サービス v2 Native SDK を使用し、ログイン サービスを統合する方法について説明します。他の Play ゲームサービス機能をゲームに統合したり、Play ゲームサービスをバックエンド ゲームサーバーに統合するにはログインの統合が必要です。

サポートされる機能

Play ゲームサービス v2 Native SDK はベータ版であり、ログイン サービスのみをサポートしています。他の Play ゲームサービス機能はまだサポートしていません。

API リファレンス ドキュメント

SDK のヘッダー ファイルには、API のリファレンス ドキュメントが含まれています。ヘッダー ファイルは、SDK ファイルの include フォルダにあります。SDK ファイルは、プロジェクトを SDK リポジトリと同期した後に使用できます。

要件

  • ネイティブ C または C++ を主要なプログラミング言語として使用するゲーム プロジェクト。

  • ゲーム プロジェクトと開発環境には、Gradle ビルドシステムを設定する必要があります。

はじめに

Google Play Console で Play ゲームサービスをセットアップする必要があります。

ゲーム プロジェクトをセットアップする

以下の手順でゲーム プロジェクトをセットアップします。

CMakeLists.txt を更新する

CMakeLists.txt ファイルに、次のコードを追加します。

  find_package(com.google.android.gms.games.v2.c REQUIRED CONFIG)

  // link games_static for -DANDROID_STL=c++_static or default
  // link games_shared for -DANDROID_STL=c++_shared
  target_link_libraries(
    app PUBLIC com.google.android.gms.games.v2.c::games_static)

build.gradle を更新する

アプリレベルの build.gradle ファイルで、次の手順を行います。

  • prefab ビルド機能を有効にします。

  • Play ゲームサービス v2 Native SDK の依存関係を追加します。

    • com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1

次の例をご覧ください。

  android {
    ...
    buildFeatures {
      prefab true
    }
    ...
  }
  dependencies {
    ...
    implementation "com.google.android.gms:play-services-games-v2-native-c:17.0.0-beta1"
  }

AndroidManifest.xml を更新する

  1. AndroidManifest.xml ファイルで、Play ゲームサービスのプロジェクト ID を定義します。これを行うには、ファイルに以下の行を追加します。

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    
  2. プロジェクト ID の文字列リソースを作成します。これにより、ビルド時にゲームが ID にアクセスできるようになります。リソースを作成するには、project_root/app/src/main/res/values/games-ids.xml ファイルを作成して、以下を追加します。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="game_services_project_id"
                translatable="false">add your Project ID here</string>
    </resources>
    
  3. ゲームをビルドし、テストします。成功した場合は、ゲームの起動時にログイン プロンプトまたは成功を示すログインバナーが表示されます。

プレーヤー ID を取得する

ゲームはプレーヤー ID を取得することで、ログイン中のプレーヤーのプレーヤー情報にアクセスできます。プレーヤー ID を取得するには、次の例に示すように GetPlayerID 関数を呼び出します。

#include <assert.h>
#include "gni/gni.h"
#include "gni/gni_task.h"
#include "pgs/pgs_play_games.h"
#include "pgs/pgs_players_client.h"

// A callback for a GniTask returned from PgsPlayersClient_getCurrentPlayerId.
void OnGetCurrentPlayerIdCompleteCallback(GniTask *task, void *user_data) {

   if (!GniTask_isSuccessful(task)) {
      const char *error_message = nullptr;
      GniTask_getErrorMessage(task, &error_message);

      // Log error message here.

      GniString_destroy(error_message);
      GniTask_destroy(task);
      return;
   }

   const char *result = nullptr;
   PgsPlayersClient_getCurrentPlayerId_getResult(task, &result);

   // Log player id here.

   GniString_destroy(result);
   GniTask_destroy(task);
}

// Gets the player ID.
void GetPlayerId(jobject main_activity) {
   static const PgsPlayersClient *players_client =
           PgsPlayGames_getPlayersClient(main_activity);

   GniTask *get_current_player_id_task =
           PgsPlayersClient_getCurrentPlayerId(players_client);
   assert(get_current_player_id_task != nullptr);
   GniTask_addOnCompleteCallback(get_current_player_id_task,
                                 OnGetCurrentPlayerIdCompleteCallback,
                                 nullptr);
}

// Entry point for our test app
void TestPGSNative(JNIEnv *env, jobject main_activity) {
   JavaVM *java_vm;
   env->GetJavaVM(&java_vm);

   GniCore_init(java_vm, main_activity);

   GetPlayerId(main_activity);
}

ログイン プロンプトを再起動する

ゲームの起動時に自動的に表示される Play ゲームサービスの初回のログイン プロンプトをプレーヤーが拒否した場合でも、ゲーム セッション中にプレーヤーの気が変わることがあります。現在ログインしているプレーヤーがいなければ、PgsGamesSignInClient_signIn を呼び出すことでログイン プロンプトを再起動できます。

ゲームサーバーの認証

プレーヤーが Play ゲームサービスへのログインに成功すると、ゲーム クライアントはサーバー認証コードをリクエストできます。このコードはバックエンド ゲームサーバーが Play ゲームサービスと安全に通信するために使用されます。これにより、ゲームサーバーはログインしているプレーヤーのデータを取得、更新、保存できます。サーバー認証コードを取得するには、PgsGamesSignInClient_requestServerSideAccess 関数を呼び出します。

詳細については、サーバーのアクセスガイドをご覧ください。