Abilitare gli acquisti in-app di app e componenti aggiuntiviEnable in-app purchases of apps and add-ons

Questo articolo illustra come usare i membri nello spazio dei nomi Windows. Services. Store per richiedere l'acquisto dell'app corrente o di uno dei relativi componenti aggiuntivi per l'utente.This article demonstrates how to use members in the Windows.Services.Store namespace to request the purchase the current app or one of its add-ons for the user. Ad esempio, se l'utente ha una versione di prova dell'app, puoi usare questo processo per acquistare una licenza completa per l'utente.For example, if the user currently has a trial version of the app, you can use this process to purchase a full license for the user. In alternativa, puoi usare questo processo per acquistare un componente aggiuntivo, ad esempio un nuovo livello di gioco per l'utente.Alternatively, you can use this process to purchase an add-on, such as a new game level for the user.

Per richiedere l'acquisto di un'app o di un componente aggiuntivo, lo spazio dei nomi Windows. Services. Store fornisce diversi metodi:To request the purchase of an app or add-on, the Windows.Services.Store namespace provides several different methods:

Ogni metodo presenta un'interfaccia utente di acquisto standard all'utente e quindi viene completato in modo asincrono al termine della transazione.Each method presents a standard purchase UI to the user and then completes asynchronously after the transaction is complete. Il metodo restituisce un oggetto che indica se la transazione è riuscita.The method returns an object that indicates whether the transaction was successful.

Nota

Lo spazio dei nomi Windows. Services. Store è stato introdotto in Windows 10 versione 1607 e può essere usato solo nei progetti destinati a Windows 10 Anniversary Edition (10,0; Build 14393) o versione successiva in Visual Studio.The Windows.Services.Store namespace was introduced in Windows 10, version 1607, and it can only be used in projects that target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio. Se l'app è progettata per una versione precedente di Windows 10, devi usare lo spazio dei nomi Windows.ApplicationModel.Store anziché lo spazio dei nomi Windows.Services.Store.If your app targets an earlier version of Windows 10, you must use the Windows.ApplicationModel.Store namespace instead of the Windows.Services.Store namespace. Per altre informazioni, vedi questo articolo.For more information, see this article.

PrerequisitiPrerequisites

Per questo esempio sono previsti i prerequisiti seguenti:This example has the following prerequisites:

  • Un progetto di Visual Studio per un'app piattaforma UWP (Universal Windows Platform) (UWP) destinata a Windows 10 Anniversary Edition (10,0; Build 14393) o versione successiva.A Visual Studio project for a Universal Windows Platform (UWP) app that targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release.
  • È stato creato un invio di app nel centro per i partner e questa app è pubblicata nello Store.You have created an app submission in Partner Center and this app is published in the Store. Facoltativamente, è possibile configurare l'app in modo che non sia individuabile nell'archivio mentre viene testato.You can optionally configure the app so it is not discoverable in the Store while you test it. Per ulteriori informazioni, vedere le linee guidaper i test.For more information, see our testing guidance.
  • Se si vuole abilitare gli acquisti in-app per un componente aggiuntivo per l'app, è necessario creare anche il componente aggiuntivo in centroper i partner.If you want to enable in-app purchases for an add-on for the app, you must also create the add-on in Partner Center.

Il codice in questo esempio presuppone quanto segue:The code in this example assumes:

  • Il codice viene eseguito nel contesto di una classe Page che contiene un ProgressRing denominato workingProgressRing e un TextBlock denominato textBlock.The code runs in the context of a Page that contains a ProgressRing named workingProgressRing and a TextBlock named textBlock. Questi oggetti vengono usati per indicare che è in corso un'operazione asincrona e per visualizzare i messaggi di output, rispettivamente.These objects are used to indicate that an asynchronous operation is occurring and to display output messages, respectively.
  • Il file di codice include un'istruzione using per lo spazio dei nomi Windows.Services.Store.The code file has a using statement for the Windows.Services.Store namespace.
  • L'app è un'app per un singolo utente che viene eseguita solo nel contesto dell'utente che ha avviato l'app.The app is a single-user app that runs only in the context of the user that launched the app. Per altre informazioni, vedi Acquisti in-app e versioni di prova.For more information, see In-app purchases and trials.

Nota

Se si dispone di un'applicazione desktop che usa Desktop Bridge, potrebbe essere necessario aggiungere altro codice non illustrato in questo esempio per configurare l'oggetto StoreContext .If you have a desktop application that uses the Desktop Bridge, you may need to add additional code not shown in this example to configure the StoreContext object. Per altre informazioni, vedi Uso della classe StoreContext in un'applicazione desktop che usa il bridge desktop.For more information, see Using the StoreContext class in a desktop application that uses the Desktop Bridge.

Esempio di codiceCode example

Questo esempio illustra come usare il metodo RequestPurchaseAsync della classe StoreContext per acquistare un'app o un componente aggiuntivo usando un ID dello Store conosciuto.This example demonstrates how to use the RequestPurchaseAsync method of the StoreContext class to purchase an app or add-on with a known Store ID. Per un'applicazione di esempio completa, vedi Esempio dello Store.For a complete sample application, see the Store sample.

private StoreContext context = null;

public async void PurchaseAddOn(string storeId)
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StorePurchaseResult result = await context.RequestPurchaseAsync(storeId);
    workingProgressRing.IsActive = false;

    // Capture the error message for the operation, if any.
    string extendedError = string.Empty;
    if (result.ExtendedError != null)
    {
        extendedError = result.ExtendedError.Message;
    }

    switch (result.Status)
    {
        case StorePurchaseStatus.AlreadyPurchased:
            textBlock.Text = "The user has already purchased the product.";
            break;

        case StorePurchaseStatus.Succeeded:
            textBlock.Text = "The purchase was successful.";
            break;

        case StorePurchaseStatus.NotPurchased:
            textBlock.Text = "The purchase did not complete. " +
                "The user may have cancelled the purchase. ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.NetworkError:
            textBlock.Text = "The purchase was unsuccessful due to a network error. " +
                "ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.ServerError:
            textBlock.Text = "The purchase was unsuccessful due to a server error. " +
                "ExtendedError: " + extendedError;
            break;

        default:
            textBlock.Text = "The purchase was unsuccessful due to an unknown error. " +
                "ExtendedError: " + extendedError;
            break;
    }
}

VideoVideo

Guardare il video seguente per una panoramica su come implementare gli acquisti in-app nell'app.Watch the following video for an overview of how to implement in-app purchases in your app.