v2 ネイティブ C または C++ を設定する

このドキュメントでは、v2 ネイティブ C または C++ 用に C++ プロジェクトを設定し、認証サービスを検証する方法について説明します。

準備

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

アプリの前提条件

アプリのビルドファイルで次の値が使用されていることを確認します。

  • minSdkVersion19 以上
  • compileSdkVersion28 以上

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

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

build.gradle を更新する

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

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

  • v2 Native SDK(ベータ版)の依存関係を追加します。

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

次の例をご覧ください。

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

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)

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 関数を呼び出します。

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