Excluir ou limitar recursos em uma versão de avaliação

Se você permitir que os clientes usem seu app gratuitamente durante um período de avaliação, incentive-os a atualizar para a versão completa do app excluindo ou limitando alguns recursos durante o período de avaliação. Determine quais recursos devem ser limitados antes de começar a codificação, depois certifique-se de que o seu aplicativo permita que eles funcionem após a compra de uma licença completa. Você também pode habilitar recursos, como faixas ou marcas-d'água, que são mostrados apenas durante a avaliação, antes de o cliente comprar o aplicativo.

Importante

Este artigo demonstra como usar os membros do namespace Windows.ApplicationModel.Store para implementar a funcionalidade de demonstração. Esse namespace não está sendo atualizado com os novos recursos e recomendamos que você use o namespace Windows.Services.Store em vez disso. O namespace Windows.Services.Store dá suporte aos tipos de complemento mais recentes, como complementos e assinaturas consumíveis gerenciados pela Store, e foi projetado para ser compatível com os tipos futuros de produtos e recursos compatíveis com o Partner Center e a Store. O namespace Windows.Services.Store foi introduzido no Windows 10, versão 1607 e pode ser usada somente em projetos para Windows 10 Anniversary Edition (10.0; Compilação 14393) ou uma versão posterior no Visual Studio. Para obter informações sobre como implementar a funcionalidade de demonstração usando o namespace Windows.Services.Store, consulte este artigo.

Pré-requisitos

Um aplicativo do Windows no qual devem ser adicionados os recursos que os clientes podem comprar.

Etapa 1: Escolha os recursos que você deseja habilitar ou desabilitar durante o período de avaliação.

O estado da licença atual de seu app é armazenado como propriedades da classe LicenseInformation. Geralmente, você coloca as funções que dependem do estado da licença em um bloco condicional, conforme descrito na próxima etapa. Ao considerar esses recursos, verifique se você pode implementá-los de maneira que funcionem em todos os estados de licença.

Decida também como você gostaria de habilitar as alterações na licença do aplicativo durante sua execução. O aplicativo de avaliação pode conter todos os recursos, mas ter faixas de anúncios no aplicativo que a versão paga não tem. O aplicativo de avaliação também pode desabilitar determinados recursos ou exibir mensagens regulares solicitando a compra.

Analise sobre o tipo de aplicativo sendo criado e uma boa estratégia de avaliação ou expiração para ele. Para uma versão de avaliação de um jogo, uma boa estratégia é limitar a quantidade de conteúdo do jogo que um usuário pode jogar. Para uma versão de avaliação de um utilitário, você pode considerar definir uma data de expiração ou limitar os recursos que um possível comprador pode usar.

Nos aplicativos não destinados a jogos, a configuração de uma data de expiração funciona bem, pois os usuários podem desenvolver um bom entendimento do aplicativo como um todo. Veja aqui alguns cenários comuns de expiração e as opções para lidar com eles.

  • A licença de avaliação expira enquanto o aplicativo está em execução

    Se a avaliação expirar enquanto o aplicativo estiver em execução, o aplicativo poderá:

    • Não fazer nada.
    • Exibir uma mensagem para o cliente.
    • Fechar.
    • Solicitar que o cliente faça a compra.

    A prática recomendada é exibir uma mensagem com uma solicitação de compra do aplicativo e, se o cliente comprá-lo, continuar com todos os recursos habilitados. Se o usuário não se decidir pela compra, feche o aplicativo ou lembre periodicamente o usuário para comprá-lo.

  • A licença de avaliação expira antes de o aplicativo ser iniciado

    Se a avaliação expirar antes de o usuário iniciar o aplicativo, ele não será iniciado. Em vez disso, os usuários veem uma caixa de diálogo que lhes dá a opção de comprar o aplicativo na loja.

  • O cliente compra o aplicativo enquanto ele está em execução

    Se o cliente comprar o aplicativo enquanto ele estiver em execução, aqui estão algumas ações que o aplicativo poderá executar.

    • Não fazer nada e manter o cliente no modo de avaliação enquanto o aplicativo não for reiniciado.
    • Agradeça-os pela compra ou exiba uma mensagem.
    • Habilitar silenciosamente os recursos disponibilizados pela licença completa (ou desabilitar os avisos de somente avaliação).

