Abilitare gli acquisti in-app di app e componenti aggiuntivi
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. Ad esempio, se l'utente ha attualmente una versione di valutazione dell'app, è possibile usare questo processo per acquistare una licenza completa per l'utente. In alternativa, è possibile usare questo processo per acquistare un componente aggiuntivo, ad esempio un nuovo livello di gioco per l'utente.
Lo spazio dei nomi Windows.Services.Store fornisce diversi metodi per richiedere l'acquisto di un'app o di un componente aggiuntivo:
- Se si conosce l'ID dello Store dell'app o del componente aggiuntivo, è possibile usare il metodo RequestPurchaseAsync della classe StoreContext.
- Se si ha già un oggetto StoreProduct, StoreSku o StoreAvailability che rappresenta l'app o il componente aggiuntivo, è possibile usare i metodi RequestPurchaseAsync di questi oggetti. Per esempi dei vari modi per recuperare StoreProduct nel codice, vedere Ottenere informazioni sul prodotto per app e componenti aggiuntivi.
Ogni metodo presenta all'utente un'interfaccia utente di acquisto standard, quindi si completa in modo asincrono al termine della transazione. Il metodo restituisce un oggetto che indica se la transazione ha avuto esito positivo.
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. Se l'app è destinata a una versione precedente di Windows 10, è necessario usare lo spazio dei nomi Windows.ApplicationModel.Store anziché Windows.Services.Store. Per altre informazioni, vedi questo articolo.
Prerequisiti
Questo esempio presenta i prerequisiti seguenti:
- Un progetto Visual Studio per un'app UWP (Universal Windows Platform) destinata a Windows 10 Anniversary Edition (10.0; Build 14393) o versione successiva.
- Aver creato un invio dell'app nel Centro per i partner e pubblicato l'app nello Store. Facoltativamente, è possibile configurare l'app in modo che non sia rilevabile nello Store durante il test. Per ulteriori informazioni, vedere le linee guida per i test.
- Se si desidera abilitare gli acquisti in-app per un componente aggiuntivo dell'app, è anche necessario creare il componente aggiuntivo nel Centro per i partner.
Il codice in questo esempio presuppone:
- Il codice è eseguito nel contesto di un oggetto Page che contiene un oggetto ProgressRing denominato
workingProgressRing
e un oggetto TextBlock denominatotextBlock
. Questi oggetti vengono usati per indicare che si sta verificando un'operazione asincrona e per visualizzare rispettivamente i messaggi di output. - Il file di codice contiene un'istruzione using per lo spazio dei nomi Windows.Services.Store.
- L'app è un'app per un singolo utente che viene eseguita solo nel contesto dell'utente che ha avviato l'app. Per ulteriori informazioni, vedere Acquisti in-app e versioni di valutazione.
Nota
Se si ha un'applicazione desktop che usa Desktop Bridge, può essere necessario aggiungere ulteriore codice non illustrato in questo esempio per configurare l'oggetto StoreContext. Per ulteriori informazioni, vedere Uso della classe StoreContext in un'applicazione desktop che usa Desktop Bridge.
Esempio di codice
Questo esempio illustra come usare il metodo RequestPurchaseAsync della classe StoreContext per acquistare un'app o un componente aggiuntivo con un ID dello Store noto. Per un'applicazione di esempio completa, vedere l'esempio di Store.
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;
}
}