CurrentAppSimulator class

Applies to Windows and Windows Phone

Defines methods and properties used to instantiate an object that you can use to get simulated license info during testing.

Note  You must replace the CurrentAppSimulator class with the CurrentApp class before you submit the app to the Windows Store. Apps that use the CurrentAppSimulator will fail certification.

When the CurrentAppSimulator is used, a WindowsStoreProxy.xml file is created at the following location to support the simulation of a Windows Store transaction:

C:\Users\<username>\AppData\Local\Packages\<app package folder>\LocalState\Microsoft\Windows Store\ApiData\WindowsStoreProxy.xml

While you can modify the values in this file, the recommended alternative is to create your own WindowsStoreProxy.xml file (in a data folder of your VS project) for the simulator to use instead. When simulating the transaction, call CurrentAppSimulator.ReloadSimulatorAsync (<storage file based on path to your xml file>) to load your file.

If you do not call ReloadSimulatorAsync for your own WindowsStoreProxy.xml file, the simulator will create/load (but not overwrite) the default WindowsStoreProxy.xml file.

Note  Be aware that CurrentAppSimulator is not fully initialized until ReloadSimulatorAsync completes. 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. One technique is to use a flag to indicate that initialization is complete. An app that is installed from the Windows Store must use CurrentApp, and not CurrentAppSimulator, and in that case ReloadSimulatorAsync is not called and 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.

Syntax


var currentAppSimulator = Windows.ApplicationModel.Store.CurrentAppSimulator;

Attributes

[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]

Members

The CurrentAppSimulator class has these types of members:

Methods

The CurrentAppSimulator class has these methods. With C#, Visual Basic, and C++, it also inherits methods from the Object class.

MethodDescription
GetAppReceiptAsync Creates the async operation that the user can use to simulate requesting all receipts for this app and any in-app product purchases. For examples of how receipt information can be used, see Using receipts to verify product purchases.
GetProductReceiptAsync Creates the async operation that the user can use to simulate requesting the receipt for the specified productId. For examples of how receipt information can be used, see Using receipts to verify product purchases.
GetUnfulfilledConsumablesAsync Returns a list of purchased consumable in-app products that have not been fulfilled locally.
LoadListingInformationAsync Loads the simulated app listing information asynchronously. Implements the IAsyncInfo interface.
LoadListingInformationByKeywordsAsync Windows Phone only. Loads the simulated app listing information asynchronously, returning in-app products in the ProductListings collection that match all supplied keywords. Implements the IAsyncInfo interface.
LoadListingInformationByProductIdsAsync Windows Phone only. Loads the simulated app listing information asynchronously, returning available in-app products in the ProductListings collection that match any of the given products IDs. This method implements the IAsyncInfo interface.
ReloadSimulatorAsync Reloads the simulator using a StorageFile containing the WindowsStoreProxy.xml file.
ReportConsumableFulfillmentAsync Simulates notifying the Windows Store that the purchase of a consumable in-app product is fulfilled and that the user has the right to access the content.
RequestAppPurchaseAsync Creates the async operation that simulates a user request to buy a full license for the current app.
RequestProductPurchaseAsync(String) Creates the async operation that displays the UI that is used to simulate the purchase of in-app product from the Windows Store.
RequestProductPurchaseAsync(String,Boolean) Creates the async operation that displays the UI that is used to simulate the purchase of an in-app product from the Windows Store.
RequestProductPurchaseAsync(String,String,ProductPurchaseDisplayProperties) Creates the async operation that displays the UI that is used to simulate the purchase of an in-app product from the Windows Store.

 

Properties

The CurrentAppSimulator class has these properties.

PropertyAccess typeDescription

AppId

Read-onlyGets a simulated app ID. Since CurrentAppSimulator is intended only for testing during app development, the returned CurrentAppSimulator.AppId will contain only 0's.

LicenseInformation

