Windows.ApplicationModel.Store 名前空間を使用するアプリ内購入と試用版In-app purchases and trials using the Windows.ApplicationModel.Store namespace

Windows.ApplicationModel.Store 名前空間のメンバーを使って、ユニバーサル Windows プラットフォーム (UWP) アプリにアプリ内購入機能や試用版機能を追加し、アプリの収益化に役立てることができます。You can use members in the Windows.ApplicationModel.Store namespace to add in-app purchases and trial functionality to your Universal Windows Platform (UWP) app to help monetize your app. このような API では、アプリのライセンス情報にもアクセスできます。These APIs also provide access to the license info for your app.

このセクションの記事では、いくつかの一般的なシナリオにおいて Windows.ApplicationModel.Store 名前空間のメンバーを使用するための詳しいガイダンスとコード例を示します。The articles in this section provide in-depth guidance and code examples for using the members in the Windows.ApplicationModel.Store namespace for several common scenarios. UWP アプリのアプリ内での購入に関する基本概念の概要については、「アプリ内購入と試用版」をご覧ください。For an overview of basic concepts related to in-app purchases in UWP apps, see In-app purchases and trials. Windows.ApplicationModel.Store 名前空間を使用した試用版とアプリ内購入の実装方法を示す完全なサンプルについては、ストア サンプルをご覧ください。For a complete sample that demonstrates how to implement trials and in-app purchases using the Windows.ApplicationModel.Store namespace, see the Store sample.

重要

Windows.ApplicationModel.Store 名前空間は今後更新されず、新機能も追加されません。The Windows.ApplicationModel.Store namespace is no longer being updated with new features. Visual Studio でプロジェクトのターゲットを Windows 10 Anniversary Edition (10.0、ビルド 14393) 以降のリリースに設定している (つまり、Windows 10 Version 1607 以降をターゲットとしている) 場合は、代わりに Windows.Services.Store 名前空間を使うことをお勧めします。If your project targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio (that is, you are targeting Windows 10, version 1607, or later), we recommend that you use the Windows.Services.Store namespace instead. 詳しくは、「アプリ内購入と試用版」をご覧ください。For more information, see In-app purchases and trials. Windows.ApplicationModel.Store 名前空間は、デスクトップ ブリッジを使う Windows デスクトップ アプリケーションや、デベロッパー センターの開発サンドボックスを使うアプリまたはゲーム (たとえば、Xbox Live と統合されるゲームがすべて該当します) ではサポートされません。The Windows.ApplicationModel.Store namespace is not supported in Windows desktop applications that use the Desktop Bridge or in apps or games that use a development sandbox in Dev Center (for example, this is the case for any game that integrates with Xbox Live). このような製品では、Windows.Services.Store 名前空間を使ってアプリ内購入と試用版を実装する必要があります。These products must use the Windows.Services.Store namespace to implement in-app purchases and trials.

CurrentApp クラスと CurrentAppSimulator クラスの概要Get started with the CurrentApp and CurrentAppSimulator classes

Windows.ApplicationModel.Store 名前空間へのメイン エントリ ポイントは、CurrentApp クラスです。The main entry point to the Windows.ApplicationModel.Store namespace is the CurrentApp class. このクラスには、現在のアプリとその利用可能なアドオンに関する情報の取得、現在のアプリまたはそのアドオンに関するライセンス情報の取得、現在のユーザー向けのアプリまたはアドオンの購入、およびその他のタスクを行う際に使用できる静的プロパティおよびメソッドが用意されています。This class provides static properties and methods you can use to get info for the current app and its available add-ons, get license info for the current app or its add-ons, purchase an app or add-on for the current user, and perform other tasks.

CurrentApp クラスは Microsoft Store からデータを取得するため、アプリ内でこのクラスを使うには、開発者が開発者アカウントを持っていて、アプリが Microsoft Store で公開されている必要があります。The CurrentApp class obtains its data from the Microsoft Store, so you must have a developer account and the app must be published in the Store before you can successfully use this class in your app. アプリをまだ Microsoft Store に提出していない場合は、このクラスのシミュレートされたバージョンである CurrentAppSimulator を使ってコードをテストすることができます。Before you submit your app to the Store, you can test your code with a simulated version of this class called CurrentAppSimulator. アプリのテストが完了したら、Microsoft Store に提出する前に CurrentAppSimulator のインスタンスを CurrentApp に置き換える必要があります。After you test your app, and before you submit it to the Microsoft Store, you must replace the instances of CurrentAppSimulator with CurrentApp. アプリで CurrentAppSimulator が使用されている場合は、認定が不合格になります。Your app will fail certification if it uses CurrentAppSimulator.

CurrentAppSimulator を使う場合、アプリのライセンスとアプリ内製品の初期状態は、開発コンピューター上にある WindowsStoreProxy.xml という名前のローカル ファイルに記述されています。When the CurrentAppSimulator is used, the initial state of your app's licensing and in-app products is described in a local file on your development computer named WindowsStoreProxy.xml. このファイルについて詳しくは、「CurrentAppSimulator での WindowsStoreProxy.xml ファイルの使用」をご覧ください。For more information about this file, see Using the WindowsStoreProxy.xml file with CurrentAppSimulator.

CurrentAppCurrentAppSimulator を使って実行できる一般的なタスクについて詳しくは、次の記事をご覧ください。For more information about common tasks you can perform using CurrentApp and CurrentAppSimulator, see the following articles.