Se quiser detectar a mudança de licença e tomar alguma providência no seu aplicativo, adicione um manipulador de eventos para isso, conforme descrito na próxima etapa.

Etapa 2: Inicializar as informações de licença

Quando seu app estiver sendo inicializado, obtenha o objeto LicenseInformation do app, conforme mostrado neste exemplo. Pressupomos que licenseInformation seja uma variável global ou um campo global do tipo LicenseInformation.

Por enquanto, você receberá informações de licença simuladas usando CurrentAppSimulator, em vez de CurrentApp. Antes de enviar a versão do seu app à Loja, você deve substituir todas as referências a CurrentAppSimulator em seu código por 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...
}

Em seguida, adicione um manipulador de eventos para receber as notificações quando a licença for alterada durante a execução do app. A licença do aplicativo pode ser alterada quando o período de avaliação expira ou o cliente compra o aplicativo por meio de uma Loja, por exemplo.

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(); 
}

Etapa 3: Codificar recursos em blocos condicionais

Quando o evento de alteração da licença for gerado, o app deverá chamar a API de Licença para determinar se o status de avaliação foi alterado. O código nesta etapa mostra como estruturar o manipulador desse evento. Nesse ponto, se um usuário comprou o aplicativo, é uma prática recomendada fornecer comentários para o usuário informando que o status de licença foi alterado. Você pode precisar solicitar que o usuário reinicie o aplicativo, caso este tenha sido codificado assim. Mas faça essa transição de maneira mais transparente e suave possível.

Este exemplo mostra como avaliar o status de licença do aplicativo para que você possa habilitar ou desabilitar um recurso do aplicativo de forma adequada.

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

Etapa 4: Obter uma data de expiração da avaliação do aplicativo

Inclua o código para determinar a data de expiração da avaliação do app.

O código neste exemplo define uma função para obter a data de expiração da licença de avaliação do aplicativo. Se a licença ainda for válida, exiba a data de expiração com o número de dias que restam até a expiração da avaliação.

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

Etapa 5: Testar os recursos usando chamadas simuladas à API de Licença

Agora, teste seu app usando dados simulados. CurrentAppSimulator obtém informações de licenciamento específicas do teste de um arquivo XML chamado WindowsStoreProxy.xml, localizado em %UserProfile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. Você pode editar o WindowsStoreProxy.xml para alterar as datas de expiração simuladas do app e seus recursos. Teste todas as configurações possíveis de expiração e licença para verificar se tudo funciona conforme o esperado. Para obter mais informações, consulte Usando o arquivo WindowsStoreProxy.xml com CurrentAppSimulator.

Se esse caminho e esse arquivo não existirem, você deverá criá-los ou fornecê-los durante a instalação ou em tempo de execução. Se você tentar acessar a propriedade CurrentAppSimulator.LicenseInformation sem o WindowsStoreProxy.xml estar presente nesse local específico, receberá um erro.

Etapa 6: Substituir os métodos da API de Licença simulada pela API real

Depois de testar seu app com o servidor de licenças simuladas, e antes de enviá-lo a uma Loja para certificação, substitua CurrentAppSimulator por CurrentApp, conforme mostrado no código de exemplo a seguir.

Importante

Seu app deverá usar o objeto CurrentApp quando você o enviar a uma Store; caso contrário, haverá falha na certificação.

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

Etapa 7: Descrever para os clientes como funciona a versão de avaliação gratuita

Lembre-se de explicar como o app se comportará durante e após o período de avaliação gratuita, assim os clientes não serão surpreendidos pelo comportamento do app.

Para saber mais sobre a descrição de seu aplicativo, consulte Criar descrições de aplicativos.