Play Games PC SDK を使用してゲームを強化する

Play Games PC SDK を使用すると、Google Play サービスにアクセスして、PC でゲームを構築し、収益化できます。Play 請求サービスを使用してデジタル コンテンツを販売したり、Play Games を使用してシームレスにログインしたり、Play Integrity を使用してユーザーがアプリの有効な利用資格を持っていることを確認したりできます。

準備ができたら

前提条件

  • Google Play Console 内でアプリ エントリを作成し、Google Play パッケージ名を請求します。

  • PC 版 Google Play Games をダウンロードしてインストールし、Google アカウントでログインします。

ステップ 1: プロジェクトに SDK を追加する

C++

  • Play Games PC C++ SDK をダウンロードします。

  • API ヘッダー フォルダ includes/ をアプリケーションのコードベースにコピーします。

  • ターゲット アーキテクチャに応じて、再配布可能なファイルを imports/ ディレクトリからアプリケーションのプロジェクトにコピーします。

  • 64 ビット(x64)の場合: imports/x64/ からファイルをコピーします。

  • 32 ビット(x86)の場合: imports/x86/ からファイルをコピーします。

  • play_pc_sdk.lib に対してプロジェクトをリンクし、play_pc_sdk.dll のコンテンツへのアクセスを許可します。

C#

  • Play Games PC C# SDK を .unitypackage 形式でダウンロードします。

  • このファイルを Unity エディタの [Project] ウィンドウの Assets 領域に直接ドラッグ&ドロップします。

  • [Import Unity Package] ウィンドウが表示されます。すべてにチェックを入れたまま [Import] をクリックします。

  • SDK がインストールされ、Assets/Plugins/PlayPcSdkManaged フォルダにあります。

ステップ 2: マニフェスト ファイルを追加する

ゲーム内で SDK を使用する前に、ゲームの実行可能ファイルを、Google Play Console で申請した Google Play パッケージ名に関連付ける必要があります。そのためには、ゲームの実行可能ファイルと同じディレクトリに manifest.xml ファイルを追加します。

manifest.xml コンテンツの例:

<?xml version="1.0" encoding="utf-8"?>
<Manifest version="1">
    <Application>
        <PackageName>com.example.package</PackageName>
    </Application>
</Manifest>

manifest.xml の配置例:

C:\Program Files
└───Example Game
    ├───Game.exe
    └───manifest.xml

ステップ 3: ゲームにデジタル署名する

ゲームで SDK を使用する前に、Authenticode デジタル署名を使用してゲームの実行可能ファイルをデジタル署名する必要があります。実行可能ファイルに署名する方法については、SignTool のドキュメントをご覧ください。

ゲームのデジタル署名プロセスが完了したら、構成のために証明書情報を Google の担当者に送信します。

ステップ 4: SDK を初期化する

ゲームの起動シーケンス中に SDK を初期化します。これはユーザーの操作を必要とせずに自動的に行われる必要があります。ゲーム ウィンドウをレンダリングする前に、初期化が成功したことを確認することをおすすめします。これにより、エラーをできるだけ早く検出して解決することで、最高のユーザー エクスペリエンスを提供できます。また、ゲーム プロセスを終了する必要がある場合に、ゲーム ウィンドウが短時間表示されるのを防ぐことができます。