トピックTopic 説明Description
試用版での機能の除外または制限Exclude or limit features in a trial version ユーザーがアプリを無料で使うことができる試用期間を設け、その期間中は一部の機能を除外または制限することで、アプリを通常版にアップグレードするようユーザーに促すことができます。If you enable customers to use your app for free during a trial period, you can entice your customers to upgrade to the full version of your app by excluding or limiting some features during the trial period.
アプリ内製品購入の有効化Enable in-app product purchases アプリが無料であるかどうかにかかわらず、コンテンツ、その他のアプリ、アプリの新機能 (ゲームの次のレベルのロック解除など) をアプリ内から直接販売できます。Whether your app is free or not, you can sell content, other apps, or new app functionality (such as unlocking the next level of a game) from right within the app. ここでは、アプリ内で製品を販売できるようにする方法について説明します。Here we show you how to enable these products in your app.
コンシューマブルなアプリ内製品購入の有効化Enable consumable in-app product purchases ストアの商取引プラットフォームを使ってコンシューマブルなアプリ内製品 (購入、使用、再購入が可能なアイテム) をサポートすると、堅牢かつ信頼性の高いアプリ内購入エクスペリエンスを顧客に提供できます。Offer consumable in-app products—items that can be purchased, used, and purchased again—through the Store commerce platform to provide your customers with a purchase experience that is both robust and reliable. これは、購入して、特定のパワーアップを購入するために使うことができるゲーム内通貨 (ゴールド、コインなど) 用に特に便利です。This is especially useful for things like in-game currency (gold, coins, etc.) that can be purchased and then used to purchase specific power-ups.
アプリ内製品の大規模なカタログの管理Manage a large catalog of in-app products アプリ内製品のカタログが大きくなる場合、カタログを管理するためにこのトピックで説明するプロセスを採用できます。If your app offers a large in-app product catalog, you can optionally follow the process described in this topic to help manage your catalog.
受領通知を使った製品購入の確認Use receipts to verify product purchases 製品購入が成功した各 Microsoft Store トランザクションでは、必要に応じてトランザクションの通知を返し、掲載製品と料金についての情報をユーザーに提供できます。Each Microsoft Store transaction that results in a successful product purchase can optionally return a transaction receipt that provides information about the listed product and monetary cost to the customer. この情報は、ユーザーがアプリを購入したことや、Microsoft Store からアプリ内製品の購入が行われたことをアプリで確認する必要がある場合に役立ちます。Having access to this information supports scenarios where your app needs to verify that a user purchased your app, or has made in-app product purchases from the Microsoft Store.

CurrentAppSimulator での WindowsStoreProxy.xml ファイルの使用Using the WindowsStoreProxy.xml file with CurrentAppSimulator

CurrentAppSimulator を使う場合、アプリのライセンスとアプリ内製品の初期状態は、開発コンピューター上にある WindowsStoreProxy.xml という名前のローカル ファイルに記述されています。When the CurrentAppSimulator is used, the initial state of your app's licensing and in-app products is described in a local file on your development computer named WindowsStoreProxy.xml. CurrentAppSimulator メソッドは、ライセンスの購入やアプリ内での購入処理などに応じてアプリの状態を変更しますが、更新されるのはメモリ内の CurrentAppSimulator オブジェクトの状態のみです。CurrentAppSimulator methods that alter the app's state, for example by buying a license or handling an in-app purchase, only update the state of the CurrentAppSimulator object in memory. WindowsStoreProxy.xml の内容は変更されません。The contents of WindowsStoreProxy.xml are not changed. アプリを再起動すると、ライセンスの状態は、WindowsStoreProxy.xml に記述されている内容に戻ります。When the app starts again, the license state reverts to what is described in WindowsStoreProxy.xml.

WindowsStoreProxy.xml ファイルは、既定で %UserProfile%\AppData\Local\Packages\<Local\Packages>\LocalState\Microsoft\Windows Store\ApiData に作成されます。A WindowsStoreProxy.xml file is created by default at the following location: %UserProfile%\AppData\Local\Packages\<app package folder>\LocalState\Microsoft\Windows Store\ApiData. このファイルを編集して、シミュレートするシナリオを CurrentAppSimulator プロパティで定義できます。You can edit this file to define the scenario that you want to simulate in the CurrentAppSimulator properties.

このファイルの値を変更することは可能ですが、直接変更するのではなく、独自の WindowsStoreProxy.xml ファイルを (Visual Studio プロジェクトのデータ フォルダーに) 作成し、CurrentAppSimulator で使うことをお勧めします。Although you can modify the values in this file, we recommend that you create your own WindowsStoreProxy.xml file (in a data folder of your Visual Studio project) for CurrentAppSimulator to use instead. トランザクションをシミュレートするには、ReloadSimulatorAsync を呼び出して、作成したファイルを読み込みます。When simulating the transaction, call ReloadSimulatorAsync to load your file. ReloadSimulatorAsync を呼び出して独自の WindowsStoreProxy.xml ファイルを読み込まない場合、CurrentAppSimulator は既定の WindowsStoreProxy.xml ファイルを作成して読み込みます (上書きはしません)。If you do not call ReloadSimulatorAsync to load your own WindowsStoreProxy.xml file, CurrentAppSimulator will create/load (but not overwrite) the default WindowsStoreProxy.xml file.

注意

