Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Členy v oboru názvů Windows.ApplicationModel.Store můžete použít k přidání nákupů v aplikacích a zkušebních funkcí do aplikace pro Univerzální platformu Windows (UPW), abyste mohli aplikaci zpeněžit. Tato rozhraní API také poskytují přístup k informacím o licencích pro vaši aplikaci.
Články v této části obsahují podrobné pokyny a příklady kódu pro použití členů v oboru názvů Windows.ApplicationModel.Store pro několik běžných scénářů. Přehled základních konceptů souvisejících s nákupy v aplikacích pro UPW najdete v tématu nákupy v aplikaci a zkušební verze. Kompletní ukázku, která ukazuje, jak implementovat zkušební verze a nákupy v aplikaci pomocí oboru názvů Windows.ApplicationModel.Store, najdete v ukázkovém příkladu Store.
Důležitý
Obor názvů Windows.ApplicationModel.Store se už neaktualizuje novými funkcemi. Pokud váš projekt cílí na Windows 10 Anniversary Edition (10.0; Build 14393) nebo novější verzi v sadě Visual Studio (to znamená, že cílíte na Windows 10 verze 1607 nebo novější), doporučujeme místo toho použít obor názvů Windows.Services.Store. Další informace najdete v tématu nákupy v aplikaci a zkušební verze. Obor názvů Windows.ApplicationModel.Store není podporován v desktopových aplikacích Windows, které používají Desktop Bridge nebo v aplikacích nebo hrách, které používají vývojový sandbox v Partner Center (například to platí pro jakoukoliv hru, která se integruje s Xbox Live). Tyto produkty musí k implementaci nákupů a zkušebních verzí v aplikacích používat obor názvů Windows.Services.Store.
Důležitý
Funkce pro nákup v aplikaci a hodnocení a recenze poskytované v oboru názvů Windows.ApplicationModel.Store se v současné době nepodporují v povýšených aplikacích.
Začínáme s třídami CurrentApp a CurrentAppSimulator
Hlavním vstupním bodem k oboru názvů Windows.ApplicationModel.Store je třída CurrentApp. Tato třída poskytuje statické vlastnosti a metody, které můžete použít k získání informací pro aktuální aplikaci a jejích dostupných doplňků, získání informací o licenci pro aktuální aplikaci nebo její doplňky, zakoupení aplikace nebo doplňku pro aktuálního uživatele a provádění dalších úloh.
Třída CurrentApp získá data z Microsoft Storu, takže musíte mít vývojářský účet a aplikace musí být publikovaná ve Storu, abyste mohli tuto třídu ve své aplikaci úspěšně použít. Před odesláním aplikace do Storu můžete svůj kód otestovat pomocí simulované verze této třídy s názvem CurrentAppSimulator. Po otestování aplikace a před jejím odesláním do Microsoft Storu je nutné nahradit instance CurrentAppSimulatorCurrentApp. Certifikace vaší aplikace selže, pokud používá currentAppSimulator.
Když se použije CurrentAppSimulator, počáteční stav licencování a produktů v aplikaci se popisuje v místním souboru ve vývojovém počítači s názvem WindowsStoreProxy.xml. Další informace o tomto souboru naleznete v tématu Použití souboru WindowsStoreProxy.xml s currentAppSimulator.
Další informace o běžných úlohách, které můžete provádět pomocí CurrentApp a CurrentAppSimulator, najdete v následujících článcích.
| Téma | Popis |
|---|---|
| vyloučit nebo omezit funkce ve zkušební verzi | Pokud zákazníkům umožníte bezplatně používat vaši aplikaci během zkušebního období, můžete své zákazníky přivést k upgradu na plnou verzi aplikace tím, že některé funkce během zkušebního období vyloučíte nebo omezíte. |
| Povolení nákupů produktů v aplikaci | Bez ohledu na to, jestli je vaše aplikace bezplatná, nebo ne, můžete prodávat obsah, jiné aplikace nebo nové funkce aplikace (například odemknout další úroveň hry) přímo v aplikaci. Tady vám ukážeme, jak tyto produkty povolit ve vaší aplikaci. |
| Povolení spotřebních nákupů produktů v aplikaci | Nabídněte spotřební produkty v aplikaci – položky, které je možné zakoupit, používat a znovu zakoupit – prostřednictvím komerční platformy Store, aby zákazníkům poskytli prostředí pro nákup, které je robustní i spolehlivé. To je užitečné zejména pro věci, jako je měna ve hře (zlato, mince atd.), které lze zakoupit a pak použít k nákupu konkrétních power-ups. |
| Správa rozsáhlého katalogu produktů v aplikaci | Pokud vaše aplikace nabízí rozsáhlý katalog produktů v aplikaci, můžete volitelně postupovat podle postupu popsaného v tomto tématu a pomoct spravovat katalog. |
| Ověření nákupů produktů pomocí účtenek | Každá transakce z Microsoft Storu, která vede k úspěšnému nákupu produktu, může volitelně vrátit potvrzení o transakci, která zákazníkovi poskytne informace o uvedeném produktu a peněžních nákladech. Přístup k tomuto informacím podporuje scénáře, ve kterých vaše aplikace potřebuje ověřit, že uživatel aplikaci zakoupil nebo že si v aplikaci koupil nákupy produktů z Microsoft Storu. |
Použití souboru WindowsStoreProxy.xml s CurrentAppSimulatorem
Když se použije CurrentAppSimulator, počáteční stav licencování a produktů v aplikaci se popisuje v místním souboru ve vývojovém počítači s názvem WindowsStoreProxy.xml. CurrentAppSimulator metody, které mění stav aplikace, například nákupem licence nebo zpracováním nákupu v aplikaci, aktualizují pouze stav CurrentAppSimulator objektu v paměti. Obsah WindowsStoreProxy.xml se nezmění. Jakmile se aplikace znovu spustí, stav licence se vrátí k tomu, co je popsáno v WindowsStoreProxy.xml.
Soubor WindowsStoreProxy.xml se ve výchozím nastavení vytvoří v následujícím umístění: %UserProfile%\AppData\Local\Packages\<složku balíčku aplikace>\LocalState\Microsoft\Windows Store\ApiData. Tento soubor můžete upravit a definovat scénář, který chcete simulovat v CurrentAppSimulator vlastnosti.
I když můžete upravit hodnoty v tomto souboru, doporučujeme místo toho vytvořit vlastní soubor WindowsStoreProxy.xml (v datové složce projektu sady Visual Studio), který by použil CurrentAppSimulator. Při simulaci transakce zavolejte ReloadSimulatorAsync pro načtení souboru. Pokud nevoláte ReloadSimulatorAsync k načtení vlastního souboru WindowsStoreProxy.xml, CurrentAppSimulator vytvoří/načte (ale nepřepíše) výchozí WindowsStoreProxy.xml soubor.
Poznámka
Mějte na paměti, že currentAppSimulator není plně inicializován, dokud ReloadSimulatorAsync nedokončí. A vzhledem k tomu, že ReloadSimulatorAsync je asynchronní metoda, měli byste se postarat, abyste se vyhnuli konfliktu časování dotazování CurrentAppSimulator v jednom vlákně, zatímco se inicializuje na jiném. Jednou z technik je použití příznaku k označení, že inicializace je dokončena. Aplikace nainstalovaná z Microsoft Storu musí používat CurrentApp místo CurrentAppSimulatora v takovém případě ReloadSimulatorAsync není volána a proto se zmíněná podmínka přístupu nevztahuje. Z tohoto důvodu navrhněte kód tak, aby fungoval v obou případech asynchronně i synchronně.
Příklady
Tento příklad je soubor WindowsStoreProxy.xml (kódovaný UTF-16), který popisuje aplikaci se zkušebním režimem, jehož platnost vyprší v 05:00 (UTC) 19. ledna 2015.
<?xml version="1.0" encoding="UTF-16"?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>00001111-aaaa-2222-bbbb-3333cccc4444</AppId>
<LinkUri>http://apps.windows.microsoft.com/app/00001111-aaaa-2222-bbbb-3333cccc4444</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>
Dalším příkladem je soubor WindowsStoreProxy.xml (kódovaný UTF-16), který popisuje zakoupenou aplikaci, má funkci, která vyprší v 05:00 (UTC) 19. ledna 2015 a má použitelný nákup v aplikaci.
<?xml version="1.0" encoding="utf-16" ?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>11112222-bbbb-3333-cccc-4444dddd5555</AppId>
<LinkUri>http://apps.windows.microsoft.com/app/11112222-bbbb-3333-cccc-4444dddd5555</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>
Schéma
V této části je uveden soubor XSD, který definuje strukturu souboru WindowsStoreProxy.xml. Pokud chcete toto schéma použít v editoru XML v sadě Visual Studio při práci se souborem WindowsStoreProxy.xml, postupujte takto:
- Otevřete soubor WindowsStoreProxy.xml ve Visual Studio.
- V nabídce XML klepněte na tlačítko Vytvořit schéma. Tím se vytvoří dočasný soubor WindowsStoreProxy.xsd založený na obsahu souboru XML.
- Obsah tohoto souboru .xsd nahraďte následujícím schématem.
- Uložte soubor do umístění, kde ho můžete použít pro více projektů aplikací.
- Přepněte na soubor WindowsStoreProxy.xml ve vašem programu Visual Studio.
- V nabídce XML klepněte na Schémataa vyhledejte řádek v seznamu pro soubor WindowsStoreProxy.xsd. Pokud umístění souboru není to, které chcete (například pokud je dočasný soubor stále zobrazen), klikněte na Přidat. Přejděte na správný soubor a klikněte na OK. Tento soubor byste teď měli vidět v seznamu. Ujistěte se, že se ve sloupci Použít pro toto schéma zobrazí značka zaškrtnutí.
Jakmile to uděláte, úpravy, které provedete v WindowsStoreProxy.xml, budou podléhat schématu. Další informace naleznete v tématu Postupy: Výběr schémat XML pro použití.
<?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>
Popisy elementů a atributů
Tato část popisuje prvky a atributy v souboru WindowsStoreProxy.xml.
Kořenovým prvkem tohoto souboru je prvek CurrentApp, který představuje aktuální aplikaci. Tento prvek obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| Informace o nabídce | Ano | 1 | Obsahuje data ze seznamu aplikace. |
| Informace o licenci | Ano | 1 | Popisuje licence dostupné pro tuto aplikaci a jeho odolné doplňky. |
| ConsumableInformation | Ne | 0 nebo 1 | Popisuje spotřební doplňky, které jsou pro tuto aplikaci k dispozici. |
| simulace | Ne | 0 nebo 1 | Popisuje, jak budou v aplikaci během testování fungovat volání různých metod CurrentAppSimulator. |
ListingInformation – element
Tento prvek obsahuje data ze seznamu aplikace. ListingInformation je povinným potomkem prvku CurrentApp.
ListingInformation obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| Aplikace | Ano | 1 | Poskytuje data o aplikaci. |
| Produkt | Ne | 0 nebo více | Popisuje doplněk pro aplikaci. |
Element aplikace (podřízený prvek ListingInformation)
Tento prvek popisuje licenci aplikace. App je povinný podřízený prvek ListingInformation.
aplikace obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| AppId | Ano | 1 | Identifikátor GUID, který identifikuje aplikaci ve Storu. Může to být jakýkoli GUID pro testování. |
| LinkUri | Ano | 1 | URI stránky seznamu v obchodě. Může to být libovolný platný identifikátor URI pro testování. |
| AktuálníTrh | Ano | 1 | Země/oblast zákazníka. |
| VěkováHodnocení | Ano | 1 | Celé číslo, které představuje minimální věkové hodnocení aplikace. Jedná se o stejnou hodnotu, kterou byste zadali v Partnerském centru při odesílání aplikace. Hodnoty používané storem jsou: 3, 7, 12 a 16. Další informace o těchto hodnoceních najdete v tématu Věkové hodnocení. |
| MarketData | Ano | 1 nebo více | Obsahuje informace o aplikaci pro danou zemi nebo oblast. Pro každou zemi nebo oblast, ve které je aplikace uvedena, musíte zahrnout prvek MarketData. |
MarketData – prvek (podřízený prvek App)
Tento prvek poskytuje informace o aplikaci pro danou zemi nebo oblast. Pro každou zemi nebo oblast, ve které je aplikace uvedena, musíte zahrnout prvek MarketData. MarketData je povinným podřízeným prvkem App.
MarketData obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| název | Ano | 1 | Název aplikace v této zemi nebo oblasti |
| popis | Ano | 1 | Popis aplikace pro tuto zemi nebo oblast. |
| Cena | Ano | 1 | Cena aplikace v této zemi/oblasti. |
| CurrencySymbol | Ano | 1 | Symbol měny použitý v této zemi nebo oblasti. |
| měnový kód | Ne | 0 nebo 1 | Kód měny použitý v této zemi/oblasti. |
MarketData má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| xml:lang | Ano | Určuje zemi nebo oblast, pro kterou se vztahují informace o údajích o trhu. |
Prvek produktu (podřízený prvek ListingInformation)
Tento element popisuje doplněk pro aplikaci. Product je volitelná podřízená položka elementu ListingInformation a obsahuje jeden nebo více prvků MarketData.
Produkt má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| ID produktu | Ano | Obsahuje řetězec používaný aplikací k identifikaci doplňku. |
| DélkaLicence | Ne | Určuje počet dní, po které bude licence platná po zakoupení položky. Datum vypršení platnosti nové licence vytvořené nákupem produktu je datum nákupu plus doba trvání licence. Tento atribut se používá pouze v případě, že atribut ProductType je Durable; tento atribut je ignorován pro spotřební doplňky. |
| TypProdukt | Ne | Obsahuje hodnotu, která identifikuje trvalost produktu v aplikaci. Podporované hodnoty jsou trvanlivý (výchozí) a spotřební. U trvalých typů jsou další informace popsány v prvku Produkt v části LicenseInformation; pro spotřební typy jsou další informace popsány v prvku Produkt v části ConsumableInformation. |
MarketData – element (podřízený prvek „Product“)
Tento prvek poskytuje informace o doplňku pro danou zemi nebo oblast. Pro každou zemi nebo oblast, ve které je doplněk uveden, musíte zahrnout prvek MarketData. MarketData je povinným podřízeným prvkem Product.
MarketData obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| název | Ano | 1 | Název doplňku v této zemi nebo oblasti |
| Cena | Ano | 1 | Cena doplňku v této zemi/oblasti. |
| CurrencySymbol | Ano | 1 | Symbol měny použitý v této zemi nebo oblasti. |
| měnový kód | Ne | 0 nebo 1 | Kód měny použitý v této zemi/oblasti. |
| popis | Ne | 0 nebo 1 | Popis doplňku pro tuto zemi nebo oblast |
| značka | Ne | 0 nebo 1 | Data vývojáře na míru (také nazývaná značkou) pro doplněk. |
| klíčová slova | Ne | 0 nebo 1 | Obsahuje až 10 prvků, které obsahují klíčová slova doplňku. |
| ImageUri | Ne | 0 nebo 1 | Identifikátor URI obrázku v seznamu doplňků. |
MarketData má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| xml:lang | Ano | Určuje zemi nebo oblast, pro kterou se vztahují informace o údajích o trhu. |
LicenseInformation element
Tento prvek popisuje licence dostupné pro tuto aplikaci a její odolné produkty v aplikaci. LicenseInformation je prvek, který musí být podřízený součásti CurrentApp.
LicenseInformation obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| Aplikace | Ano | 1 | Popisuje licenci aplikace. |
| Produkt | Ne | 0 nebo více | Popisuje stav licence odolného doplňku v aplikaci. |
Následující tabulka ukazuje, jak simulovat některé běžné podmínky kombinováním hodnot v rámci prvků App a Product.
| Podmínka pro simulaci | IsActive | IsTrial | Datum vypršení platnosti |
|---|---|---|---|
| Plně licencovaná | pravda | falešný | Nepřítomný. Ve skutečnosti může být přítomna a může zadat budoucí datum, ale se doporučuje vynechat daný prvek ze souboru XML. Pokud je aktuální a určuje datum v minulosti, bude IsActive ignorována a bude přijata jako nepravda. |
| Ve zkušebním období | pravda | pravda | <datum a čas v budoucnosti> Tento prvek musí být přítomný, protože IsTrial je pravda. Můžete navštívit web, který zobrazuje aktuální koordinovaný univerzální čas (UTC), abyste věděli, jak daleko v budoucnu to nastavíte, abyste získali zbývající zkušební období, které chcete. |
| Platnost zkušební verze vypršela | falešný | pravda | <datum a čas v minulosti> Tento prvek musí být přítomen, protože IsTrial je pravdivé. Můžete navštívit web zobrazující aktuální koordinovaný univerzální čas (UTC), abyste věděli, kdy je "minulost" ve standardu UTC. |
| Neplatný | falešný | falešný | <jakákoli hodnota nebo vynechání> |
App element (podřízený prvek LicenseInformation)
Tento prvek popisuje licenci aplikace. App je povinným podřízeným prvkem LicenseInformation.
aplikace obsahuje následující podřízené prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| JeAktivní | Ano | 1 | Popisuje aktuální stav licence této aplikace. Hodnota true označuje platnost licence; false označuje neplatnou licenci. Za normálních okolností je tato hodnota true, ať už má aplikace zkušební režim, nebo ne. Nastavte tuto hodnotu na false a otestujte, jak se vaše aplikace chová, když má neplatnou licenci. |
| JeZkušební | Ano | 1 | Popisuje aktuální stav zkušební verze této aplikace. Hodnota true označuje, že se aplikace používá během zkušebního období; false znamená, že aplikace není ve zkušební verzi, protože aplikace byla zakoupena nebo vypršela zkušební období. |
| datum vypršení platnosti | Ne | 0 nebo 1 | Datum vypršení zkušebního období pro tuto aplikaci v koordinovaném univerzálním čase (UTC). Datum musí být vyjádřeno takto: yyyy-mm-ddThh:mm:ss.ssZ. Například 05:00 dne 19. ledna 2015 bude zadáno jako 2015-01-19T05:00:00.00Z. Tento prvek je vyžadován, pokud IsTrial je true. V opačném případě se nevyžaduje. |
Prvek produktu (podřízený prvek LicenseInformation)
Tento prvek popisuje stav licence trvalého doplňku v aplikaci. Product je volitelný podřízený element LicenseInformation.
Produkt obsahuje následující dceřiné prvky.
| Prvek | Povinný | Množství | Popis |
|---|---|---|---|
| JeAktivní | Ano | 1 | Popisuje aktuální stav licence tohoto doplňku. Hodnota true označuje, že doplněk lze použít; false znamená, že doplněk se nedá použít nebo nebyl zakoupen. |
| datum vypršení platnosti | Ne | 0 nebo 1 | Datum vypršení platnosti doplňku v koordinovaném univerzálním čase (UTC). Datum musí být vyjádřeno takto: yyyy-mm-ddThh:mm:ss.ssZ. Například 05:00 dne 19. ledna 2015 bude zadáno jako 2015-01-19T05:00:00.00Z. Pokud je tento prvek k dispozici, má doplněk datum vypršení platnosti. Pokud není k dispozici, platnost doplňku nevyprší. |
Produkt má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| ID produktu | Ano | Obsahuje řetězec používaný aplikací k identifikaci doplňku. |
| OfferId | Ne | Obsahuje řetězec používaný aplikací k identifikaci kategorie, do které doplněk patří. To poskytuje podporu pro velké katalogy položek, jak je popsáno v tématu Správa rozsáhlého katalogu produktů v aplikacích. |
Simulační prvek
Tento element popisuje, jak volání různých CurrentAppSimulator metod bude fungovat v aplikaci během testování. simulace je volitelná podřízená položka elementu CurrentApp a obsahuje nula nebo více prvků DefaultResponse.
Simulace má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| SimulationMode | Ne | Hodnoty mohou být Interaktivní nebo Automatické. Pokud je tento atribut nastaven na Automatic, metody automaticky vrátí zadané kódy chyb HRESULT. To se dá použít při spouštění automatizovaných testovacích případů. |
"DefaultResponse" prvek
Tento element popisuje výchozí kód chyby vrácený metodou CurrentAppSimulator. DefaultResponse je volitelný podřízený prvek elementu Simulation.
DefaultResponse má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| MethodName | Ano | Přiřaďte tento atribut k některé z výčtových hodnot uvedených pro typ StoreMethodName ve schématu . Každý z těchto hodnot výčtu představuje CurrentAppSimulator metodu, pro kterou chcete simulovat návratovou hodnotu kódu chyby ve vaší aplikaci během testování. Například hodnota RequestAppPurchaseAsync_GetResult označuje, že chcete simulovat návratovou hodnotu kódu chyby metody RequestAppPurchaseAsync. |
| HResult | Ano | Přiřaďte tento atribut k jedné z hodnot výčtu zobrazených pro ResponseCodes typ v schématu. Každá z těchto hodnot výčtu představuje kód chyby, který chcete vrátit metodě přiřazené atributu MethodName pro tento prvek DefaultResponse. |
Element ConsumableInformation
Tento prvek popisuje spotřební doplňky dostupné pro tuto aplikaci. ConsumableInformation je volitelná podřízená položka elementu CurrentApp a může obsahovat nula nebo více prvků Product.
Prvek produktu (podřízený prvek ConsumableInformation)
Tento prvek popisuje spotřební doplněk. Produkt je volitelný podřízený prvek ConsumableInformation.
Produkt má následující atributy.
| Atribut | Povinný | Popis |
|---|---|---|
| ID produktu | Ano | Obsahuje řetězec používaný aplikací k identifikaci spotřebního doplňku. |
| ID transakce | Ano | Obsahuje identifikátor GUID (jako řetězec), který aplikace používá ke sledování nákupní transakce spotřebního zboží v procesu plnění. Viz Povolit nákupy spotřebního zboží v rámci aplikace. |
| Status | Ano | Obsahuje řetězec používaný aplikací k označení stavu plnění spotřebního materiálu. Hodnoty mohou být aktivní, nákup vrácen, nákup čekajícínebo chyba serveru. |
| OfferId | Ne | Obsahuje řetězec používaný aplikací k identifikaci kategorie, do které patří spotřební materiál. To poskytuje podporu pro velké katalogy položek, jak je popsáno v tématu Správa rozsáhlého katalogu produktů v aplikacích. |