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. In releases vóór Windows 10 heeft de Store een limiet van 200 productvermeldingen per ontwikkelaarsaccount. Het proces dat in dit onderwerp wordt beschreven, kan worden gebruikt om deze beperking te omzeilen. Vanaf Windows 10 heeft de Store geen limiet voor het aantal productvermeldingen per ontwikkelaarsaccount en is het proces dat in dit artikel wordt beschreven, niet meer nodig.
Belangrijk
In dit artikel wordt beschreven hoe u leden van de Windows.ApplicationModel.Store naamruimte gebruikt. Deze naamruimte wordt niet meer bijgewerkt met nieuwe functies en u wordt aangeraden in plaats daarvan de Windows.Services.Store naamruimte te gebruiken. De Windows.Services.Store-naamruimte ondersteunt de nieuwste typen invoegtoepassingen, zoals door de Store beheerde invoegtoepassingen en abonnementen, en is ontworpen om compatibel te zijn met toekomstige typen producten en functies die worden ondersteund door partnercentrum en de Store. De Windows.Services.Store naamruimte is geïntroduceerd in Windows 10, versie 1607 en kan alleen worden gebruikt in projecten die gericht zijn op Windows 10 Jubileumeditie (10.0; Build 14393) of een latere release in Visual Studio. Zie in-app aankopen en proefversiesvoor meer informatie.
Als u deze mogelijkheid wilt inschakelen, maakt u een handvol productvermeldingen voor specifieke prijslagen, waarbij elk product honderden producten in een catalogus kan vertegenwoordigen. Gebruik de RequestProductPurchaseAsync methodeoverload waarmee een door de app gedefinieerde aanbieding wordt opgegeven die verbonden is met een winkelproduct. Naast het opgeven van een aanbieding en productkoppeling tijdens het gesprek, moet uw app ook een ProductPurchaseDisplayProperties object doorgeven dat de details van de uitgebreide catalogusaanbieding bevat. Als deze gegevens niet worden opgegeven, worden in plaats daarvan de details voor het vermelde product gebruikt.
De Store gebruikt alleen de offerId van de aankoopaanvraag in de resulterende PurchaseResults. Met dit proces wordt de oorspronkelijke informatie niet rechtstreeks gewijzigd wanneer het product in de Storevermeldt.
Voorwaarden
- In dit onderwerp wordt Store-ondersteuning behandeld voor de weergave van meerdere in-app-aanbiedingen met behulp van één enkel product dat in de Store is vermeld. Als u niet bekend bent met in-app-aankopen, raadpleegt u In-app-productaankopen inschakelen voor meer informatie over licentiegegevens en hoe u uw in-app-aankoop correct kunt vermelden in de Store.
- Wanneer u nieuwe in-app-aanbiedingen voor het eerst coderen en testen, moet u het CurrentAppSimulator--object gebruiken in plaats van het CurrentApp--object. Op deze manier kunt u uw licentielogica controleren met behulp van gesimuleerde aanroepen naar de licentieserver in plaats van de liveserver aan te roepen. Hiervoor moet u het bestand met de naam WindowsStoreProxy.xml aanpassen in %userprofile%\AppData\local\packages\<pakketnaam>\LocalState\Microsoft\Windows Store\ApiData. Met de Microsoft Visual Studio-simulator wordt dit bestand gemaakt wanneer u uw app voor de eerste keer uitvoert. U kunt ook een aangepaste app tijdens runtime laden. Zie Het WindowsStoreProxy.xml-bestand gebruiken met CurrentAppSimulatorvoor meer informatie.
- In dit onderwerp wordt ook verwezen naar codevoorbeelden in de Store-voorbeeld-. Dit voorbeeld is een uitstekende manier om praktische ervaring te krijgen met de verschillende opties voor het genereren van inkomsten die worden geboden voor UWP-apps (Universal Windows Platform).
De aankoopaanvraag indienen voor het product in de app
De aankoopaanvraag voor een specifiek product in een grote catalogus wordt op vrijwel dezelfde manier verwerkt als elke andere aankoopaanvraag binnen een app. Wanneer uw app de nieuwe RequestProductPurchaseAsync methode-overload aanroept, biedt uw app zowel een OfferId als een ProductPurchaseDisplayProperties object dat is gevuld met de naam van het in-app-product.
string offerId = "1234";
string displayPropertiesName = "MusicOffer1";
var displayProperties = new ProductPurchaseDisplayProperties(displayPropertiesName);
try
{
PurchaseResults purchaseResults = await CurrentAppSimulator.RequestProductPurchaseAsync(
"product1", offerId, displayProperties);
switch (purchaseResults.Status)
{
case ProductPurchaseStatus.Succeeded:
// Grant the user their purchase here, and then pass the product ID and transaction ID
// to currentAppSimulator.reportConsumableFulfillment to indicate local fulfillment to
// the Windows Store.
break;
case ProductPurchaseStatus.NotFulfilled:
// First check for unfulfilled purchases and grant any unfulfilled purchases from an
// earlier transaction. Once products are fulfilled pass the product ID and transaction
// ID to currentAppSimulator.reportConsumableFulfillment to indicate local fulfillment
// to the Windows Store.
break;
case ProductPurchaseStatus.NotPurchased:
// Notify user that the purchase was not completed due to cancellation or error.
break;
}
}
catch (Exception)
{
// Notify the user of the purchase error.
}
De uitvoering van de aanbieding in de app rapporteren
Uw app moet productafhandeling rapporteren aan de Store zodra de aanbieding lokaal is voltooid. Als uw app in een groot catalogusscenario geen aanbiedingsafhandeling rapporteert, kan de gebruiker geen in-app-aanbiedingen aanschaffen met behulp van dezelfde Store-productvermelding.
Zoals eerder vermeld, gebruikt de Store alleen opgegeven aanbiedingsgegevens om de PurchaseResultste vullen en wordt er geen permanente koppeling gemaakt tussen een grote catalogusaanbieding en winkelproductvermelding. Als gevolg hiervan moet u gebruikersrechten voor producten bijhouden en productspecifieke context opgeven (zoals de naam van het item dat wordt gekocht of details erover) aan de gebruiker buiten de RequestProductPurchaseAsync-bewerking.
De volgende code demonstreert de uitvoeringsaanroep en een UI-berichtpatroon waarin de specifieke aanbiedingsgegevens worden ingevoegd. Bij afwezigheid van die specifieke productgegevens gebruikt het voorbeeld informatie uit het product ListingInformation.
string offerId = "1234";
product1ListingName = product1.Name;
string displayPropertiesName = "MusicOffer1";
if (String.IsNullOrEmpty(displayPropertiesName))
{
displayPropertiesName = product1ListingName;
}
var offerIdMsg = " with offer id " + offerId;
if (String.IsNullOrEmpty(offerId))
{
offerIdMsg = " with no offer id";
}
FulfillmentResult result = await CurrentAppSimulator.ReportConsumableFulfillmentAsync(productId, transactionId);
switch (result)
{
case FulfillmentResult.Succeeded:
Log("You bought and fulfilled " + displayPropertiesName + offerIdMsg);
break;
case FulfillmentResult.NothingToFulfill:
Log("There is no purchased product 1 to fulfill.");
break;
case FulfillmentResult.PurchasePending:
Log("You bought product 1. The purchase is pending so we cannot fulfill the product.");
break;
case FulfillmentResult.PurchaseReverted:
Log("You bought product 1. But your purchase has been reverted.");
// Since the user' s purchase was revoked, they got their money back.
// You may want to revoke the user' s access to the consumable content that was granted.
break;
case FulfillmentResult.ServerError:
Log("You bought product 1. There was an error when fulfilling.");
break;
}