CurrentAppSimulator は、ReloadSimulatorAsync が完了するまで完全には初期化されません。Be aware that CurrentAppSimulator is not fully initialized until ReloadSimulatorAsync completes. ReloadSimulatorAsync は非同期メソッドであるため、1 つのスレッドで CurrentAppSimulator が照会されているときに、別のスレッドでそれが初期化されているといった競合状態が起こらないように注意する必要があります。And, since ReloadSimulatorAsync is an asynchronous method, care should be taken to avoid the race condition of querying CurrentAppSimulator on one thread while it is being initialized on another. これにはフラグを使って初期化の完了を示すのも 1 つの方法です。One technique is to use a flag to indicate that initialization is complete. Microsoft Store からインストールされるアプリでは、CurrentAppSimulator ではなく CurrentApp を使う必要があります。これにより、ReloadSimulatorAsync が呼び出されなくなり、そのような競合状態は発生しなくなります。An app that is installed from the Microsoft Store must use CurrentApp instead of CurrentAppSimulator, and in that case ReloadSimulatorAsync is not called and therefore the race condition just mentioned does not apply. このため、コードは同期と非同期の両方で動作するように設計する必要があります。For this reason, design your code so that it will work in both cases, both asychronously and synchronously.

Examples

以下の例では、試用モードのアプリを記述する WindowsStoreProxy.xml ファイル (UTF-16 エンコード) を示します。このアプリは、2015 年 1 月 19 日午前 5 時 (UTC) に試用モードの有効期限が切れます。This example is a WindowsStoreProxy.xml file (UTF-16 encoded) that describes an app with a trial mode that expires at 05:00 (UTC) on Jan. 19, 2015.

<?xml version="1.0" encoding="UTF-16"?>
<CurrentApp>
  <ListingInformation>
    <App>
      <AppId>2B14D306-D8F8-4066-A45B-0FB3464C67F2</AppId>
      <LinkUri>http://apps.windows.microsoft.com/app/2B14D306-D8F8-4066-A45B-0FB3464C67F2</LinkUri>
      <CurrentMarket>en-US</CurrentMarket>
      <AgeRating>3</AgeRating>
      <MarketData xml:lang="en-us">
        <Name>App with a trial license</Name>
        <Description>Sample app for demonstrating trial license management</Description>
        <Price>4.99</Price>
        <CurrencySymbol>$</CurrencySymbol>
      </MarketData>
    </App>
  </ListingInformation>
  <LicenseInformation>
    <App>
      <IsActive>true</IsActive>
      <IsTrial>true</IsTrial>
      <ExpirationDate>2015-01-19T05:00:00.00Z</ExpirationDate>
    </App>
  </LicenseInformation>
  <Simulation SimulationMode="Automatic">
    <DefaultResponse MethodName="LoadListingInformationAsync_GetResult" HResult="E_FAIL"/>
  </Simulation>
</CurrentApp>

次の例では、購入済みのアプリを記述する WindowsStoreProxy.xml ファイル (UTF-16 エンコード) を示します。このアプリには、2015 年 1 月 19 日午前 5 時 (UTC) に有効期限が切れる機能と、コンシューマブルなアプリ内での購入があります。The next example is a WindowsStoreProxy.xml file (UTF-16 encoded) that describes an app that has been purchased, has a feature that expires at 05:00 (UTC) on Jan. 19, 2015, and has a consumable in-app purchase.

<?xml version="1.0" encoding="utf-16" ?>
<CurrentApp>
  <ListingInformation>
    <App>
      <AppId>988b90e4-5d4d-4dea-99d0-e423e414ffbc</AppId>
      <LinkUri>http://apps.windows.microsoft.com/app/988b90e4-5d4d-4dea-99d0-e423e414ffbc</LinkUri>
      <CurrentMarket>en-us</CurrentMarket>
      <AgeRating>3</AgeRating>
      <MarketData xml:lang="en-us">
        <Name>App with several in-app products</Name>
        <Description>Sample app for demonstrating an expiring in-app product and a consumable in-app product</Description>
        <Price>5.99</Price>
        <CurrencySymbol>$</CurrencySymbol>
      </MarketData>
    </App>
    <Product ProductId="feature1" LicenseDuration="10" ProductType="Durable">
      <MarketData xml:lang="en-us">
        <Name>Expiring Item</Name>
        <Price>1.99</Price>
        <CurrencySymbol>$</CurrencySymbol>
      </MarketData>
    </Product>
    <Product ProductId="consumable1" LicenseDuration="0" ProductType="Consumable">
      <MarketData xml:lang="en-us">
        <Name>Consumable Item</Name>
        <Price>2.99</Price>
        <CurrencySymbol>$</CurrencySymbol>
      </MarketData>
    </Product>
  </ListingInformation>
  <LicenseInformation>
    <App>
      <IsActive>true</IsActive>
      <IsTrial>false</IsTrial>
    </App>
    <Product ProductId="feature1">
      <IsActive>true</IsActive>
      <ExpirationDate>2015-01-19T00:00:00.00Z</ExpirationDate>
    </Product>
  </LicenseInformation>
  <ConsumableInformation>
    <Product ProductId="consumable1" TransactionId="00000001-0000-0000-0000-000000000000" Status="Active"/>
  </ConsumableInformation>
</CurrentApp>

スキーマSchema

