WP XNA 13: Trial

Windows Phone jako jedyna platforma umożliwia tworzenie aplikacji z tzw. Trial’em. Wiem, ktoś może powiedzieć, że przecież w AppStore czy Android Market też są aplikacje płatne i darmowe. Czym więc różni się Windows Phone? Tym, że możemy stworzyć jedną aplikację, która będzie jednocześnie wersją Trial i pełną, a Windows Phone Marketplace automatycznie zadba o procedurę kupna i podniesienia wersji z darmowej na pełną.

W tym poście opiszę moje podejście do tego tematu. Na koniec opiszę jakiego rodzaju Triale można stosować oraz na co zwrócić uwagę.

Ten wpis jest częścią cyklu o moich przygodach w tworzeniu gier XNA dla Windows Phone.

Założenia

  • Domyślnie aplikację (grę) traktujemy i piszemy jak wersję pełną z wszystkimi opcjami bajerami itd
  • Zastanów się, zbierz i zapisz co byś chciał aby było dostępne w wersji próbnej, a co w pełnej aplikacji
  • Chcemy aby w trakcie prac programistycznych można było w łatwy sposób testować wersję pełną i darmową (nawet na samym telefonie, bez aktywnego Visual Studio)
  • Po kupnie aplikacji z Trial do pełnej, po powrocie do aplikacji mają się odblokować wszystkie funkcje i ewentualna rozgrywka ma się toczyć dalej

IsTrial or not ?

Boss Hunter - Buy full versionCała zabawa w ograniczanie funkcjonalności gry to wstawianie kilku (lub więcej) if‚ów w odpowiednich miejscach naszego kodu. Np. gdy gracz zdobywa punkty albo coś kupuje w grze, Ty sprawdzasz czy osiągnął limit punktów i jeśli warunek jest spełniony wyświetlasz informację, że to jest Trial i zapraszamy do zakupienia pełnej wersji.

Zalecam umieszczenia takiej informacji w jednym centralnym miejscu, dostępnym z każdego miejsca naszej aplikacji (np. App.xaml.cs).

Tworzymy właściwość IsTrial, która będzie sterować resztą.

private static bool _isTrial = true;
public static bool IsTrial
{
	get
	{
		return _isTrial;
	}
}

Następnie tworzymy instancję klasy LicenseInformation:

private static LicenseInformation _licenseInfo = new LicenseInformation();

Na koniec musimy ustawić flagę IsTrial gdy użytkownik wchodzi do aplikacji (uruchamia lub wraca do niej). Dla wygody tworzymy metodę CheckLicense (później będziemy ja jeszcze modyfikować):

private void CheckLicense()
{
	_isTrial = _licenseInfo.IsTrial();
}

Całość umieść w App.xaml.cs, a wywołanie metody CheckLicense umieść w Application_Launching oraz Application_Activated.

A poniżej przykład sprawdzania w kodzie czy jesteśmy w Trialu:

if (App.IsTrial && player.Score >= 1000)
{
	// limit Trial osiagniety
	// wyswietl komunikat
}

Kupowanie pełnej wersji

Na początku napisałem, że Windows Phone umożliwia kupowanie pełnej wersji aplikacji z wersji próbnej-trial. Odesłanie użytkownika do Marketplace to tylko dwie linijki kodu. Ale aby podnieść poziom reużywalności naszego kodu postanowiłem zapakować te dwie linijki w metodę, która dodatkowo wyświetla uzytkownikowi stosowny komunikat i pyta go czy na pewno chce przejść do Marketplace.

using System.Windows;
using Microsoft.Phone.Tasks;

namespace Poniat.WindowsPhone
{
	public static class Licence
	{
		public static void BuyFullVersionPrompt(string message)
		{
			if (MessageBox.Show(message + " Go to Marketplace?", "Buy full version", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
			{
				var marketPlaceDetailTask = new MarketplaceDetailTask();
				marketPlaceDetailTask.Show();
			}
		}
	}
}

Powyższa metoda przyjmuje jeden parametr, a mianowicie kawałek napisu, który może opisać użytkownikowi co się stało, co zrobił i dlaczego powinien kupić pełną wersję naszej aplikacji.

Na koniec przykład wywołania powyższej metody:

if (App.IsTrial && player.Score >= 1000)
	Licence.BuyFullVersionPrompt("Trial version is limited to 1000 points.");

Wygodne testowanie Trial/Full w Debug

Symulate Trial and Full versionGdy już naszpikujemy nasz piękny kod dużą ilością kodu typu: if(App.IsTrial) .. czas na przetestowanie. Przedstawię rozwiązanie znalezione gdzieś w internecie (niestety już nie wiem gdzie to znalazłem). Rozwiązanie jest bardzo dobre i wręcz potrzebne, bo musimy przecież przetestować (za-symulować) sobie oba warianty.

Wracamy do App.xaml.cs do metody CheckLicense:

private void CheckLicense()
{
	#if DEBUG
		string message = "Press 'OK' to simulate trial mode. Press 'Cancel' to run the application in full version mode.";
		if (MessageBox.Show(message, "Debug Trial mode", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
		{
			_isTrial = true;
		}
		else
		{
			_isTrial = false;
		}

	#else
		_isTrial = _licenseInfo.IsTrial();
	#endif
}

Teraz gdy aplikacja jest skompilowana w Debug, za każdym razem kiedy sprawdzana jest licencja (czyli gdy aplikacja startuje lub jest przywracana) pojawi się komnikat czy chemy symulować Trial czy pełną.

Z kolei gdy kompilacja będzie w Release flaga IsTrial będzie ustawiana tak jak być powinna czyli z oficjalnej klasy LicenseInformation.

Rodzaje wersji Trial

  • Time limited – wersja próbna ograniczona czasowo. Pomysł fajny, ale mało efektywny. Użytkownik pobiera wersję próbną z limitem na 3 dni. W tym czasie dostaje pełną funkcjonalność aby mógł sprawdzić co nasza aplikacja potrafi. Po 3 dniach dostaje komunikat, że oto Trial się skończył i jeśli chce dalej używać aplikacji musi kupić pełną wersję. Ale uwaga! Jeśli użytkownik po zakończonym Trialu odinstaluje aplikację i chwilę później ponownie zainstaluje, ma nowe 3 dni Triala, a chyba nie o to nam chodziło… Jedyne obejście tego niedociągnięcia to posiadanie własnego serwisu online, który przy każdym uruchomieniu będzie sprawdzał czy dany użytkownik już używał danej aplikacji, jeśli tak to kiedy i czy może jej dalej używać.
  • Limited Functionality – ograniczona funkcjonalność. Zdecydowanie lepsze rozwiązanie. Takie podejście ja stosuję w swoich aplikacjach.
  • Mixed – ograniczenie czasowe oraz ograniczenie funkjonalności. Nikt nie powiedział, że nie można łączyć jednego i drugiego. Pytanie jaki ma to sens?

Zachęcam do komentowania. Wszelkie uwagi, pytania, wasze rozwiązania czy znalezione u mnie błędy bardzo mile widziane.

Advertisements

2 thoughts on “WP XNA 13: Trial

  1. Pingback: dotnetomaniak.pl

  2. Pingback: WP XNA 0: Wstęp | Wojciech Poniatowski [PL]

Możliwość komentowania jest wyłączona.