Abilitare i componenti aggiuntivi di sottoscrizione per l'app
La tua app UWP (Universal Windows Platform) può offrire acquisti in-app di sottoscrizione componenti aggiuntivi ai tuoi clienti. Puoi usare le sottoscrizioni per vendere prodotti digitali nella tua app (ad esempio funzionalità dell'app o contenuti digitali) con periodi di fatturazione ricorrenti automatizzati.
Nota
Per abilitare l'acquisto di componenti aggiuntivi di sottoscrizione nell'app, il progetto deve essere destinato Windows 10 Anniversary Edition (10.0; Build 14393) o una versione successiva in Visual Studio (corrisponde a Windows 10 versione 1607) e deve usare le API nello spazio dei nomi Windows.Services.Store per implementare l'esperienza di acquisto in-app anziché lo spazio dei nomi Windows.ApplicationModel.Store. Per ulteriori informazioni sulle differenze tra questi namespace, vedere acquisti in-app e versioni di prova.
Evidenziazioni delle funzionalità
I componenti aggiuntivi di sottoscrizione per le app UWP supportano le funzionalità seguenti:
- È possibile scegliere tra periodi di sottoscrizione di 1 mese, 3 mesi, 6 mesi, 1 anno o 2 anni.
- È possibile aggiungere periodi di valutazione gratuita di 1 settimana o 1 mese alla sottoscrizione.
- Il Windows SDK offre le API che puoi usare nella tua app per ottenere informazioni sui componenti aggiuntivi di sottoscrizione disponibili per l'app e consentire l'acquisto di un componente aggiuntivo di sottoscrizione. Sono inoltre disponibili API REST che possono essere chiamate dai servizi per gestire le sottoscrizioni per un utente.
- È possibile visualizzare report analitici che forniscono il numero di acquisizioni di sottoscrizioni, sottoscrittori attivi e sottoscrizioni annullate in un determinato periodo di tempo.
- I clienti possono gestire la sottoscrizione nella pagina https://account.microsoft.com/services per il proprio account Microsoft. I clienti possono usare questa pagina per visualizzare tutte le sottoscrizioni acquisite, annullare una sottoscrizione e modificare la forma di pagamento associata alla sottoscrizione.
Passaggi per abilitare un componente aggiuntivo di sottoscrizione per l'app
Per abilitare l'acquisto di componenti aggiuntivi di sottoscrizione nell'app, seguire questa procedura.
Creare un invio di componente aggiuntivo per la sottoscrizione nel Centro per i partner e pubblicare l'invio. Quando segui il processo di invio del componente aggiuntivo, presta particolare attenzione alle seguenti proprietà:
Tipo di prodotto: assicurati di selezionare Sottoscrizione.
Periodo di abbonamento: Scegliere il periodo di fatturazione ricorrente per l'abbonamento. Non è possibile modificare il periodo di sottoscrizione dopo la pubblicazione del componente aggiuntivo.
Ogni componente aggiuntivo della sottoscrizione supporta un singolo periodo di sottoscrizione e un periodo di valutazione. È necessario creare un componente aggiuntivo di sottoscrizione diverso per ogni tipo di sottoscrizione che si vuole offrire nell'app. Ad esempio, se si vuole offrire una sottoscrizione mensile senza versione di valutazione, una sottoscrizione mensile con una versione di valutazione di un mese, una sottoscrizione annuale senza versione di valutazione e una sottoscrizione annuale con una versione di valutazione di un mese, è necessario creare quattro componenti aggiuntivi di sottoscrizione.
periodo di valutazione: è consigliabile scegliere un periodo di valutazione di 1 settimana o 1 mese per consentire agli utenti di provare il contenuto della sottoscrizione prima di acquistarlo. Non è possibile modificare o rimuovere il periodo di valutazione dopo che hai pubblicato il componente aggiuntivo dell'abbonamento.
Per acquisire una versione di valutazione gratuita della sottoscrizione, un utente deve acquistare la sottoscrizione tramite il processo di acquisto standard in-app, inclusa una forma valida di pagamento. Non vengono addebitati costi durante il periodo di prova. Al termine del periodo di valutazione, l'abbonamento viene convertito automaticamente nella sottoscrizione completa e lo strumento di pagamento dell'utente verrà addebitato per il primo periodo della sottoscrizione a pagamento. Se l'utente sceglie di annullare la sottoscrizione durante il periodo di valutazione, la sottoscrizione rimane attiva fino alla fine del periodo di valutazione. Alcuni periodi di valutazione non sono disponibili per tutti i piani di abbonamento.
Nota
Ogni cliente può acquisire una versione di valutazione gratuita per un componente aggiuntivo della sottoscrizione una sola volta. Dopo che un cliente acquisisce una versione di valutazione gratuita per una sottoscrizione, lo Store impedisce allo stesso cliente di acquisire nuovamente la stessa sottoscrizione di valutazione gratuita.
Visibilità: Se stai creando un add-on di test che userai solo per testare l’esperienza di acquisto in-app per il tuo abbonamento, ti consigliamo di selezionare una delle opzioni Nascoste nello Store. In caso contrario, è possibile selezionare l'opzione di visibilità migliore per lo scenario.
Prezzi: Scegli il prezzo del tuo abbonamento in questa sezione. Non è possibile aumentare il prezzo della sottoscrizione dopo la pubblicazione del componente aggiuntivo. Tuttavia, è possibile abbassare il prezzo in un secondo momento.
Importante
Per impostazione predefinita, quando si crea un componente aggiuntivo, il prezzo viene inizialmente impostato su Free. Poiché non è possibile aumentare il prezzo di un componente aggiuntivo di un abbonamento dopo aver completato l'invio del componente aggiuntivo, si assicuri di scegliere il prezzo del suo abbonamento qui.
Nell'app, usare le API nello spazio dei nomi Windows.Services.Store per determinare se l'utente corrente ha già acquisito il componente aggiuntivo della sottoscrizione e offrirlo in vendita all'utente come acquisto in-app. Per altri dettagli, vedere gli esempi di codice in questo articolo.
Verifica l'implementazione dell'acquisto in-app dell'abbonamento all'interno dell'app. Dovrai scaricare l'app una sola volta dallo Store al dispositivo di sviluppo per usarla per i test. Per altre informazioni, vedere le linee guida per i test per gli acquisti in-app.
Creare e pubblicare un invio di app che include il pacchetto dell'app aggiornato, incluso il codice testato. Per altre informazioni, vedere Invii di app.
Esempi di codice
Gli esempi di codice in questa sezione illustrano come usare le API nello spazio dei nomi Windows.Services.Store per ottenere informazioni sui componenti aggiuntivi di sottoscrizione per l'app corrente e richiedere l'acquisto di un componente aggiuntivo di sottoscrizione per conto dell'utente corrente.
Questi esempi presentano i prerequisiti seguenti:
- Un progetto di Visual Studio per un'app UWP (Universal Windows Platform) destinato a Windows 10 Anniversary Edition (10.0; Build 14393) o una versione successiva.
- Hai creato un invio di app nel Centro per i partner e questa app viene pubblicata nello Store. Facoltativamente, puoi configurare l'app in modo che non sia individuabile nello Store durante il test. Per altre informazioni, vedere le linee guida per i test .
- Hai creato un componente aggiuntivo di sottoscrizione per l'app nel Centro per i partner.
Il codice in questi esempi presuppone quanto segue:
- Il file di codice include usando istruzioni per gli spazi dei nomi Windows.Services.Store e System.Threading.Tasks.
- L'app è un'app a utente singolo che viene eseguita solo nel contesto dell'utente che ha avviato l'app. Per ulteriori informazioni, vedere acquisti in-app e prove.
Nota
Se si dispone di un'applicazione desktop che usa Desktop Bridge, potrebbe essere necessario aggiungere codice aggiuntivo non illustrato in questi esempi per configurare l'oggetto StoreContext. Per altre informazioni, vedere Uso della classe StoreContext in un'applicazione desktop che usa Desktop Bridge.
Acquistare un componente aggiuntivo per la sottoscrizione
Questo esempio illustra come richiedere l'acquisto di un componente aggiuntivo di sottoscrizione noto per l'app per conto del cliente corrente. Questo esempio illustra anche come gestire il caso in cui la sottoscrizione ha un periodo di valutazione.
- Il codice determina innanzitutto se il cliente ha già una licenza attiva per la sottoscrizione. Se il cliente ha già una licenza attiva, il codice deve sbloccare le funzionalità della sottoscrizione in base alle esigenze (perché è proprietario dell'app, questo viene identificato con un commento nell'esempio).
- Il codice ottiene quindi l'oggettoStoreProduct che rappresenta la sottoscrizione che si vuole acquistare per conto del cliente. Il codice presuppone che si conosca già l'ID dello Store del componente aggiuntivo di sottoscrizione che si vuole acquistare e che sia stato assegnato questo valore alla variabile subscriptionStoreId.
- Il codice determina quindi se una versione di prova è disponibile per l'abbonamento. Facoltativamente, l'app può usare queste informazioni per visualizzare i dettagli sulla versione di valutazione disponibile o sulla sottoscrizione completa al cliente.
- Infine, il codice chiama il metodo RequestPurchaseAsync di per richiedere l'acquisto della sottoscrizione. Se è disponibile una versione di valutazione per la sottoscrizione, la versione di valutazione verrà offerta al cliente per essere acquistata. In caso contrario, l'abbonamento completo verrà offerto per l'acquisto.
private StoreContext context = null;
StoreProduct subscriptionStoreProduct;
// Assign this variable to the Store ID of your subscription add-on.
private string subscriptionStoreId = "";
// This is the entry point method for the example.
public async Task SetupSubscriptionInfoAsync()
{
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.
}
bool userOwnsSubscription = await CheckIfUserHasSubscriptionAsync();
if (userOwnsSubscription)
{
// Unlock all the subscription add-on features here.
return;
}
// Get the StoreProduct that represents the subscription add-on.
subscriptionStoreProduct = await GetSubscriptionProductAsync();
if (subscriptionStoreProduct == null)
{
return;
}
// Check if the first SKU is a trial and notify the customer that a trial is available.
// If a trial is available, the Skus array will always have 2 purchasable SKUs and the
// first one is the trial. Otherwise, this array will only have one SKU.
StoreSku sku = subscriptionStoreProduct.Skus[0];
if (sku.SubscriptionInfo.HasTrialPeriod)
{
// You can display the subscription trial info to the customer here. You can use
// sku.SubscriptionInfo.TrialPeriod and sku.SubscriptionInfo.TrialPeriodUnit
// to get the trial details.
}
else
{
// You can display the subscription purchase info to the customer here. You can use
// sku.SubscriptionInfo.BillingPeriod and sku.SubscriptionInfo.BillingPeriodUnit
// to provide the renewal details.
}
// Prompt the customer to purchase the subscription.
await PromptUserToPurchaseAsync();
}
private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
StoreAppLicense appLicense = await context.GetAppLicenseAsync();
// Check if the customer has the rights to the subscription.
foreach (var addOnLicense in appLicense.AddOnLicenses)
{
StoreLicense license = addOnLicense.Value;
if (license.SkuStoreId.StartsWith(subscriptionStoreId))
{
if (license.IsActive)
{
// The expiration date is available in the license.ExpirationDate property.
return true;
}
}
}
// The customer does not have a license to the subscription.
return false;
}
private async Task<StoreProduct> GetSubscriptionProductAsync()
{
// Load the sellable add-ons for this app and check if the trial is still
// available for this customer. If they previously acquired a trial they won't
// be able to get a trial again, and the StoreProduct.Skus property will
// only contain one SKU.
StoreProductQueryResult result =
await context.GetAssociatedStoreProductsAsync(new string[] { "Durable" });
if (result.ExtendedError != null)
{
System.Diagnostics.Debug.WriteLine("Something went wrong while getting the add-ons. " +
"ExtendedError:" + result.ExtendedError);
return null;
}
// Look for the product that represents the subscription.
foreach (var item in result.Products)
{
StoreProduct product = item.Value;
if (product.StoreId == subscriptionStoreId)
{
return product;
}
}
System.Diagnostics.Debug.WriteLine("The subscription was not found.");
return null;
}
private async Task PromptUserToPurchaseAsync()
{
// Request a purchase of the subscription product. If a trial is available it will be offered
// to the customer. Otherwise, the non-trial SKU will be offered.
StorePurchaseResult result = await subscriptionStoreProduct.RequestPurchaseAsync();
// 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.Succeeded:
// Show a UI to acknowledge that the customer has purchased your subscription
// and unlock the features of the subscription.
break;
case StorePurchaseStatus.NotPurchased:
System.Diagnostics.Debug.WriteLine("The purchase did not complete. " +
"The customer may have cancelled the purchase. ExtendedError: " + extendedError);
break;
case StorePurchaseStatus.ServerError:
case StorePurchaseStatus.NetworkError:
System.Diagnostics.Debug.WriteLine("The purchase was unsuccessful due to a server or network error. " +
"ExtendedError: " + extendedError);
break;
case StorePurchaseStatus.AlreadyPurchased:
System.Diagnostics.Debug.WriteLine("The customer already owns this subscription." +
"ExtendedError: " + extendedError);
break;
}
}
Ottenere informazioni sui componenti aggiuntivi di sottoscrizione per l'app corrente
Questo esempio di codice illustra come ottenere informazioni per tutti i componenti aggiuntivi di sottoscrizione disponibili nell'app. Per ottenere queste informazioni, usare prima di tutto il metodo GetAssociatedStoreProductsA sync per ottenere la raccolta di oggetti StoreProduct che rappresentano ognuno dei componenti aggiuntivi disponibili per l'app. Ottenere quindi il StoreSku per ogni prodotto e usare le proprietà IsSubscription e SubscriptionInfo per accedere alle informazioni sulla sottoscrizione.
private StoreContext context = null;
public async Task GetSubscriptionsInfo()
{
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.
}
// Subscription add-ons are Durable products.
string[] productKinds = { "Durable" };
List<String> filterList = new List<string>(productKinds);
StoreProductQueryResult queryResult =
await context.GetAssociatedStoreProductsAsync(productKinds);
if (queryResult.ExtendedError != null)
{
// The user may be offline or there might be some other server failure.
System.Diagnostics.Debug.WriteLine($"ExtendedError: {queryResult.ExtendedError.Message}");
return;
}
foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
{
// Access the Store product info for the add-on.
StoreProduct product = item.Value;
// For each add-on, the subscription info is available in the SKU objects in the add-on.
foreach (StoreSku sku in product.Skus)
{
if (sku.IsSubscription)
{
// Use the sku.SubscriptionInfo property to get info about the subscription.
// For example, the following code gets the units and duration of the
// subscription billing period.
StoreDurationUnit billingPeriodUnit = sku.SubscriptionInfo.BillingPeriodUnit;
uint billingPeriod = sku.SubscriptionInfo.BillingPeriod;
}
}
}
}
Gestire le sottoscrizioni dei tuoi servizi
Dopo che l'app aggiornata si trova nello Store e i clienti possono acquistare il componente aggiuntivo per la sottoscrizione, potrebbero essere presenti scenari in cui è necessario gestire la sottoscrizione per un cliente. Sono disponibili API REST che è possibile chiamare dai servizi per eseguire le attività di gestione delle sottoscrizioni seguenti:
Ottenere le sottoscrizioni a cui un utente ha diritto di usare. Se la sottoscrizione fa parte di un servizio multipiattaforma, puoi chiamare questa API per determinare se l'utente specificato ha un diritto per la sottoscrizione e lo stato della sottoscrizione nel contesto dell'app UWP. È quindi possibile usare queste informazioni per aggiornare lo stato della sottoscrizione in altre piattaforme supportate dal servizio.
Modificare lo stato di fatturazione di una sottoscrizione per un determinato utente. Usare questa API per annullare, estendere o disabilitare il rinnovo automatico per una sottoscrizione.
Cancellazioni
I clienti possono usare la pagina https://account.microsoft.com/services per l'account Microsoft per visualizzare tutte le sottoscrizioni acquisite, annullare un abbonamento e modificare la forma di pagamento associata alla sottoscrizione. Quando un cliente annulla una sottoscrizione usando questa pagina, continua ad avere accesso alla sottoscrizione per la durata del periodo di fatturazione corrente. Non ricevono un rimborso per una parte del periodo di fatturazione corrente. Al termine del periodo di fatturazione corrente, la sottoscrizione viene disattivata.
È anche possibile annullare una sottoscrizione per conto di un utente usando l'API REST per modificare lo stato di fatturazione di una sottoscrizione per un determinato utente.
Rinnovi e periodi di tolleranza delle sottoscrizioni
A un certo punto durante ogni periodo di fatturazione, tenteremo di addebitare la carta di credito del cliente per il periodo di fatturazione successivo. Se l'addebito ha esito negativo, la sottoscrizione del cliente entra nello stato di. Ciò significa che la sottoscrizione è ancora attiva per il resto del periodo di fatturazione corrente, ma tenteremo periodicamente di addebitare la carta di credito per rinnovare automaticamente la sottoscrizione. Questo stato può durare fino a due settimane, fino alla fine del periodo di fatturazione corrente e alla data di rinnovo per il periodo di fatturazione successivo.
Non sono disponibili periodi di tolleranza per la fatturazione della sottoscrizione. Se non è possibile addebitare correttamente la carta di credito del cliente entro la fine del periodo di fatturazione corrente, la sottoscrizione verrà annullata e il cliente non avrà più accesso alla sottoscrizione dopo il periodo di fatturazione corrente.
Scenari non supportati
Gli scenari seguenti non sono attualmente supportati per i componenti aggiuntivi della sottoscrizione.
- La vendita di sottoscrizioni ai clienti direttamente tramite lo Store non è attualmente supportata. Le sottoscrizioni sono disponibili solo per gli acquisti in-app di prodotti digitali.
- I clienti non possono cambiare i periodi di sottoscrizione usando la pagina https://account.microsoft.com/services per il proprio account Microsoft. Per passare a un periodo di sottoscrizione diverso, i clienti devono annullare la sottoscrizione corrente e quindi acquistare una sottoscrizione con un periodo di sottoscrizione diverso dall'app.
- Il passaggio a livelli non è attualmente supportato per i componenti aggiuntivi della sottoscrizione( ad esempio, il passaggio di un cliente da una sottoscrizione di base a una sottoscrizione Premium con altre funzionalità).
- sales e codici promozionali non sono attualmente supportati per aggiuntivi di abbonamento.
- Rinnovo degli abbonamenti esistenti dopo aver impostato la visibilità del componente aggiuntivo dell'abbonamento su Interrompi acquisizione. Per altri dettagli, vedere i prezzi e la disponibilità dei componenti aggiuntivi.