このセクションでは、WindowsStoreProxy.xml ファイルの構造を定義する XSD ファイルを示します。This section lists the XSD file that defines the structure of the WindowsStoreProxy.xml file. WindowsStoreProxy.xml ファイルで作業するときに、このスキーマを Visual Studio の XML エディターに適用するには、次の操作を行います。To apply this schema to the XML editor in Visual Studio when working with your WindowsStoreProxy.xml file, do the following:

  1. Visual Studio で WindowsStoreProxy.xml ファイルを開きます。Open the WindowsStoreProxy.xml file in Visual Studio.
  2. [XML] メニューの [スキーマの作成] をクリックします。On the XML menu, click Create Schema. XML ファイルの内容に基づいて、WindowsStoreProxy.xsd 一時ファイルが作成されます。This will create a temporary WindowsStoreProxy.xsd file based on the contents of the XML file.
  3. その .xsd ファイルの内容を下記のスキーマと置き換えます。Replace the contents of that .xsd file with the schema below.
  4. 複数のアプリ プロジェクトに適用できる場所に、作成したファイルを保存します。Save the file to a location where you can apply it to multiple app projects.
  5. Visual Studio で、この WindowsStoreProxy.xml ファイルに切り替えます。Switch to your WindowsStoreProxy.xml file in Visual Studio.
  6. [XML] メニューで [スキーマ] をクリックし、一覧から WindowsStoreProxy.xsd ファイルの行を探します。On the XML menu, click Schemas, then locate the row in the list for the WindowsStoreProxy.xsd file. ファイルの場所が適切でない場合 (たとえば、一時ファイルがまだ表示されている場合) は、[追加] をクリックします。If the location for the file is not the one you want (for example, if the temporary file is still shown), click Add. 適切なファイルに移動し、[OK] をクリックします。Navigate to the right file, then click OK. 一覧にそのファイルが表示されます。You should now see that file in the list. そのスキーマの [使用] ** 列にチェックマークが入っていることを確認します。Make sure a checkmark appears in the **Use column for that schema.

この操作を完了すると、WindowsStoreProxy.xml に加えた変更内容がスキーマに適用されます。Once you've done this, edits you make to WindowsStoreProxy.xml will be subject to the schema. 詳しくは、「方法: 使用する XML スキーマを選択する」をご覧ください。For more information, see How to: Select the XML Schemas to Use.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
  <xs:element name="CurrentApp" type="CurrentAppDefinition"></xs:element>
  <xs:complexType name="CurrentAppDefinition">
    <xs:sequence>
      <xs:element name="ListingInformation" type="ListingDefinition" minOccurs="1" maxOccurs="1"/>
      <xs:element name="LicenseInformation" type="LicenseDefinition" minOccurs="1" maxOccurs="1"/>
      <xs:element name="ConsumableInformation" type="ConsumableDefinition" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Simulation" type="SimulationDefinition" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="ResponseCodes">
    <xs:restriction base="xs:string">
      <xs:enumeration value="S_OK">
        <xs:annotation>
          <xs:documentation>0x00000000</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="E_INVALIDARG">
        <xs:annotation>
          <xs:documentation>0x80070057</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="E_CANCELLED">
        <xs:annotation>
          <xs:documentation>0x800704C7</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="E_FAIL">
        <xs:annotation>
          <xs:documentation>0x80004005</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="E_OUTOFMEMORY">
        <xs:annotation>
          <xs:documentation>0x8007000E</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="ERROR_ALREADY_EXISTS">
        <xs:annotation>
          <xs:documentation>0x800700B7</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ConsumableStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Active"/>
      <xs:enumeration value="PurchaseReverted"/>
      <xs:enumeration value="PurchasePending"/>
      <xs:enumeration value="ServerError"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="StoreMethodName">
    <xs:restriction base="xs:string">
      <xs:enumeration value="RequestAppPurchaseAsync_GetResult" id="RPPA"/>
      <xs:enumeration value="RequestProductPurchaseAsync_GetResult" id="RFPA"/>
      <xs:enumeration value="LoadListingInformationAsync_GetResult" id="LLIA"/>
      <xs:enumeration value="ReportConsumableFulfillmentAsync_GetResult" id="RPFA"/>
      <xs:enumeration value="LoadListingInformationByKeywordsAsync_GetResult" id="LLIKA"/>
      <xs:enumeration value="LoadListingInformationByProductIdAsync_GetResult" id="LLIPA"/>
      <xs:enumeration value="GetUnfulfilledConsumablesAsync_GetResult" id="GUC"/>
      <xs:enumeration value="GetAppReceiptAsync_GetResult" id="GARA"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SimulationMode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Interactive"/>
      <xs:enumeration value="Automatic"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ListingDefinition">
    <xs:sequence>
      <xs:element name="App" type="AppListingDefinition"/>
      <xs:element name="Product" type="ProductListingDefinition" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ConsumableDefinition">
    <xs:sequence>
      <xs:element name="Product" type="ConsumableProductDefinition" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="AppListingDefinition">
    <xs:sequence>
      <xs:element name="AppId" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="LinkUri" type="xs:anyURI" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CurrentMarket" type="xs:language" minOccurs="1" maxOccurs="1"/>
      <xs:element name="AgeRating" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
      <xs:element name="MarketData" type="MarketSpecificAppData" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="MarketSpecificAppData">
    <xs:sequence>
      <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Description" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Price" type="xs:float" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CurrencySymbol" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CurrencyCode" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute ref="xml:lang" use="required"/>
  </xs:complexType>
  <xs:complexType name="MarketSpecificProductData">
    <xs:sequence>
      <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Price" type="xs:float" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CurrencySymbol" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CurrencyCode" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Tag" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Keywords" type="KeywordDefinition" minOccurs="0" maxOccurs="1"/>
      <xs:element name="ImageUri" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute ref="xml:lang" use="required"/>
  </xs:complexType>
  <xs:complexType name="ProductListingDefinition">
    <xs:sequence>
      <xs:element name="MarketData" type="MarketSpecificProductData" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="ProductId" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="100"/>
          <xs:pattern value="[^,]*"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LicenseDuration" type="xs:integer" use="optional"/>
    <xs:attribute name="ProductType" type="xs:string" use="optional"/>
  </xs:complexType>
  <xs:simpleType name="guid">
    <xs:restriction base="xs:string">
      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ConsumableProductDefinition">
    <xs:attribute name="ProductId" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="100"/>
          <xs:pattern value="[^,]*"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="TransactionId" type="guid" use="required"/>
    <xs:attribute name="Status" type="ConsumableStatus" use="required"/>
    <xs:attribute name="OfferId" type="xs:string" use="optional"/>
  </xs:complexType>
  <xs:complexType name="LicenseDefinition">
    <xs:sequence>
      <xs:element name="App" type="AppLicenseDefinition"/>
      <xs:element name="Product" type="ProductLicenseDefinition" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="AppLicenseDefinition">
    <xs:sequence>
      <xs:element name="IsActive" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="IsTrial" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="ExpirationDate" type="xs:dateTime" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ProductLicenseDefinition">
    <xs:sequence>
      <xs:element name="IsActive" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="ExpirationDate" type="xs:dateTime" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="ProductId" type="xs:string" use="required"/>
    <xs:attribute name="OfferId" type="xs:string" use="optional"/>
  </xs:complexType>
  <xs:complexType name="SimulationDefinition" >
    <xs:sequence>
      <xs:element name="DefaultResponse" type="DefaultResponseDefinition" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="SimulationMode" type="SimulationMode" use="optional"/>
  </xs:complexType>
  <xs:complexType name="DefaultResponseDefinition">
    <xs:attribute name="MethodName" type="StoreMethodName" use="required"/>
    <xs:attribute name="HResult" type="ResponseCodes" use="required"/>
  </xs:complexType>
  <xs:complexType name="KeywordDefinition">
    <xs:sequence>
      <xs:element name="Keyword" type="xs:string" minOccurs="0" maxOccurs="10"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

