Implementare una versione di prova dell'app

Se si configura l'app come versione di valutazione gratuita nel Centro per i partner in modo che i clienti possano usare gratuitamente l'app per un periodo di valutazione, è possibile invogliare i clienti a effettuare l'aggiornamento alla versione completa dell'app escludendo o limitando alcune funzionalità durante il periodo di valutazione. Determinare quali funzionalità devono essere limitate prima di iniziare a scrivere codice, quindi assicurarsi che l'app ne consenta il funzionamento solo quando si acquista una licenza completa. È anche possibile abilitare funzionalità, ad esempio banner o filigrane, visualizzate solo con la versione di valutazione prima che il cliente acquisti l'app.

Questo articolo illustra come usare i membri della classe StoreContext nello spazio dei nomi Windows.Services.Store per determinare se l'utente ha una licenza di valutazione per l'app e ricevere una notifica se lo stato della licenza cambia mentre l'app è in esecuzione.

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.

Linee guida per l'implementazione di una versione di valutazione

Lo stato di licenza corrente dell'app è archiviato come proprietà della classe StoreAppLicense. In genere si inseriscono funzioni che dipendono dallo stato della licenza in un blocco condizionale, come descritto nel passaggio successivo. Quando si valutano queste funzionalità, assicurarsi di poterle implementare in modo che funzionino in tutti gli stati della licenza.

Decidere anche come gestire le modifiche apportate alla licenza dell'app mentre è in esecuzione. L'app di valutazione può avere funzionalità complete ma includere banner pubblicitari in-app non presenti nella versione a pagamento. In alternativa, nell'app di valutazione possono essere disabilitate determinate funzionalità o possono venire visualizzati messaggi periodici che chiedono all'utente di effettuare l'acquisto.

Considerare il tipo di app che si sta creando e determinare la strategia migliore per la versione di valutazione o la scadenza. Per una versione di valutazione di un gioco, una buona strategia è limitare la quantità dei contenuti con cui l'utente può giocare. Per una versione di valutazione di un'utilità, è possibile impostare una data di scadenza o limitare le funzionalità che un potenziale acquirente può usare.

Per la maggior parte delle app non di gioco, l'impostazione di una data di scadenza è efficace poiché consente agli utenti di conoscere l'app completa. Ecco alcuni scenari di scadenza comuni e le opzioni per gestirle.

  • La licenza di valutazione scade mentre l'app è in esecuzione

    Se la versione di valutazione scade durante l'esecuzione dell'app, l'app può:

    • Non eseguire alcuna operazione.
    • Mostrare un messaggio al cliente.
    • Quasi.
    • Chiedere al cliente di acquistare l'app.

    La procedura consigliata consiste nel visualizzare un messaggio con una richiesta di acquisto dell'app dopodiché, se il cliente effettua l'acquisto, l'app prosegue con tutte le funzionalità abilitate. Se l'utente decide di non acquistarla, l'app si chiude o visualizza a intervalli regolari dei promemoria per l'acquisto.

  • La licenza di valutazione scade prima dell'avvio dell'app

    Se la versione di valutazione scade prima che l'utente avvii l'app, questa non si avvierà. Gli utenti visualizzano invece una finestra di dialogo che offre loro la possibilità di acquistare l'app dallo Store.

  • Il cliente acquista l'app mentre è in esecuzione

    Se il cliente acquista l'app mentre è in esecuzione, ecco alcune azioni che l'app può eseguire.

    • Non eseguire alcuna azione e lasciare che l'utente prosegua in modalità di valutazione fino a quando non riavvia l'app.
    • Ringraziare l'utente per l'acquisto o visualizzare un messaggio.
    • Abilitare automaticamente le funzionalità disponibili con una licenza completa (o disabilitare le notifiche della versione di valutazione).

Assicurarsi di illustrare il comportamento dell'app durante e dopo il periodo di valutazione gratuito, in modo che i clienti non restino sorpresi. Per ulteriori informazioni sulla descrizione dell'app, vedere Creare descrizioni dell'app.

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.
  • Si è creata un'app nel Centro per i partner configurata come versione di valutazione gratuita senza limite di tempo e la si è pubblicata 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.

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 denominato textBlock. 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

Al momento dell'inizializzazione dell'app, ottenere l'oggetto StoreAppLicense per l'app e gestire l'evento OfflineLicensesChanged per ricevere notifiche se la licenza cambia mentre l'app è in esecuzione. Ad esempio, la licenza dell'app può cambiare se il periodo di valutazione scade o se il cliente acquista l'app tramite uno Store. Quando la licenza cambia, ottenere la nuova licenza e abilitare o disabilitare di conseguenza una funzionalità dell'app.

A questo punto, se un utente ha acquistato l'app, è consigliabile comunicargli che lo stato della licenza è cambiato. Potrebbe essere necessario chiedere all'utente di riavviare l'app se è previsto dal codice, tuttavia è consigliabile rendere questa transizione il più agevole possibile.

private StoreContext context = null;
private StoreAppLicense appLicense = null;

// Call this while your app is initializing.
private async void InitializeLicense()
{
    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;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    // Register for the licenced changed event.
    context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}

private async void context_OfflineLicensesChanged(StoreContext sender, object args)
{
    // Reload the license.
    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense.IsActive)
    {
        if (appLicense.IsTrial)
        {
            textBlock.Text = $"This is the trial version. Expiration date: {appLicense.ExpirationDate}";

            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
}

Per un'applicazione di esempio completa, vedere l'esempio di Store.