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

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

今後の機能、安定版リリース、統合アーキテクチャの概要については、PC 版 Google Play Games のロードマップをご覧ください。

準備ができたら

前提条件

  • 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#

ステップ 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 の使用を開始します。初期化時に GooglePlayInitializeParams でゲームの Android パッケージ名を渡すことをおすすめします。これにより、グローバル状態が設定され、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>>();
GooglePlayInitializeParams params;
// Replace with your game's package name.
params.package_name = "com.example.game";
GooglePlayInitialize(
  [promise] (InitializeResult result) {
    promise->set_value(std::move(result));
  }, params);

auto initialize_result = promise->get_future().get();
if (initialize_result.ok()) {
  // The SDK succeeded with initialization. Continue with the startup
  // sequence of the game.
  // ...

  // Retrieve the operating environment and device form factor.
  auto env = initialize_result.value().environment;
  auto form_factor = initialize_result.value().form_factor;
  // ...
} 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 initializeParams = new GooglePlayInitializeParams {
        // Replace with your game's package name.
        PackageName = "com.example.game"
    };
    var result = await GooglePlayInitialization.InitializeAsync(
        initializationHandler, initializeParams);

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

        // Retrieve the operating environment and device form factor.
        var env = result.Value.Environment;
        var form_factor = result.Value.FormFactor;

        // 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. 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 Games のアクティブ ユーザーが、アプリのライセンスを所有していない。

ステップ 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 の機能を追加します。