要素と属性の説明Element and attribute descriptions

このセクションでは、WindowsStoreProxy.xml ファイル内の要素と属性について説明します。This section describes the elements and attributes in the WindowsStoreProxy.xml file.

このファイルのルート要素は、現在のアプリを表す CurrentApp要素です。The root element of this file is the CurrentApp element, which represents the current app. この要素には、次の子要素が含まれます。This element contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
ListingInformationListingInformation 必須Yes 11 アプリの登録情報のデータが含まれています。Contains data from the app's listing.
LicenseInformationLicenseInformation 必須Yes 11 このアプリで利用可能なライセンスと永続的なアドオンが記述されています。Describes the licenses available for this app and its durable add-ons.
ConsumableInformationConsumableInformation 必須ではないNo 0 または 10 or 1 このアプリで利用可能なコンシューマブルなアドオンが記述されています。Describes the consumable add-ons that are available for this app.
SimulationSimulation 必須ではないNo 0 または 10 or 1 テストで、さまざまな CurrentAppSimulator メソッドを呼び出したときに行われる動作が記述されています。Describes how calls to various CurrentAppSimulator methods will work in the app during testing.

ListingInformation 要素ListingInformation element

この要素には、アプリの登録情報のデータが含まれています。This element contains data from the app's listing. ListingInformation は、CurrentApp 要素の必須の子要素です。ListingInformation is a required child of the CurrentApp element.

ListingInformation には、次の子要素が含まれます。ListingInformation contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
AppApp 必須Yes 11 アプリに関するデータを提供します。Provides data about the app.
ProductProduct 必須ではないNo 0 以上0 or more アプリのアドオンを記述します。Describes an add-on for the app.

App 要素 (ListingInformation の子要素)App element (child of ListingInformation)

この要素は、アプリのライセンスを記述します。This element describes the app's license. App は、ListingInformation 要素の必須の子要素です。App is a required child of the ListingInformation element.

App には、次の子要素が含まれます。App contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
AppIdAppId 必須Yes 11 ストアでアプリを識別する GUID です。The GUID that identifies the app in the Store. テストでは任意の GUID を使用できます。This can be any GUID for testing.
LinkUriLinkUri 必須Yes 11 ストアの登録情報ページの URI です。The URI of the listing page in the store. テストでは任意の有効な URI を使用できます。This can be any valid URI for testing.
CurrentMarketCurrentMarket 必須Yes 11 顧客の国/地域です。The customer's country/region.
AgeRatingAgeRating 必須Yes 11 アプリの年齢区分の下限を表す整数です。An integer that represents the minimum age rating of the app. アプリの提出時にデベロッパー センター ダッシュ ボードで指定する値と同じ数値です。This is the same value you would specify in the Dev Center dashboard when you submit the app. ストアで使われる値は、3、7、12、および 16 です。The values used by the Store are: 3, 7, 12, and 16. これらの年齢区分について詳しくは、「年齢区分」をご覧ください。For more info on these ratings, see Age ratings.
MarketDataMarketData 必須Yes 1 以上1 or more アプリに関する特定の国/地域向けの情報が含まれています。Contains info about the app for a given country/region. アプリが掲載される国/地域ごとに、MarketData要素を含める必要があります。For each country/region in which the app is listed, you must include a MarketData element.

