ゲームの試用版の実装

注意

一部の試用版は無料ですが、特定のサブスクリプションを所有するユーザーに限定されます。 このトピックは、これらの試用版にも適用されます。

ゲームには、さまざまな種類の無料試用版を構成できます。

  • 時間制限付きの無料試用版 - この試用版は、カレンダーの一定期間が経過した後 (たとえば、試用時間に関係なく、ユーザーが試用版をダウンロードしてから 7 日後など) に期限切れになります。
  • 使用制限付き無料試用版 - ユーザーは一定時間ゲームを実行でき、引き続き使用し続ける場合はゲームを購入する必要があります。
  • カスタマイズした試用版 - これらの試用版は、期限またはゲーム実行時間の制限がありませんが、プレイ可能範囲を制限できます。 これはデモと似ていますが、ゲーム全体をダウンロードする必要があります。

パートナー センターで使用制限付き試用版を構成する

注意

この機能には、適切なアクセス許可があり、ゲームで 制限付きライセンスが使用されている場合にのみアクセスできます。 詳細については、Microsoft の担当アカウント マネージャーにお問い合わせください。

使用制限付き無料試用版はパートナー センターで、ゲームのコードを変更することなく構成できます。 ただし、次のシナリオでは、コードを追加する必要があります。

  • 試用版を入手したユーザーにアクセスを制限する
  • 複数回のプレイ セッション間でゲームの状態をセーブしたい場合。試用版の取得に使用されたのと同じ Microsoft アカウントでゲームが購入された場合、セーブ データは引き継がれます。
  1. [申請] ページから [価格と提供の状況] ページに移動します。

  2. [無料試用版] でドロップダウン メニューを開き、[使用制限] を選択します。

  3. 2 番目に表示されるドロップダウン メニューで、ユーザーがアプリを使用できる最大時間を選択します。

  4. [保存] を選択します。

Microsoft Store にゲームを公開すると、ゲームの製品ページに試用版の情報が表示されます。

試用版を入手したユーザーにアクセスを制限する

試用版の所有者のみがゲームを実行できるようにすることが必要な場合もあります。 これは、プレイヤーのアカウントで別のプレイヤーが試用時間を使わないようにしたいため、使用制限付き無料試用版では特に重要です。 この機能は、XStoreGameLicense.isTrialOwnedByThisUser プロパティをオンにすることによって実装できます。 これが false の場合、現在のプレイヤーは継続できないまたは少なくとも自分の試用版を取得するように通知されます。

アクティブな試用版ライセンスを所有しているユーザーには、試用版ゲームを起動しときに次のメッセージが表示されます。

使用制限付き試用版 TCUI:「<ゲーマータグ>、残り x 時間未満」

isTrialOwnedByThisUser の確認方法を、次のコードで示します。

void CALLBACK GameLicenseTrialCheck(XAsyncBlock* asyncBlock)
{
    XStoreGameLicense result{};

    HRESULT hr = XStoreQueryGameLicenseResult(
        asyncBlock,
        &result);

    // Is this a trial?
    if (result.isActive && result.isTrial)
    {
        // Is this trial owned by this user?  
        if (!result.isTrialOwnedByThisUser)
        {
            // The user can't use another user's trial time. Show an error message.
        }
    }
}

void Sample::QueryGameLicense(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
    auto async = new XAsyncBlock{};
    async->context = this;
    asyncBlock->queue = m_asyncQueue;
    asyncBlock->callback = GameLicenseTrialCheck;

    HRESULT hr = XStoreQueryGameLicenseAsync(
        storeContextHandle,
        async);
}

元の試用版ユーザーのゲーム状態を保存する

シングル プレイヤー キャンペーンがある Xbox サービス対応のゲームまたはセッション間の進捗状況を追跡するその他のゲーム モードは、接続ストレージを使用してゲームの状態を保存します。 ただし、制限付き試用版では、PC のユーザーは、複数の Microsoft アカウントを作成し、時間制限を超えても (同じ Xbox アカウントを使用して) 進行状況を保存しながらプレイを続けることができます。 この PC シナリオの詳細については、「PC で一致しないストア アカウントを処理するシナリオ」をご覧ください。