Read-onlyGets the simulated license metadata for the current app as provided by the simulation.

LinkUri

Read-onlyGets the simulated Uniform Resource Identifier (URI) that represents a Windows Store listing page for the current app.

 

Remarks

Until the app has been listed in the Windows Store, the CurrentApp object won't work in the app. Use the CurrentAppSimulator to test your app's licensing and in-app purchases while you develop your app. After you test your app and before you submit it to the Windows Store, replace the instances of CurrentAppSimulator with CurrentApp. Your app will fail certification if it uses CurrentAppSimulator.

Note  When using the simulation, the initial licensing state of the app is described in WindowsStoreProxy.xml. CurrentAppSimulator methods that alter the license state, for example by buying a license or handling an in-app purchase, only update the license state of the object in memory. The contents of WindowsStoreProxy.xml are not changed. When the app starts again, the license state reverts to what is described in WindowsStoreProxy.xml.

The CurrentAppSimulator object gets its data from the WindowsStoreProxy.xml file in the %userprofile%\appdata\local\packages\<package-moniker>\localstate\microsoft\Windows Store\Apidata folder. You must configure this file for the scenario that you want to simulate in the CurrentAppSimulator properties.

The contents of this file are defined by the WindowsStoreProxy.xsd file included as an example later in this topic, and they reflect the organization of the objects and properties of the Windows.ApplicationModel.Store namespace.

The elements of this file are included in the CurrentApp root node and include:

ListingInformation

Represents data that would normal be found in the app's listing and includes these elements:

App

Represents data about the app and contains these elements:

AppId

The GUID that identifies the app in the store. This can be any GUID for testing.

LinkUri

The URI of the listing page in the store. This can be any valid URI for testing.

AgeRating

An integer that represents the minimum age rating of the app. This is the same value you would specify in the Dashboard when you submit the app. The values used by the Windows Store are: 3, 7, 12, and 16. For more info on these ratings, see Age ratings and rating boards.

CurrentMarket

The customer's country/region.

MarketData

Info about the app for this country/region. (For each country/region in which the app is listed, you must include a MarketData element.)

Requires the xml:lang attribute, which specifies the country/region for which this info applies.

Name

The name of the app in this country/region.

Description

The description of the app for this country/region.

Price

The price of the app in this country/region.

CurrencySymbol

The currency symbol used in this country/region.

CurrencyCode

The currency code used in this country/region.

Product

Describes a product or a feature in this app that is enabled when the customer makes an in-app purchase.

Requires the ProductId attribute, which contains the string used by the app to identify the product or feature.

May include the LicenseDuration attribute, if the ProductType is Durable. This 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.) LicenseDuration is ignored for consumable in-app products.

May include a ProductType attribute, which contains a value to identify the persistence of the in-app purchase: Durable (the default) or Consumable. For durable types, additional information is described by a Product node within LicenseInformation; for consumable types, additional information is described by a Product node within ConsumableInformation.

MarketData

Info about the product or feature for this country/region. (For each country/region in which the app is listed, you must include a MarketData element.)

Requires the xml:lang attribute, which specifies the country/region for which this information applies.

Name

The name of the product or feature in this country/region.

Price

The price of the product or feature in this country/region.

CurrencySymbol

The currency symbol used in this country/region.

CurrencyCode

The currency code used in this country/region.

LicenseInformation

Represents data that describes the licenses available for this app and its durable in-app purchases. Here's a handy table with some common combinations of values:

Condition to simulateIsActiveIsTrialExpirationDate
Fully licensedTrueFalseAbsent. It actually may be present, and in the future, but you're advised to just omit the element from the xml file. If it's in the past, then IsActive will be ignored and taken to be false.
In trial periodTrueTrue<a datetime in the future> (this element must be present because IsTrial is true). You can visit a website showing the current Coordinated Universal Time (or Zulu time) to know how far in the future to set this to get the remaining trial period you want.
Expired trialFalseTrue<a datetime in the past> (this element must be present because IsTrial is true). You can visit a website showing the current Coordinated Universal Time (or Zulu time) to know when "the past" is in Zulu time.
InvalidFalseFalse<any value, or omitted>

 