MarketData 要素 (App の子要素)MarketData element (child of App)

この要素は、アプリに関する特定の国/地域向けの情報を提供します。This element provides info about the app for a given country/region. アプリが掲載される国/地域ごとに、MarketData要素を含める必要があります。For each country/region in which the app is listed, you must include a MarketData element. MarketData は、App 要素の必須の子要素です。MarketData is a required child of the App element.

MarketData には、次の子要素が含まれます。MarketData contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
NameName 必須Yes 11 この国/地域でのアプリの名前です。The name of the app in this country/region.
DescriptionDescription 必須Yes 11 この国/地域向けのアプリの説明です。The description of the app for this country/region.
PricePrice 必須Yes 11 この国/地域でのアプリの価格です。The price of the app in this country/region.
CurrencySymbolCurrencySymbol 必須Yes 11 この国/地域で使われている通貨記号です。The currency symbol used in this country/region.
CurrencyCodeCurrencyCode 必須ではないNo 0 または 10 or 1 この国/地域で使われている通貨コードです。The currency code used in this country/region.

MarketData には次の属性があります。MarketData has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
xml:langxml:lang 必須Yes 市場データ情報を適用する国/地域を指定します。Specifies the country/region for which the market data info applies.

Product 要素 (ListingInformation の子要素)Product element (child of ListingInformation)

この要素は、アプリのアドオンを記述します。This element describes an add-on for the app. Product は、ListingInformation 要素のオプションの子要素であり、1 つ以上の MarketData 要素が含まれます。Product is an optional child of the ListingInformation element, and it contains one or more MarketData elements.

Product には次の属性があります。Product has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
ProductIdProductId 必須Yes アプリがこのアドオンを特定するために使う文字列が含まれています。Contains the string used by the app to identify the add-on.
LicenseDurationLicenseDuration 必須ではないNo アイテム購入後、ライセンスが有効な日数を示します。Indicates the number of days for which the license will be valid after the item has been purchased. 製品の購入によって作成される新しいライセンスの有効期限は、購入日にライセンス期間を加算した日付です。The expiration date of the new license created by a product purchase is the purchase date plus the license duration. この属性は、ProductType 属性が Durable の場合のみ使用され、コンシューマブルなアドオンの場合には無視されます。This attribute is used only if the ProductType attribute is Durable; this attribute is ignored for consumable add-ons.
ProductTypeProductType 必須ではないNo アプリ内製品が永続的かどうかを識別する値が含まれています。Contains a value to identify the persistence of the in-app product. サポートされている値は、Durable (既定) と Consumable です。The supported values are Durable (the default) and Consumable. 永続的なアドオンについて詳しくは、LicenseInformation の下の Product要素をご覧ください。コンシューマブルなアドオンについて詳しくは、ConsumableInformationProduct 要素をご覧ください。For durable types, additional information is described by a Product element under LicenseInformation; for consumable types, additional information is described by a Product element under ConsumableInformation.

MarketData 要素 (Product の子要素)MarketData element (child of Product)

この要素は、アドオンに関する特定の国/地域向けの情報を提供します。This element provides info about the add-on for a given country/region. アドオンが掲載される国/地域ごとに、MarketData要素を含める必要があります。For each country/region in which the add-on is listed, you must include a MarketData element. MarketData は、Product 要素の必須の子要素です。MarketData is a required child of the Product element.

MarketData には、次の子要素が含まれます。MarketData contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
NameName 必須Yes 11 この国/地域でのアドオンの名前です。The name of the add-on in this country/region.
PricePrice 必須Yes 11 この国/地域でのアドオンの価格です。The price of the add-on in this country/region.
CurrencySymbolCurrencySymbol 必須Yes 11 この国/地域で使われている通貨記号です。The currency symbol used in this country/region.
CurrencyCodeCurrencyCode 必須ではないNo 0 または 10 or 1 この国/地域で使われている通貨コードです。The currency code used in this country/region.
説明Description 必須ではないNo 0 または 10 or 1 この国/地域向けのアドオンの説明です。The description of the add-on for this country/region.
TagTag 必須ではないNo 0 または 10 or 1 アドオンのカスタム開発者データ (タグとも呼ばれます) です。The custom developer data (also called tag) for the add-on.
KeywordsKeywords 必須ではないNo 0 または 10 or 1 アドオンのキーワードが含まれた最大 10 個の Keyword 要素を含みます。Contains up to 10 Keyword elements that contain the keywords for the add-on.
ImageUriImageUri 必須ではないNo 0 または 10 or 1 アドオンの登録情報に表示する画像の URI です。The URI for the image in the add-on's listing.

MarketData には次の属性があります。MarketData has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
xml:langxml:lang 必須Yes 市場データ情報を適用する国/地域を指定します。Specifies the country/region for which the market data info applies.

LicenseInformation 要素LicenseInformation element

この要素は、このアプリで利用可能なライセンスと永続的なアプリ内製品を記述します。This element describes the licenses available for this app and its durable in-app products. LicenseInformation は、CurrentApp 要素の必須の子要素です。LicenseInformation is a required child of the CurrentApp element.

