Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt leden in de Windows.ApplicationModel.Store naamruimte gebruiken om aankopen en proefversies toe te voegen aan uw UWP-app (Universal Windows Platform) om geld te verdienen met uw app. Deze API's bieden ook toegang tot de licentiegegevens voor uw app.
De artikelen in deze sectie bevatten uitgebreide richtlijnen en codevoorbeelden voor het gebruik van de leden in de Windows.ApplicationModel.Store-naamruimte voor verschillende veelvoorkomende scenario's. Zie In-app aankopen en proefversiesvoor een overzicht van basisconcepten met betrekking tot in-app-aankopen in UWP-apps. Zie het Store-voorbeeldvoorbeeldvoor een volledig voorbeeld waarin wordt getoond hoe u proefversies en in-app-aankopen implementeert met behulp van de Windows.ApplicationModel.Store-naamruimte.
Belangrijk
De Windows.ApplicationModel.Store-naamruimte wordt niet meer bijgewerkt met nieuwe functies. Als uw project gericht is op Windows 10 Jubileumeditie (10.0; Build 14393) of een latere release in Visual Studio (dat wil gezegd, u richt zich op Windows 10, versie 1607 of hoger), raden we u aan in plaats daarvan de Windows.Services.Store naamruimte te gebruiken. Zie in-app aankopen en proefversiesvoor meer informatie. De Windows.ApplicationModel.Store-naamruimte wordt niet ondersteund in Windows-bureaubladtoepassingen die gebruikmaken van de Desktop Bridge of in apps of games die gebruikmaken van een ontwikkelings sandbox in Partnercentrum (dit is bijvoorbeeld het geval voor een game die is geïntegreerd met Xbox Live). Deze producten moeten de Windows.Services.Store naamruimte gebruiken om aankopen en proefversies in de app te implementeren.
Aan de slag met de klassen CurrentApp en CurrentAppSimulator
Het belangrijkste toegangspunt voor de Windows.ApplicationModel.Store-naamruimte is de CurrentApp-klasse. Deze klasse biedt statische eigenschappen en methoden die u kunt gebruiken om informatie op te halen voor de huidige app en de beschikbare invoegtoepassingen, licentiegegevens op te halen voor de huidige app of de bijbehorende invoegtoepassingen, een app of invoegtoepassing voor de huidige gebruiker te kopen en andere taken uit te voeren.
De CurrentApp-klasse verkrijgt de gegevens uit de Microsoft Store. U moet dus een ontwikkelaarsaccount hebben en de app moet worden gepubliceerd in de Store voordat u deze klasse in uw app kunt gebruiken. Voordat u uw app naar de Store verzendt, kunt u uw code testen met een gesimuleerde versie van deze klasse met de naam CurrentAppSimulator. Nadat u uw app hebt getest en voordat u deze indient bij de Microsoft Store, moet u de exemplaren van CurrentAppSimulator- vervangen door CurrentApp-. Uw app zal niet door de certificering komen als deze gebruikmaakt van CurrentAppSimulator.
Wanneer de CurrentAppSimulator- wordt gebruikt, wordt de initiële status van de licentieverlening en in-app-producten van uw app beschreven in een lokaal bestand op uw ontwikkelcomputer met de naam WindowsStoreProxy.xml. Zie Het WindowsStoreProxy.xml-bestand gebruiken met CurrentAppSimulatorvoor meer informatie over dit bestand.
Zie de volgende artikelen voor meer informatie over algemene taken die u kunt uitvoeren met CurrentApp en CurrentAppSimulator.
Onderwerp | Beschrijving |
---|---|
functies uitsluiten of beperken in een evaluatieversie | Als u klanten in staat stelt om uw app gratis te gebruiken tijdens een proefperiode, kunt u uw klanten verleiden om een upgrade uit te voeren naar de volledige versie van uw app door bepaalde functies tijdens de proefperiode uit te sluiten of te beperken. |
In-app-productaankopen inschakelen | Of uw app nu gratis is of niet, u kunt inhoud, andere apps of nieuwe app-functionaliteit (zoals het ontgrendelen van het volgende niveau van een game) rechtstreeks in de app verkopen. Hier ziet u hoe u deze producten kunt inschakelen in uw app. |
verbruikbare in-app-productaankopen inschakelen | Bied verbruiksbare in-app-producten ( artikelen die kunnen worden gekocht, gebruikt en opnieuw worden gekocht) aan via het Store Commerce-platform om uw klanten een aankoopervaring te bieden die zowel robuust als betrouwbaar is. Dit is vooral handig voor zaken zoals in-game valuta (goud, munten, enz.) die kunnen worden gekocht en vervolgens worden gebruikt om specifieke power-ups te kopen. |
Een grote catalogus met in-app-producten beheren | Als uw app een grote productcatalogus in de app biedt, kunt u eventueel het proces volgen dat in dit onderwerp wordt beschreven om uw catalogus te beheren. |
Ontvangstbewijzen gebruiken om productaankopen te verifiëren | Elke Microsoft Store-transactie die resulteert in een geslaagde productaankoop, kan eventueel een transactiebevestiging retourneren die informatie biedt over de vermelde product- en monetaire kosten aan de klant. Toegang tot deze informatie biedt ondersteuning voor scenario's waarbij uw app moet controleren of een gebruiker uw app heeft gekocht of productaankopen heeft gedaan in de Microsoft Store. |
Het WindowsStoreProxy.xml-bestand gebruiken met CurrentAppSimulator
Wanneer de CurrentAppSimulator- wordt gebruikt, wordt de initiële status van de licentieverlening en in-app-producten van uw app beschreven in een lokaal bestand op uw ontwikkelcomputer met de naam WindowsStoreProxy.xml. CurrentAppSimulator methoden die de status van de app wijzigen, bijvoorbeeld door een licentie te kopen of een aankoop in de app af te handelen, alleen de status van het CurrentAppSimulator--object in het geheugen bijwerken. De inhoud van WindowsStoreProxy.xml wordt niet gewijzigd. Wanneer de app opnieuw wordt gestart, wordt de licentiestatus teruggezet naar wat wordt beschreven in WindowsStoreProxy.xml.
Er wordt standaard een WindowsStoreProxy.xml-bestand gemaakt op de volgende locatie: %UserProfile%\AppData\Local\Packages\<app-pakketmap>\LocalState\Microsoft\Windows Store\ApiData. U kunt dit bestand bewerken om het scenario te definiëren dat u wilt simuleren in de CurrentAppSimulator eigenschappen.
Hoewel u de waarden in dit bestand kunt wijzigen, raden we u aan uw eigen WindowsStoreProxy.xml-bestand (in een gegevensmap van uw Visual Studio-project) te maken voor CurrentAppSimulator- om in plaats daarvan te gebruiken. Wanneer u de transactie simuleert, roept u ReloadSimulatorAsync- aan om uw bestand te laden. Als u ReloadSimulatorAsync niet aanroept om uw eigen WindowsStoreProxy.xml-bestand te laden, zal CurrentAppSimulator het standaard WindowsStoreProxy.xml-bestand creëren/laden (maar niet overschrijven).
Notitie
Houd er rekening mee dat CurrentAppSimulator- pas volledig is geïnitialiseerd zodra ReloadSimulatorAsync- voltooid is. En aangezien ReloadSimulatorAsync een asynchrone methode is, moet u ervoor zorgen dat de raceconditie wordt vermeden door niet tegelijkertijd op CurrentAppSimulator in één thread een query uit te voeren, terwijl deze in een andere wordt geïnitialiseerd. Een techniek is het gebruik van een vlag om aan te geven dat initialisatie is voltooid. Een app die is geïnstalleerd vanuit de Microsoft Store, moet CurrentApp- gebruiken in plaats van CurrentAppSimulator, en in dat geval is ReloadSimulatorAsync- niet aangeroepen en is de racevoorwaarde die zojuist wordt vermeld, niet van toepassing. Ontwerp daarom uw code zo dat deze in beide gevallen zowel asynchroon als synchroon werkt.
Voorbeelden
Dit voorbeeld is een WindowsStoreProxy.xml-bestand (UTF-16 gecodeerd) dat een app beschrijft met een evaluatiemodus die om 05:00 (UTC) verloopt op 19 januari 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>
Het volgende voorbeeld is een WindowsStoreProxy.xml-bestand (UTF-16 gecodeerd) dat een app beschrijft die is gekocht, een functie heeft die verloopt om 05:00 (UTC) op 19 januari 2015 en een verbruiksbare in-app-aankoop heeft.
<?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>
Schema
Deze sectie bevat het XSD-bestand dat de structuur van het WindowsStoreProxy.xml-bestand definieert. Ga als volgt te werk om dit schema toe te passen op de XML-editor in Visual Studio wanneer u met uw WindowsStoreProxy.xml-bestand werkt:
- Open het WindowsStoreProxy.xml-bestand in Visual Studio.
- Klik in het menu XML- op Schema maken. Hiermee maakt u een tijdelijk WindowsStoreProxy.xsd-bestand op basis van de inhoud van het XML-bestand.
- Vervang de inhoud van dat XSD-bestand door het onderstaande schema.
- Sla het bestand op een locatie op waar u het kunt toepassen op meerdere app-projecten.
- Schakel over naar uw WindowsStoreProxy.xml-bestand in Visual Studio.
- Klik in het menu XML- op Schema'sen zoek de rij in de lijst voor het bestand WindowsStoreProxy.xsd. Als de locatie voor het bestand niet het gewenste bestand is (bijvoorbeeld als het tijdelijke bestand nog steeds wordt weergegeven), klikt u op Toevoegen. Navigeer naar het juiste bestand en klik vervolgens op OK-. U ziet nu dat bestand in de lijst. Controleer of er een vinkje wordt weergegeven in de kolom Gebruik kolom voor dat schema.
Zodra u dit hebt gedaan, zullen de wijzigingen die u in WindowsStoreProxy.xml aanbrengt onderhevig zijn aan het schema. Zie Procedure: Selecteer de XML-schema's die u wilt gebruikenvoor meer informatie.
<?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>
Beschrijvingen van elementen en kenmerken
In deze sectie worden de elementen en kenmerken in het WindowsStoreProxy.xml-bestand beschreven.
Het hoofdelement van dit bestand is het element CurrentApp, dat de huidige app vertegenwoordigt. Dit element bevat de volgende onderliggende elementen.
Element | Verplicht | Hoeveelheid | Beschrijving |
---|---|---|---|
ListingInformation | Ja | 1 | Bevat gegevens uit de beschrijving van de app. |
Licentie-informatie | Ja | 1 | Beschrijft de licenties die beschikbaar zijn voor deze app en de persistente invoegtoepassingen. |
VerbruikbareInformatie | Nee | 0 of 1 | Beschrijft de verbruiksbare invoegtoepassingen die beschikbaar zijn voor deze app. |
simulatie | Nee | 0 of 1 | Beschrijft hoe aanroepen naar verschillende CurrentAppSimulator methoden tijdens het testen in de app werken. |
Het element Listinginformatie
Dit element bevat gegevens uit de lijst met apps. ListingInformation- is een vereist onderliggend element van het CurrentApp-element.
ListingInformation bevat de volgende onderliggende elementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
App- | Ja | 1 | Biedt gegevens over de app. |
Product | Nee | 0 of meer | Beschrijft een invoegtoepassing voor de app. |
App-element (onderliggend element van ListingInformation)
In dit element wordt de licentie van de app beschreven. App is een vereist kind van het ListingInformation element.
App- bevat de volgende onderliggende elementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
AppId- | Ja | 1 | De GUID die de app identificeert in de Store. Dit kan elke GUID zijn voor testen. |
LinkUri | Ja | 1 | De URI van de vermeldingspagina in de store. Dit kan elke geldige URI zijn voor testen. |
HuidigeMarkt | Ja | 1 | Het land/de regio van de klant. |
Leeftijdsclassificatie | Ja | 1 | Een geheel getal dat de minimale leeftijdsclassificatie van de app aangeeft. Dit is dezelfde waarde die u in partnercentrum opgeeft wanneer u de app verzendt. De waarden die door de Store worden gebruikt, zijn: 3, 7, 12 en 16. Zie Leeftijdsclassificatiesvoor meer informatie over deze beoordelingen. |
Marktgegevens | Ja | 1 of meer | Bevat informatie over de app voor een bepaald land/bepaalde regio. Voor elk land/elke regio waarin de app wordt vermeld, moet u een MarketData element opnemen. |
MarketData-element (onderdeel van App)
Dit element bevat informatie over de app voor een bepaald land/bepaalde regio. Voor elk land/elke regio waarin de app wordt vermeld, moet u een MarketData element opnemen. MarketData is een vereist onderliggend element van het element App.
MarketData bevat de volgende onderliggende elementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
naam | Ja | 1 | De naam van de app in dit land/deze regio. |
beschrijving | Ja | 1 | De beschrijving van de app voor dit land/deze regio. |
Prijs | Ja | 1 | De prijs van de app in dit land/regio. |
CurrencySymbol | Ja | 1 | Het valutasymbool dat in dit land/deze regio wordt gebruikt. |
Valutacode | Nee | 0 of 1 | De valutacode die in dit land/deze regio wordt gebruikt. |
MarketData heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
xml:lang- | Ja | Hiermee geeft u het land of de regio waarvoor de gegevens van de markt van toepassing zijn. |
Productelement (als onderdeel van ListingInformation)
In dit element wordt een invoegtoepassing voor de app beschreven. Product is een optioneel onderliggend element van het element ListingInformation en bevat een of meer MarketData-elementen.
Product heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
ProductId | Ja | Bevat de tekenreeks die door de app wordt gebruikt om de invoegtoepassing te identificeren. |
LicenseDuration | Nee | Geeft het aantal dagen aan waarvoor de licentie geldig is nadat het artikel is gekocht. De vervaldatum van de nieuwe licentie die is gemaakt door een productaankoop, is de aankoopdatum plus de licentieduur. Dit kenmerk wordt alleen gebruikt als het kenmerk ProductTypeDuurzaamis; dit kenmerk wordt genegeerd voor verbruiksartikelen en invoegtoepassingen. |
ProductType | Nee | Bevat een waarde om de persistentie van het product in de app te identificeren. De ondersteunde waarden zijn Durable (de standaardinstelling) en Verbruiksbare. Voor duurzame typen wordt aanvullende informatie beschreven door een element Product onder LicenseInformation; voor verbruikstypen wordt aanvullende informatie beschreven door een element Product onder ConsumableInformation. |
MarketData-element (subelement van Product)
Dit element bevat informatie over de invoegtoepassing voor een bepaald land/bepaalde regio. Voor elk land/elke regio waarin de invoegtoepassing wordt vermeld, moet u een element MarketData opnemen. MarketData is een vereist subelement van het Product.
MarketData bevat de volgende subelementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
naam | Ja | 1 | De naam van de invoegtoepassing in dit land/deze regio. |
Prijs | Ja | 1 | De prijs van de add-on in dit land of deze regio. |
CurrencySymbol | Ja | 1 | Het valutasymbool dat in dit land/deze regio wordt gebruikt. |
Valutacode | Nee | 0 ofwel 1 | De valutacode die in dit land/deze regio wordt gebruikt. |
Beschrijving | Nee | 0 of 1 | De beschrijving van de invoegtoepassing voor dit land/deze regio. |
Tag | Nee | 0 of 1 | De aangepaste gegevens voor ontwikkelaars (ook wel tag genoemd) voor de invoegtoepassing. |
trefwoorden | Nee | 0 of 1 | Bevat maximaal 10 trefwoorden elementen die de trefwoorden bevatten voor de invoegtoepassing. |
ImageUri | Nee | 0 ofwel 1 | De -URI voor de afbeelding in de vermelding van de invoegtoepassing. |
MarketData heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
xml:lang- | Ja | Hiermee geeft u het land of de regio waarvoor de gegevens van de markt van toepassing zijn. |
Het element LicenseInformation
In dit element worden de licenties beschreven die beschikbaar zijn voor deze app en de duurzame in-app-producten. LicenseInformation is een vereist onderdeel van het CurrentApp-element.
LicenseInformation bevat de volgende onderliggende elementen.
element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
App | Ja | 1 | Beschrijft de licentie van de app. |
Product | Nee | 0 of meer | Beschrijft de licentiestatus van een duurzame uitbreiding in de app. |
In de volgende tabel ziet u hoe u enkele algemene voorwaarden simuleert door waarden te combineren onder de elementen App en Product.
Voorwaarde om te simuleren | IsActive | IsTrial | Vervaldatum |
---|---|---|---|
Volledig gelicentieerd | waar | onwaar | Afwezig. Het is mogelijk aanwezig en geeft een toekomstige datum op, maar u wordt aangeraden het element weg te laten uit het XML-bestand. Als deze aanwezig is en een datum in het verleden opgeeft, wordt IsActive- genegeerd en als onwaar beschouwd. |
In de proefperiode | waar | waar | <een datum/tijd in de toekomst> Dit element moet aanwezig zijn omdat IsTrial- waar is. U kunt een website bezoeken die de huidige UTC (Coordinated Universal Time) toont om te bepalen hoe ver in de toekomst u dit moet instellen om de resterende proefperiode te krijgen die u wenst. |
Verlopen proefversie | vals | waar | <een datum/tijd in het verleden> Dit element moet aanwezig zijn omdat IsTrial- waar is. U kunt een website bezoeken met de huidige UTC (Coordinated Universal Time) om te weten wanneer 'het verleden' zich in UTC bevindt. |
Ongeldig | onwaar | onwaar | <elke waarde of niet gespecificeerd> |
App-element (onderliggend element van LicenseInformation)
In dit element wordt de licentie van de app beschreven. App- is een vereist kind van de LicenseInformation.
App- bevat de volgende onderliggende elementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
IsActief- | Ja | 1 | Beschrijft de huidige licentiestatus van deze app. De waarde waar geeft aan dat de licentie geldig is; onwaar geeft een ongeldige licentie aan. Normaal gesproken is deze waarde waar, ongeacht of de app een proefversie heeft of niet. Stel deze waarde in op onwaar om te testen hoe uw app zich gedraagt wanneer deze een ongeldige licentie heeft. |
IsTrial | Ja | 1 | Beschrijft de huidige evaluatiestatus van deze app. De waarde waar geeft aan dat de app wordt gebruikt tijdens de proefperiode; onwaar geeft aan dat de app zich niet in een proefversie bevindt, omdat de app is gekocht of de proefperiode is verlopen. |
Vervaldatum | Nee | 0 of 1 | De datum waarop de proefperiode voor deze app verloopt, in Coordinated Universal Time (UTC). De datum moet worden uitgedrukt als: jjjj-mm-ddThh:mm:ss.ssZ. 05:00 op 19 januari 2015 wordt bijvoorbeeld opgegeven als 2015-01-19T05:00:00.00Z. Dit element is vereist wanneer IsTrial is waar. Anders is dit niet vereist. |
Productelement (onderliggend element van LicenseInformation)
Dit element beschrijft de licentiestatus van een duurzame invoegtoepassing in de app. Product is een optioneel kindelement van het LicenseInformation.
Product bevat de volgende onderliggende elementen.
Element | Vereist | Hoeveelheid | Beschrijving |
---|---|---|---|
IsActive | Ja | 1 | Beschrijft de huidige licentiestatus van deze invoegtoepassing. De waarde waar geeft aan dat de invoegtoepassing kan worden gebruikt; onwaar geeft aan dat de invoegtoepassing niet kan worden gebruikt of niet is aangeschaft |
Vervaldatum | Nee | 0 of 1 | De datum waarop de invoegtoepassing verloopt, in Gecoördineerde Universale Tijd (UTC). De datum moet worden uitgedrukt als: jjjj-mm-ddThh:mm:ss.ssZ. 05:00 op 19 januari 2015 wordt bijvoorbeeld opgegeven als 2015-01-19T05:00:00.00Z. Als dit element aanwezig is, heeft de invoegtoepassing een vervaldatum. Als het niet aanwezig is, verloopt de invoegtoepassing niet. |
Product heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
ProductId | Ja | Bevat de tekenreeks die door de app gebruikt wordt om de invoegtoepassing te identificeren. |
OfferId | Nee | Bevat de tekenreeks die door de app wordt gebruikt om de categorie te identificeren waartoe de invoegtoepassing behoort. Dit biedt ondersteuning voor grote itemcatalogussen, zoals beschreven in Een grote catalogus met in-app-producten beheren. |
Simulatie-element
In dit element wordt beschreven hoe aanroepen naar verschillende CurrentAppSimulator methoden tijdens het testen in de app werken. Simulatie is een optioneel onderliggend element van het CurrentApp element en bevat nul of meer DefaultResponse--elementen.
Simulatie heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
Simulatiemodus | Nee | Waarden kunnen Interactief of Automatischzijn. Wanneer dit kenmerk is ingesteld op Automatisch, retourneren de methoden automatisch de opgegeven HRESULT-foutcodes. Dit kan worden gebruikt bij het uitvoeren van geautomatiseerde testcases. |
Het element DefaultResponse
In dit element wordt de standaardfoutcode beschreven die wordt geretourneerd door een CurrentAppSimulator-methode. DefaultResponse is een optioneel onderliggend element van het Simulatie-element.
DefaultResponse- heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
MethodName | Ja | Wijs dit kenmerk toe aan een van de opsommingswaarden die worden weergegeven voor het StoreMethodName- type in het schema. Elk van deze enum-waarden vertegenwoordigt een CurrentAppSimulator-methode waarvoor u tijdens het testen een retourwaarde voor foutcodes in uw app wilt simuleren. De waarde RequestAppPurchaseAsync_GetResult geeft bijvoorbeeld aan dat u de foutcode retourwaarde van de RequestAppPurchaseAsync- methode wilt simuleren. |
HResult | Ja | Wijs dit kenmerk toe aan een van de enum-waarden voor het type ResponseCodes in het schema. Elk van deze enumwaarden vertegenwoordigt de foutcode die u wilt retourneren voor de methode die is toegewezen aan het kenmerk MethodName voor dit DefaultResponse--element. |
ConsumableInformation-element
In dit element worden de verbruikbare invoegtoepassingen voor deze app beschreven. ConsumableInformation is een optioneel onderliggend element van de CurrentApp en kan het nul of meer elementen Product bevatten.
Productelement (onderliggend element van ConsumableInformation)
In dit element wordt een verbruiksartikel beschreven. Product is een optioneel subelement van het ConsumableInformation element.
Product heeft de volgende kenmerken.
Attribuut | Vereist | Beschrijving |
---|---|---|
ProductId | Ja | Bevat de tekenreeks die door de app wordt gebruikt om het verbruiksartikel te identificeren. |
TransactionId | Ja | Bevat een GUID (als een tekenreeks) die door de app wordt gebruikt om de aankooptransactie van een verbruiksgoed bij te houden via het proces van vervulling. Zie Het inschakelen van verbruikbare in-app-productaankopen. |
status | Ja | Bevat de tekenreeks die door de app wordt gebruikt om de uitvoeringsstatus van een verbruiksbaar aan te geven. Waarden kunnen worden Actief, AankoopTeruggedraaid, AankoopInBehandelingof Serverfout. |
OfferId | Nee | Bevat de tekenreeks die door de app wordt gebruikt om de categorie te identificeren waarin het verbruiksgoederen behoort. Dit biedt ondersteuning voor grote itemcatalogussen, zoals beschreven in Een grote catalogus met in-app-producten beheren. |