LicenseInformation includes the following elements:

App

Describes the app's license:

IsActive

Describes the current license state of this app.

true indicates the license is valid. Normally this value is true, whether the app has a trial mode or not.

false indicates an invalid license. Set this value to false to test how your app behaves when it has an invalid license.

IsTrial

Describes the current trial state of this app.

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.

ExpirationDate

The date the trial period for this app expires, in Coordinated Universal Time (or Zulu time). The date must be express as: yyyy-mm-ddThh:mm:ss.ssZ. For example, 05:00 on January 19, 2015 would be specified as 2015-01-19T05:00:00.00Z.

This element is required when IsTrial is true. Otherwise, it is not required.

DefaultResponse

Describes the default error code returned by a given method. The MethodName attribute allows you to specify one of these methods:

RequestAppPurchaseAsync_GetResult
RequestProductPurchaseAsync_GetResult
LoadListingInformationAsync_GetResult
The HResult attribute allows you to specify the error code. SimulatedCurrentApp.xsd contains the list of typical error codes you can use.

Product

Describes the license status of a durable in-app purchase in the app:

IsActive

Describes the current license state of this product or feature.

true indicates the product or feature can be used. false indicates the product or feature cannot be used or has not been purchased.

ExpirationDate

The date the product or feature expires. The date must be express as: yyyy-mm-ddThh:mm:ss.ssZ. For example, 05:00 on January 19, 2015 would be specified as 2015-01-19T05:00:00.00Z.

If this element is present, the product or feature has an expiration date. If it's not present, the feature does not expire.

ConsumableInformation

Represents data that describes the consumable in-app purchases available for this app, and includes any number of Product elements:

Product

Describes a consumable in-app purchase item.

Requires the ProductId attribute, which contains the string used by the app to identify the consumable.

Requires the TransactionId attribute, which 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 in-app purchase of consumables.

Requires the Status attribute, which contains the string used by the app to indicate the fulfillment status of a consumable. Values can be Active, PurchaseReverted, PurchasePending, or ServerError.

May include an optional OfferId attribute, which 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 How to manage a large catalog of in-app offers.

Simulation

Describes how various method calls work. When the SimulationMode attribute is set to Automatic, the methods will automatically return the specified HRESULT error codes. This can be used when running automated test cases.

Examples

This example is a WindowsStoreProxy.xml file (UTF-16 encoded) that describes an app with a trial mode that expires at 05:00 (Z) 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>

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 (Z) 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>


SimulatedCurrentApp.xsd

The next example is the XSD file that defines the structure of the temporary files used to test your app with the CurrentAppSimulator.

To apply this schema to the XML editor in Visual Studio when working with your WindowsStoreProxy.xml file, do the following:

  • Open the WindowsStoreProxy.xml file in Visual Studio.
  • On the XML menu, click Create Schema. This will create a temporary WindowsStoreProxy.xsd file based on the contents of the XML file.
  • Replace the contents of that .xsd file with the schema below.
  • Save the file to a location where you can apply it to multiple app projects.
  • Switch to your WindowsStoreProxy.xml file in Visual Studio.
  • 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. 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.

Once you've done this, edits you make to WindowsStoreProxy.xml will be subject to the schema. 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>


Requirements

Minimum supported client

Windows 8 [Windows Store apps only]

Minimum supported server

Windows Server 2012 [Windows Store apps only]

Minimum supported phone

Windows Phone 8.1 [Windows Runtime apps only]

Namespace

Windows.ApplicationModel.Store
Windows::ApplicationModel::Store [C++]

Metadata

Windows.winmd

See also

Trial app and in-app purchase sample

 

 

Show:
© 2014 Microsoft