Implémenter une version d’évaluation de votre application

Si vous configurez votre application en tant qu’essai gratuit dans l’Espace partenaires afin que les clients puissent utiliser votre application gratuitement pendant une période d’essai, vous pouvez inciter vos clients à effectuer une mise à niveau vers la version complète de votre application en excluant ou en limitant certaines fonctionnalités pendant la période d’essai. Choisissez les fonctionnalités à limiter avant de commencer à coder, puis faites en sorte que votre application ne les rende disponibles qu’à l’achat de la licence complète. Vous pouvez également activer certaines fonctionnalités, telles que des bannières ou des filigranes, qui ne s’afficheront que pendant la période d’évaluation, avant l’achat de votre application par un client.

Cet article explique comment utiliser les membres de la classe StoreContext dans l’espace de noms Windows.Services.Store pour déterminer si l’utilisateur dispose d’une licence d’évaluation pour votre application et être averti si l’état de la licence change pendant l’exécution de votre application.

Notes

L’espace de noms Windows.Services.Store a été introduit dans Windows 10 version 1607 et ne peut être utilisé que dans les projets qui ciblent Windows 10 édition anniversaire (10.0 ; Build 14393) ou une version ultérieure dans Visual Studio. Si votre application cible une version antérieure de Windows 10, vous devez utiliser l’espace de noms Windows.ApplicationModel.Store à la place de l’espace de noms Windows.Services.Store. Pour plus d’informations, consultez cet article.

Recommandations en matière d’implémentation d’une version d’évaluation

L’état de licence actuel de votre application est stocké dans les propriétés de la classe StoreAppLicense. D’une manière générale, vous placez les fonctions qui dépendent de l’état de la licence dans un bloc conditionnel, comme nous le décrivons à l’étape suivante. Lorsque vous développez ces fonctionnalités, assurez-vous de pouvoir les implémenter de telle manière qu’elles fonctionnent avec tous les états de la licence.

Décidez également comment vous voulez gérer les modifications apportées à la licence de l’application lorsque celle-ci est en cours d’exécution. La version d’évaluation de votre application peut être entièrement fonctionnelle, mais comporter des bandeaux publicitaires intégrés à l’application, contrairement à la version payante. La version d’évaluation de votre application peut également être privée de certaines fonctionnalités ou afficher régulièrement des messages demandant à l’utilisateur de l’acheter.

Pensez au type d’application que vous développez et demandez-vous quelle est la meilleure stratégie d’évaluation ou d’expiration. Pour la version d’évaluation d’un jeu, une bonne stratégie est de limiter le contenu du jeu auquel un utilisateur peut avoir accès. Dans le cas de la version d’évaluation d’un utilitaire, vous pouvez envisager de définir une date d’expiration ou de limiter les fonctionnalités qu’un acheteur potentiel peut utiliser.

Pour la plupart des applications qui ne sont pas des jeux, la définition d’une date d’expiration est une bonne méthode, car cela permet aux utilisateurs d’avoir une idée correcte de l’application complète. Voici quelques scénarios d’expiration classiques et comment les gérer.

  • La licence d’évaluation expire tandis que l’application est en cours d’exécution.

    Si la version d’évaluation expire tandis que votre application est en cours d’exécution, cette dernière peut :

    • Ne rien faire.
    • Afficher un message à l’attention de votre client.
    • C’est presque ça.
    • Inviter votre client à acheter l’application.

    La pratique recommandée est d’afficher un message invitant l’utilisateur à acheter l’application, et si c’est le cas, de poursuivre l’exécution avec toutes les fonctionnalités activées. Sinon, fermez l’application ou redemandez régulièrement à l’utilisateur s’il souhaite acheter l’application.

  • La licence d’évaluation expire avant le lancement de l’application.

    Si la version d’évaluation expire avant que l’utilisateur ne lance l’application, cette dernière ne démarre pas. Au lieu de cela, une boîte de dialogue s’affiche pour donner à l’utilisateur la possibilité d’acheter votre application dans le Windows Store.

  • Le client achète l’application tandis que celle-ci est en cours d’exécution.

    Si le client achète votre application tandis que celle-ci est en cours d’exécution, voici quelques actions possibles.

    • Ne rien faire et continuer en mode d’évaluation jusqu’au redémarrage de l’application.
    • Les remercier de leur achat ou afficher un message.
    • Activer de manière silencieuse les fonctionnalités qui sont disponibles avec une licence complète (ou désactiver les notifications réservées à la version d’évaluation).

Prenez soin d’expliquer à vos clients comment votre application se comportera pendant et après la période d’évaluation gratuite afin qu’ils ne soient pas surpris. Pour plus d’informations sur la description de votre application, voir Créer des descriptions d’application.

Prérequis

La configuration requise pour cet exemple est la suivante :

  • Un projet Visual Studio pour une application plateforme Windows universelle (UWP) qui cible Windows 10 édition anniversaire (10.0; Build 14393) ou une version ultérieure.
  • Vous avez créé une application dans l’Espace partenaires configurée en tant qu’essai gratuit sans limite de temps et cette application est publiée dans le Windows Store. Vous pouvez éventuellement configurer l’application afin qu’elle ne soit pas détectable dans le Windows Store pendant que vous la testez. Pour plus d’informations, consultez nos conseils de test.

Le code de cet exemple se base sur les hypothèses suivantes :

  • Le code s’exécute dans le contexte d’une Page qui contient un ProgressRing nommé workingProgressRing et un TextBlock nommé textBlock. Ces objets sont utilisés pour respectivement indiquer qu’une opération asynchrone est en cours et afficher les messages de sortie.
  • Le fichier de code contient une instruction using pour l’espace de noms Windows.Services.Store.
  • Cette application mono-utilisateur ne s’exécute que dans le contexte de l’utilisateur qui l’a lancée. Pour plus d’informations, consultez Versions d’évaluation et achats in-app.

Notes

Si vous avez une application de bureau qui utilise le Pont du bureau, vous devrez peut-être ajouter du code supplémentaire non indiqué dans cet exemple pour configurer l’objet StoreContext. Pour plus d’informations, voir Utilisation de la classe StoreContext dans une application de bureau qui utilise Desktop Bridge.

Exemple de code

Lors du lancement de votre application, obtenez l’objet StoreAppLicense de votre application et gérez l’événement OfflineLicensesChanged pour recevoir des notifications de modification de la licence pendant l’exécution de l’application. Par exemple, la licence de l’application peut changer si la période d’évaluation arrive à expiration ou si le client achète l’application par le biais du Windows Store. Quand la licence change, obtenez la nouvelle et activez ou désactivez une fonctionnalité de votre application en conséquence.

À ce stade, si un utilisateur a acheté l’application, il est de bonne pratique de lui indiquer que l’état de sa licence a été modifié. Demandez à l’utilisateur de redémarrer l’application si vous avez conçu votre application ainsi. Rendez cependant cette transition aussi simple que possible.

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.
        }
    }
}

Pour obtenir un exemple d’application complète, consultez Exemple Windows Store.