LicenseInformation には、次の子要素が含まれます。LicenseInformation contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
AppApp 必須Yes 11 アプリのライセンスを記述します。Describes the app's license.
ProductProduct 必須ではないNo 0 以上0 or more アプリ内の永続的なアドオンのライセンスの状態を記述します。Describes the license status of a durable add-on in the app.

次の表では、App 要素と Product 要素の下で値を組み合わせて、いくつかの一般的な条件をシミュレートする方法を示します。The following table shows how to simulate some common conditions by combining values under the App and Product elements.

シミュレートする条件Condition to simulate IsActiveIsActive IsTrialIsTrial ExpirationDateExpirationDate
完全なライセンスを保有Fully licensed truetrue falsefalse 指定しません。Absent. 実際には有効期限が存在し、将来の日付を指定する場合でも、その要素は XML ファイルから省略することをお勧めします。It actually may be present and specify a future date, but you're advised to omit the element from the XML file. 有効期限が存在し、過去の日付が指定されている場合、IsActive は無視され、false として扱われます。If it is present and specifies a date in the past, then IsActive will be ignored and taken to be false.
試用期間中In trial period truetrue truetrue <将来の日付と時刻> IsTrial が true であるため、この要素を指定する必要があります。<a datetime in the future> This element must be present because IsTrial is true. 残りの試用期間に対応する有効期限は、現在の協定世界時 (UTC) を表示する Web サイトにアクセスして確認できます。You can visit a website showing the current Coordinated Universal Time (UTC) to know how far in the future to set this to get the remaining trial period you want.
有効期限が切れた試用版Expired trial falsefalse truetrue <過去の日付と時刻> IsTrial が true であるため、この要素を指定する必要があります。<a datetime in the past> This element must be present because IsTrial is true. UTC で表した "過去の" 有効期限は、現在の協定世界時 (UTC) を表示する Web サイトにアクセスして確認できます。You can visit a website showing the current Coordinated Universal Time (UTC) to know when "the past" is in UTC.
ライセンスが無効Invalid falsefalse falsefalse <任意の値または省略><any value or omitted>

App 要素 (LicenseInformation の子要素)App element (child of LicenseInformation)

この要素は、アプリのライセンスを記述します。This element describes the app's license. App は、LicenseInformation 要素の必須の子要素です。App is a required child of the LicenseInformation element.

App には、次の子要素が含まれます。App contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
IsActiveIsActive 必須Yes 11 このアプリの現在のライセンスの状態を記述します。Describes the current license state of this app. true はライセンスが有効であることを示し、false はライセンスが無効であることを示します。The value true indicates the license is valid; false indicates an invalid license. この値はアプリが使用モードであるかどうかに関係なく、通常、true です。Normally this value is true, whether the app has a trial mode or not. ライセンスが無効な場合にアプリがどのように動作するかをテストするには、この値を false に設定します。Set this value to false to test how your app behaves when it has an invalid license.
IsTrialIsTrial 必須Yes 11 このアプリが現在、試用期間中かどうかの状態を記述します。Describes the current trial state of this app. true はアプリが試用期間中であることを示します。false は、アプリが購入済みであるか、試用期限が切れたために、アプリが試用期間中でないことを示します。The value true indicates the app is being used during the trial period; false indicates the app is not in a trial, either because the app has been purchased or the trial period has expired.
ExpirationDateExpirationDate 必須ではないNo 0 または 10 or 1 このアプリの試用期間が期限切れとなる日付 (協定世界時 (UTC)) です。The date the trial period for this app expires, in Coordinated Universal Time (UTC). 日付は、yyyy-mm-ddThh:mm:ss.ssZ の形式で表す必要があります。The date must be expressed as: yyyy-mm-ddThh:mm:ss.ssZ. たとえば、2015 年 1 月 19 日午前 5 時は、2015-01-19T05:00:00.00Z と表します。For example, 05:00 on January 19, 2015 would be specified as 2015-01-19T05:00:00.00Z. この要素は、IsTrialtrue の場合に必須です。This element is required when IsTrial is true. そうでない場合は、必須ではありません。Otherwise, it is not required.

Product 要素 (LicenseInformation の子要素)Product element (child of LicenseInformation)

この要素は、アプリ内の永続的なアドオンのライセンスの状態を記述します。This element describes the license status of a durable add-on in the app. Product は、LicenseInformation 要素のオプションの子要素です。Product is an optional child of the LicenseInformation element.

Product には、次の子要素が含まれます。Product contains the following child elements.

要素Element 必須かどうかRequired 数量Quantity 説明Description
IsActiveIsActive 必須Yes 11 このアドオンの現在のライセンスの状態を記述します。Describes the current license state of this add-on. true はアドオンを追加できることを示し、false はアドオンを使用できないか、購入していないことを示します。The value true indicates the add-on can be used; false indicates the add-on cannot be used or has not been purchased
ExpirationDateExpirationDate 必須ではないNo 0 または 10 or 1 協定世界時 (UTC) で表したアドオンの有効期限日です。The date the add-on expires, in Coordinated Universal Time (UTC). 日付は、yyyy-mm-ddThh:mm:ss.ssZ の形式で表す必要があります。The date must be expressed as: yyyy-mm-ddThh:mm:ss.ssZ. たとえば、2015 年 1 月 19 日午前 5 時は、2015-01-19T05:00:00.00Z と表します。For example, 05:00 on January 19, 2015 would be specified as 2015-01-19T05:00:00.00Z. この要素が存在する場合、アドオンには有効期限日があります。If this element is present, the add-on has an expiration date. 存在しない場合、アドオンに有効期限はありません。If it's not present, the add-on does not expire.