GooglePlayInitialize(C++)/ GooglePlayInitialization.InitializeAsync(C#)を呼び出して API を初期化し、SDK の使用を開始します。これにより、グローバル状態が設定され、SDK ランタイムに接続され、アプリケーションが正しく起動されたことが確認されます。他の API を使用する前に、このメソッドを呼び出し、継続コールバックを InitializeResult::ok()(C++)/ Result.IsOk(C#)が true に等しい状態で完了させなければなりません。

C++

  // Initialize the SDK as part of the startup sequence of your application.
  auto promise = std::make_shared<std::promise<InitializeResult>>();
  GooglePlayInitialize(
    [promise](InitializeResult result) {
      promise->set_value(std::move(result));
    });

  auto initialize_result = promise->get_future().get();
  if (initialize_result.ok()) {
    // The SDK succeeded with initialization. Continue with the startup sequence
    // of the game.
    // ...
  } else if (initialize_result.code() == InitializationError::kActionRequiredShutdownClientProcess) {
    // The SDK failed to initialize and has requested that your game process exit
    // as soon as possible.
    exit(1);
  } else {
    // The SDK failed to initialize for an alternative reason. It is still
    // generally recommended that you exit the game process as soon as possible,
    // because it won't be possible to access any APIs in the SDK. Critical
    // operations such as verifying the user owns a valid license to your game
    // won't be possible.
    // ...
  }

C#

  // SDK Clients
  private BillingClient _billingClient;
  private IntegrityClient _integrityClient;

  // Stored product information
  private string _offerToken;

  private async void InitializeSDK()
  {
      // The factory provides the necessary handler for initialization.
      var initializationHandler = PlayPcSdkFactory.InitializationHandler;
      var result = await GooglePlayInitialization.InitializeAsync(initializationHandler);

      if (result.IsOk)
      {
          // Use the factory to get Unity-compatible instances of the clients
          _billingClient = PlayPcSdkFactory.CreateBillingClient();
          _integrityClient = PlayPcSdkFactory.CreateIntegrityClient();

          // SDK is ready for use
      }
      else
      {
          // Handle specific, actionable errors
          if (result.Code == InitializationError.ActionRequiredShutdownClientProcess)
          {
              Log("This game must be launched through the Google Play Games client. Please exit all game processes immediately, GPG will relaunch the game safely.");
              Application.Quit();
          }
      }
  }

コード kActionRequiredShutdownClientProcess(C++)/ InitializationError.ActionRequiredShutdownClientProcess(C#)で初期化が失敗した場合は、できるだけ早くゲーム プロセスを終了します。SDK のランタイムは、ゲームで追加の操作を行う必要なく、ユーザーをサポートしようとします。たとえば、ユーザーがゲームの有効なライセンスを所有していない場合、Google Play Games はユーザーにコピーの購入を促します。他のエラーの場合も、SDK を使用して、ユーザーがゲームの有効なライセンスを所有していることを確認するなどの重要なオペレーションを実行できないため、ゲーム プロセスを終了する必要があります。

成功以外のレスポンスは、次のいずれかの条件を示している可能性があります。

  • SDK ランタイムがインストールされていない、デバイスで実行されていない、またはゲームに統合された SDK と互換性のない古いバージョンである。

  • SDK ランタイムでゲームのアプリケーション ID を確認できませんでした。これは、manifest.xml が無効であるか、開発時に デベロッパー モードを有効にせずに SDK を使用していることが原因である可能性があります。これがない場合、ゲームの実行可能ファイルは、Google Play パッケージ名に登録されたデジタル証明書でデジタル署名されている必要があります。

  • ゲームの実行可能ファイルが Google Play ゲーム クライアントから起動されなかった。

  • Google Play ゲームのアクティブ ユーザーが、アプリのライセンスを所有していない。

ステップ 5: (省略可)複数のゲームプロセスをサポートする

ゲームが複数のプロセスを使用しており、PC 版 Google Play Games によって起動されるプロセスとは別のプロセスで Play Games PC SDK が使用されている場合は、次の追加の統合手順を完了します。たとえば、PC 版 Google Play Games がゲームのランチャーを起動し、そのランチャーが SDK とやり取りするゲームプロセスを開始する場合などです。

  1. PC 版 Google Play Games によって直接起動されるプロセスは、Play Games PC SDK の初期化が成功したことを確認する必要があります。

    これにより、エラーをできるだけ早く検出して、最適なユーザー エクスペリエンスを提供できます。SDK を使用する子プロセスも、直接起動されたプロセスに加えて初期化を行う必要があります。

  2. 子プロセスで Play Games PC SDK を使用するには、コマンドライン パラメータを生成された子プロセスに転送します。

    コマンドライン パラメータの転送の例:

    Processes hierarchy tree:
    
    GooglePlayGames.exe
    └───YourGameLauncher.exe --gpg_args=abc --your_args=123
        └───YourGame.exe --gpg_args=abc --your_args=123
    

    この例では、PC 版 Google Play Games(GooglePlayGames.exe)がいくつかのサンプル パラメータ(--gpg_args=abc --your_args=123)を使用してゲーム(YourGameLauncher.exe)を起動するプロセス階層を示しています。その後、ゲームは Play Games PC SDK を使用する子プロセス(YourGame.exe)を生成します。これを可能にするため、PC 版 Google Play Games によって起動されたゲームプロセスは、与えられたコマンドライン パラメータを子プロセスに転送します。

  3. ゲームの実行が停止したら、すべてのプロセスを終了します。

    ユーザーがゲームを終了した場合や、kActionRequiredShutdownClientProcess などの SDK の初期化の失敗によりゲームが終了した場合は、ゲームが生成したすべてのプロセスを終了します。これにより、次回 PC 版 Google Play Games クライアントでゲームが起動されたときに、別のアクティブ アカウントへの切り替えなどの新しい変更が有効になります。

次のステップ

IDE で開発中に SDK を使用する:

アプリに Google Play PC の機能を追加します。