День двадцать третий. Создание демо-версии

Вступление

Вы написали гениальную программу, которая сделает счастливым любого пользователя. Но пользователь недоверчив. Он не хочет покупать кота в мешке. Тогда вы предлагаете ему скачать демо-версию вашего приложения. Предположим, что в вашей игре игроку нужно пройти 50 уровней. Вы даете возможность в демо-версии пройти только первые пять уровней, а для дальнейшего прохождения нужно приобрести игру. И тогда покупатель понимает, что без вашего приложения нет жизни и с радостью покупает полную версию программы, а вы на вырученные деньги покупаете корм для кота.

Класс LicenseInformation

Добавьте на страницу ссылку на сборку Microsoft.Phone.Marketplace, в составе которой есть класс LicenseInformation. C его помощью можно создать нужную нам модель демо-версии.


using Microsoft.Phone.Marketplace;

// создаем экземпляр класса LicenseInformation
LicenseInformation li = new LicenseInformation();

if (!li.IsTrial())
{
	//Здесь код, доступный только тем, кто купил программу
}
else
{
	//Здесь общий код, доступный всем
}

Класс LicenseInformation имеет свойство типа Boolean IsTrial(), с помощью которого можно определить статус программы. Вы можете отслеживать статус программы при помощи оператора if.

Тестирование демо-режима

К сожалению, сейчас нет встроенного механизма для переключения между демо и полной версии программы, чтобы проверить работу программы в двух режимах. Поэтому воспользуемся обходным путем. Найдите оператор IF, который присутствует в файле App.xaml.cs и отвечает за отладку программы. И создайте в изолированном хранилище параметр trialMode для IsolatedStorageSetting.

Вот так будет выглядеть метод App() в файле App.xaml.cs для нашего случая. Мы устанавливем значение переменной trialMode в TRUE. Если вам нужно переключиться в другой режим, то установите для этой переменной значение False.


IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

public App()
{
	// Global handler for uncaught exceptions. 
	UnhandledException += Application_UnhandledException;

	settings["trialMode"] = false;

	// Show graphics profiling information while debugging.
	if (System.Diagnostics.Debugger.IsAttached)
	{
		settings["trialMode"] = true;
				
		// Display the current frame rate counters.
		Application.Current.Host.Settings.EnableFrameRateCounter = true;

		// Show the areas of the app that are being redrawn in each frame.
		//Application.Current.Host.Settings.EnableRedrawRegions = true;

		// Enable non-production analysis visualization mode, 
		// which shows areas of a page that are being GPU accelerated with a colored overlay.
		//Application.Current.Host.Settings.EnableCacheVisualization = true;
	}

	// Standard Silverlight initialization
	InitializeComponent();

	// Phone-specific initialization
	InitializePhoneApplication();
}

Теперь вы можете проверять, как работает программа в двух режимах, обрабатывая значение IsolatedStorageSettings. Вот код для файла MainPage.xaml.cs для такой проверки.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Marketplace;
using System.IO.IsolatedStorage;

namespace Day23_UsingTrial
{
	public partial class MainPage : PhoneApplicationPage
	{
		LicenseInformation li = new LicenseInformation();
		IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
		
		// Constructor
		public MainPage()
		{
			InitializeComponent();

			if (!li.IsTrial()||(bool)settings["trialMode"] == false)
			{
				//Do something that only paid users can do.
			}
			else if (li.IsTrial() || (bool)settings["trialMode"] == true)
			{
				//Do something that all users, trial or paid, can do.
			}
		}
	}
}

Напоминаю, что это самописный метод для тестирования программы, но он вполне работоспособен для использования. Если вы знаете способ лучше, то сообщите мне. А то кот просит жрать, и мне нужно срочно продать пару-другую копий своих программ.

Реклама