Freigeben über


Verwalten eines großen Katalogs von In-App-Produkten

Wenn Ihre App einen großen In-App-Produktkatalog anbietet, können Sie optional dem in diesem Thema beschriebenen Prozess folgen, um Den Katalog zu verwalten. In Versionen vor Windows 10 verfügt der Store über eine Beschränkung von 200 Produktauflistungen pro Entwicklerkonto, und der in diesem Thema beschriebene Prozess kann verwendet werden, um diese Einschränkung zu umgehen. Ab Windows 10 ist der Store nicht mehr auf die Anzahl der Produktauflistungen pro Entwicklerkonto beschränkt, und der in diesem Artikel beschriebene Prozess ist nicht mehr erforderlich.

Wichtig

In diesem Artikel wird die Verwendung von Membern des Windows.ApplicationModel.Store Namespace veranschaulicht. Dieser Namespace wird nicht mehr mit neuen Features aktualisiert, und es wird empfohlen, stattdessen den Windows.Services.Store Namespace zu verwenden. Der Windows.Services.Store-Namespace unterstützt die neuesten Add-On-Typen, z. B. vom Store verwaltete Verbrauchs-Add-Ons und Abonnements, und ist so konzipiert, dass er mit zukünftigen Produkttypen und Features kompatibel ist, die vom Partner Center und dem Store unterstützt werden. Der Windows.Services.Store-Namespace wurde in der Version 1607 von Windows 10 eingeführt und kann ausschließlich in Projekten verwendet werden, die auf Windows 10 Anniversary Edition (Build 14393 der Version 10.0) oder ein späteres Release in Visual Studio ausgelegt ist. Weitere Informationen finden Sie unter In-App-Käufe und Testversionen.

Um diese Funktion zu aktivieren, erstellen Sie eine Handvoll Produkteinträge für bestimmte Preisniveaus, wobei jedes Produkt Hunderte von Produkten in einem Katalog darstellen kann. Verwenden Sie die RequestProductPurchaseAsync-Methodenüberladung , die ein app-definiertes Angebot angibt, das einem im Store aufgeführten In-App-Produkt zugeordnet ist. Neben der Angabe einer Angebots- und Produktzuordnung während des Aufrufs sollte Ihre App auch ein ProductPurchaseDisplayProperties-Objekt übergeben, das die Details des umfangreichen Katalogangebots enthält. Wenn diese Details nicht angegeben werden, werden stattdessen die Details für das aufgeführte Produkt verwendet.

Der Store verwendet nur die OfferId aus der Kaufanfrage in den resultierenden PurchaseResults. Dieser Vorgang ändert nicht direkt die Informationen, die ursprünglich beim Eintrag des In-App-Produkts im Store bereitgestellt wurden.

Voraussetzungen

  • In diesem Thema wird die Store-Unterstützung für die Darstellung mehrerer In-App-Angebote mithilfe eines einzelnen in-App-Produkts behandelt, das im Store aufgeführt ist. Wenn Sie mit In-App-Käufen nicht vertraut sind, lesen Sie "In-App-Produktkäufe aktivieren", um mehr über Lizenzinformationen zu erfahren und wie Sie Ihren In-App-Kauf im Store ordnungsgemäß auflisten.
  • Wenn Sie neue In-App-Angebote zum ersten Mal codieren und testen, müssen Sie das CurrentAppSimulator-Objekt anstelle des CurrentApp-Objekts verwenden. Auf diese Weise können Sie Ihre Lizenzlogik mithilfe simulierter Aufrufe an den Lizenzserver überprüfen, anstatt den Liveserver aufzurufen. Dazu müssen Sie die Datei namens WindowsStoreProxy.xml in %userprofile%\AppData\local\packages\<paketname>\LocalState\Microsoft\Windows Store\ApiData anpassen. Der Microsoft Visual Studio-Simulator erstellt diese Datei, wenn Sie Ihre App zum ersten Mal ausführen, oder Sie können auch eine benutzerdefinierte Zur Laufzeit laden. Weitere Informationen finden Sie unter Verwenden der WindowsStoreProxy.xml-Datei mit CurrentAppSimulator.
  • In diesem Thema wird auch auf Codebeispiele verwiesen, die im Store-Beispiel bereitgestellt werden. Dieses Beispiel ist eine hervorragende Möglichkeit, praktische Erfahrungen mit den verschiedenen Monetarisierungsoptionen zu erhalten, die für Universelle Windows-Plattform -Apps (UWP) bereitgestellt werden.

Tätigen der Kaufanforderung für das In-App-Produkt

Die Kaufanforderung für ein bestimmtes Produkt innerhalb eines großen Katalogs wird genauso behandelt wie jede andere Kaufanfrage innerhalb einer App. Wenn Ihre App die neue RequestProductPurchaseAsync-Methodenüberladung aufruft, stellt Ihre App sowohl eine OfferId als auch ein ProductPurchaseDisplayProperties-Objekt bereit, das mit dem Namen des In-App-Produkts gefüllt ist.

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.
}

Melden der Erfüllung des In-App-Angebots

Ihre App muss die Produkterfüllung an den Store melden, sobald das Angebot lokal erfüllt wurde. Wenn Ihre App in einem großen Katalogszenario keine Angebotserfüllung meldet, kann der Benutzer keine In-App-Angebote mit demselben Store-Produkteintrag erwerben.

Wie bereits erwähnt, verwendet der Store nur bereitgestellte Angebotsinformationen zum Auffüllen der PurchaseResults und erstellt keine dauerhafte Zuordnung zwischen einem großen Katalogangebot und dem Store-Produkteintrag. Daher müssen Sie die Benutzerberechtigung für Produkte nachverfolgen und produktspezifischen Kontext (z. B. den Namen des gekauften Elements oder Details dazu) für den Benutzer außerhalb des RequestProductPurchaseAsync-Vorgangs bereitstellen.

Der folgende Code veranschaulicht den Erfüllungsaufruf und ein UI-Messagingmuster, in das die spezifischen Angebotsinformationen eingefügt werden. Wenn keine spezifischen Produktinformationen vorhanden sind, verwendet das Beispiel Informationen aus dem Produkt 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;
}