Product には次の属性があります。Product has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
ProductIdProductId 必須Yes アプリがこのアドオンを特定するために使う文字列が含まれています。Contains the string used by the app to identify the add-on.
OfferIdOfferId 必須ではないNo アプリが、このアドオンが属するカテゴリを特定するために使う文字列が含まれています。Contains the string used by the app to identify the category in which the add-on belongs. これを使うことで、「アプリ内製品の大規模なカタログの管理」で説明されている大規模なアイテムのカタログに対応できます。This provides support for large item catalogs, as described in Manage a large catalog of in-app products.

Simulation 要素Simulation element

この要素は、テストにおいて、さまざまな CurrentAppSimulator メソッドへの呼び出しがどのように動作するかを記述します。This element describes how calls to various CurrentAppSimulator methods will work in the app during testing. SimulationCurrentApp 要素のオプションの子要素であり、0 個以上の DefaultResponse 要素が含まれます。Simulation is an optional child of the CurrentApp element, and it contains zero or more DefaultResponse elements.

Simulation には次の属性があります。Simulation has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
SimulationModeSimulationMode 必須ではないNo 値は InteractiveAutomatic のいずれかです。Values can be Interactive or Automatic. この属性を Automatic に設定すると、指定した HRESULT エラー コードがメソッドによって自動的に返されます。When this attribute is set to Automatic, the methods will automatically return the specified HRESULT error codes. これは自動化されたテスト ケースを実行する場合に使用できます。This can be used when running automated test cases.

DefaultResponse 要素DefaultResponse element

この要素は、CurrentAppSimulator メソッドによって返される既定のエラー コードを記述します。This element describes the default error code returned by a CurrentAppSimulator method. DefaultResponse は、Simulation 要素のオプションの子要素です。DefaultResponse is an optional child of the Simulation element.

DefaultResponse には次の属性があります。DefaultResponse has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
MethodNameMethodName 必須Yes この属性は、スキーマStoreMethodName 型で表示される列挙値のいずれかに割り当てます。Assign this attribute to one of the enum values shown for the StoreMethodName type in the schema. これらの各列挙値は、テストのときにアプリでエラー コードの戻り値をシミュレートする CurrentAppSimulator メソッドを表します。Each of these enum values represents a CurrentAppSimulator method for which you want to simulate an error code return value in your app during testing. たとえば、値 RequestAppPurchaseAsync_GetResult は、RequestAppPurchaseAsync メソッドのエラー コードの戻り値をシミュレートすることを示します。For example, the value RequestAppPurchaseAsync_GetResult indicates you want to simulate the error code return value of the RequestAppPurchaseAsync method.
HResultHResult 必須Yes この属性は、スキーマResponseCodes 型で表示される列挙値のいずれかに割り当てます。Assign this attribute to one of the enum values shown for the ResponseCodes type in the schema. これらの各列挙値は、この DefaultResponse 要素の MethodName 属性に割り当てるメソッドに対して返すエラーコードを表します。Each of these enum values represents the error code you want to return for the method that is assigned to the MethodName attribute for this DefaultResponse element.

ConsumableInformation 要素ConsumableInformation element

この要素は、このアプリで利用可能なコンシューマブルなアドオンを記述します。This element describes the consumable add-ons available for this app. ConsumableInformation は、CurrentApp 要素のオプションの子要素であり、0 個以上の Product 要素が含まれます。ConsumableInformation is an optional child of the CurrentApp element, and it can contain zero or more Product elements.

Product 要素 (ConsumableInformation の子要素)Product element (child of ConsumableInformation)

この要素は、コンシューマブルなアドオンを記述します。This element describes a consumable add-on. Product は、ConsumableInformation 要素のオプションの子要素です。Product is an optional child of the ConsumableInformation element.

Product には次の属性があります。Product has the following attributes.

属性Attribute 必須かどうかRequired 説明Description
ProductIdProductId 必須Yes アプリがこのコンシューマブルなアドオンを特定するために使う文字列が含まれています。Contains the string used by the app to identify the consumable add-on.
TransactionIdTransactionId 必須Yes アプリが、フルフィルメントのプロセス全体を通じ、コンシューマブルの購入トランザクションを追跡するために使用する GUID (文字列) が含まれています。Contains a GUID (as a string) used by the app to track the purchase transaction of a consumable through the process of fulfillment. 詳しくは、「コンシューマブルなアプリ内製品購入の有効化」をご覧ください。See Enable consumable in-app product purchases.
StatusStatus 必須Yes アプリが、コンシューマブルのフルフィルメントの状態を示すために使う文字列が含まれています。Contains the string used by the app to indicate the fulfillment status of a consumable. 値は、ActivePurchaseRevertedPurchasePending、または ServerError です。Values can be Active, PurchaseReverted, PurchasePending, or ServerError.
OfferIdOfferId 必須ではないNo アプリが、このコンシューマブルが属するカテゴリを特定するために使う文字列が含まれています。Contains the string used by the app to identify the category in which the consumable belongs. これを使うことで、「アプリ内製品の大規模なカタログの管理」で説明されている大規模なアイテムのカタログに対応できます。This provides support for large item catalogs, as described in Manage a large catalog of in-app products.