Escludere o limitare funzionalità in una versione di prova

Se si consente ai clienti di usare l'app gratuitamente 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.

Importante

Questo articolo illustra come usare i membri dello spazio dei nomi Windows.ApplicationModel.Store per implementare la funzionalità di valutazione. Questo spazio dei nomi non viene più aggiornato con nuove funzionalità ed è consigliabile usare invece lo spazio dei nomi Windows.Services.Store. Lo spazio dei nomi Windows.Services.Store supporta i tipi di componenti aggiuntivi più recenti, quali i componenti aggiuntivi di consumo gestiti dallo Store e le sottoscrizioni, ed è progettato per essere compatibile con tipi futuri di prodotti e funzionalità supportati dal Centro per i partner e dallo Store. 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. Per ulteriori informazioni sull'implementazione della funzionalità di valutazione mediante lo spazio dei nomi Windows.Services.Store, vedere questo articolo.

Prerequisiti

Un'app di Windows in cui aggiungere funzionalità che i clienti possono acquistare.

Passaggio 1: selezionare le funzionalità che si desidera abilitare o disabilitare durante il periodo di valutazione

Lo stato di licenza corrente dell'app è archiviato come proprietà della classe LicenseInformation. 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).

Se si desidera rilevare la modifica della licenza e intraprendere una determinata azione nell'app, è necessario aggiungere un gestore eventi a tale fine come descritto nel passaggio seguente.

Passaggio 2: inizializzare le informazioni sulla licenza

Al momento dell'inizializzazione dell'app, ottenere l'oggetto LicenseInformation per l'app come illustrato in questo esempio. Si presuppone che licenseInformation sia una variabile o un campo globale di tipo LicenseInformation.

Per il momento, si otterranno informazioni sulla licenza simulate usando CurrentAppSimulator anziché CurrentApp. Prima di inviare la versione di rilascio dell'app allo Store, è necessario sostituire tutti i riferimenti CurrentAppSimulator nel codice con CurrentApp.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Other app initialization code...
}

Aggiungere quindi un gestore eventi per ricevere notifiche quando la licenza cambia mentre l'app è in esecuzione. La licenza dell'app può cambiare, ad esempio, se il periodo di valutazione scade o se il cliente acquista l'app tramite uno Store.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

void LicenseInformation_LicenseChanged()
{
    // This method is defined later.
    ReloadLicense(); 
}

Passaggio 3: scrivere il codice delle funzionalità in blocchi condizionali

Quando viene generato l'evento di modifica della licenza, l'app deve chiamare l'API di licenza per determinare se lo stato di valutazione è cambiato. Il codice in questo passaggio illustra come strutturare il gestore per questo evento. 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.

Questo esempio mostra come valutare lo stato della licenza di un'app in modo che sia possibile abilitare o disabilitare di conseguenza una funzionalità dell'app.

void ReloadLicense()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
    else
    {
        // A license is inactive only when there' s an error.
    }
}

Passaggio 4: ottenere la data di scadenza della versione di valutazione di un'app

Includere il codice per determinare la data di scadenza della versione di valutazione dell'app.

Il codice in questo esempio definisce una funzione per ottenere la data di scadenza della licenza di valutazione dell'app. Se la licenza è ancora valida, visualizzare la data di scadenza con il numero di giorni rimanenti fino alla scadenza della versione di valutazione.

void DisplayTrialVersionExpirationTime()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            var longDateFormat = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");

            // Display the expiration date using the DateTimeFormatter.
            // For example, longDateFormat.Format(licenseInformation.ExpirationDate)

            var daysRemaining = (licenseInformation.ExpirationDate - DateTime.Now).Days;

            // Let the user know the number of days remaining before the feature expires
        }
        else
        {
            // ...
        }
    }
    else
    {
        // ...
    }
}

Passaggio 5: testare le funzionalità usando chiamate simulate all'API di licenza

Ora, testare l'app usando dati simulati. CurrentAppSimulator ottiene informazioni sulla licenza specifiche del test da un file XML denominato WindowsStoreProxy.xml, che si trova in %UserProfile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. È possibile modificare il file WindowsStoreProxy.xml per cambiare le date di scadenza simulate per l'app e per le relative funzionalità. Testare tutte le possibili configurazioni di scadenza e licenza per assicurarsi che tutto funzioni come previsto. Per ulteriori informazioni, vedere Uso del file WindowsStoreProxy.xml con CurrentAppSimulator.

Se questo percorso e file non esistono, è necessario crearli durante l'installazione o in fase di runtime. Se si tenta di accedere alla proprietà CurrentAppSimulator.LicenseInformation senza il file WindowsStoreProxy.xml presente nel percorso specifico, si riceverà un errore.

Passaggio 6: sostituire i metodi dell'API di licenza simulata con l'API effettiva

Dopo aver testato l'app con il server licenze simulato e prima di inviare l'app a uno Store per la certificazione, sostituire CurrentAppSimulator con CurrentApp, come illustrato nell'esempio di codice seguente.

Importante

L'app deve usare l'oggetto CurrentApp quando la si invia a uno Store, altrimenti la certificazione avrà esito negativo.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    // licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

Passaggio 7: descrivere il funzionamento della versione di valutazione gratuita ai clienti

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.