これは、ゲームの進捗状況が保存されたときに XStoreGameLicense.trialUniqueId 値を保存することで回避できます。 その後は、ユーザーが試用版でプレイを再開するときに、trialUniqueId 値が最初に実行したものと一致するかどうかをチェックできます。

このコードは、ゲームがゲーム セーブの一部として trialUniqueId を保存することを前提としています。この値を返す GetSavedTrialUniqueId 関数があります。

void CALLBACK GameLicenseTrialCheck(XAsyncBlock* asyncBlock)
{
    XStoreGameLicense result{};

    HRESULT hr = XStoreQueryGameLicenseResult(
        asyncBlock,
        &result);

    // Is this a trial?
    if (result.isActive && result.isTrial)
    {
        // Is this trial owned by this user?
        if (!result.isTrialOwnedByThisUser)
        {
            // The user can't use another user's trial time. Show an error message.
        }
        else
        {
            // Read the trialUniqueId that was saved with the game on the first run.
            char trialUniqueId = GetSavedTrialUniqueId();
            if (trialUniqueId != result.trialUniqueId)
            {
                // Because the IDs don't match, start the game from the beginning.
            }
        }
    }
}

開発中の試用版のテスト

試用版ライセンスを使用してゲームをテストするには、まず、パートナー センターで試用版ライセンスを使用してゲームを構成する必要があります。

Xbox

ルーズ ビルドの場合は、MicrosoftGameConfig でコンテンツ ID と EKBID のオーバーライドを適用します。 詳細については、「ライセンス テストの有効化」を参照してください。 トライアル ビルドの実際の EKBID をここで使用する必要があることに注意してください。

  <DevelopmentOnly>
    <ContentIdOverride>2797FA46-A93B-494C-AD80-B67C9FCA939F</ContentIdOverride>
    <EKBIDOverride>37E80840-6BE0-46F8-8EDB-92F877056087</EKBIDOverride>
  </DevelopmentOnly>

実際の EKBID は、試用版ライセンスを持つアカウントを使用して、Microsoft Store からゲーム ビルドをダウンロードして取得します。

[無料試用版のインストール] ボタンが強調表示されている試用版の PDP

起動チャンクが到達した後、xbapp list /d または xbapp getekbid を使用して EKBID を探します。

> xbapp list /d

  41336MicrosoftATG.InGameStoreXS_2020.7.27.0_neutral__dspnxghe87tn0
        Install
        Drive: Development
        Size: 0.28 GB
        ContentId: {2797FA46-A93B-494C-AD80-B67C9FCA939F}
        ProductId: {4C544E39-5130-3044-C057-5A3446536A00}
        EKBID: {37E80840-6BE0-46F8-8EDB-92F877056087}
        DisplayName: ATG In-Game Store Sample
        41336MicrosoftATG.InGameStoreXS_dspnxghe87tn0!Game

> xbapp getekbid 41336MicrosoftATG.InGameStoreXS_dspnxghe87tn0!Game

{37E80840-6BE0-46F8-8EDB-92F877056087}
The operation completed successfully.

パッケージ ビルドでは、コンテンツ ID は makepkg 経由で渡され、パッケージ ビルドが xbapp setekbid を使用してインストールされた後に EKBID が設定されます。

これらを構成し、ストアから試用版ライセンスを取得したテスト アカウントを使用している場合、 XStoreGameLicense は正確な試用版属性を示します。 ビルドを起動すると、上記のような試用版通知が表示されます。

PC

完全版のライセンスのビルドを有効化する方法と同じです。MicrosoftGame.config で正しいアプリ ID を使用し、レジストリの場所に正しいコンテンツ ID があることを確認します。ビルドは、Microsoft Store アプリ、試用版またはその他のサインインされているアカウントライセンスを優先します。

関連項目

コマースの概要

XStore の開発とテストの有効化

ライセンス テストの有効化

XStore API リファレンス