V dnešním díle se podíváme na nákupy z aplikací. Rozdělíme si je do dvou základních kategorií a vysvětlíme, jak nákupy z aplikací simulovat.
Nákupy z aplikací jsou pro malé -ale i nemalé- vývojáře jednou z nejlepších cest, jak na své práci vydělat nějaké peníze. V dnešní době je to dokonce jediný způsob, jak na určitých platformách na aplikaci něco vydělat. Určitě znáte spousty aplikací a her na mobilní, či tabletové platformě, které obsahují spoustu reklam, které si za malý poplatek můžete vypnout, nebo exkluzivní produkty, často je to například nová úroveň hry. Klasický příklad jak můžeme vydělat na aplikaci a vyhnout se pirátům (ano stále jsou tu tací, kteří nezaplatí za sebelepší aplikaci ani cent a radši jí ukradnou).
Máme 2 kategorie produktů. První kategorie “consumable“ jsou například ve hrách speciální mince, za které si uživatel může nakupovat malé vylepšení (například design postavičky). Do druhé kategorie spadají tzv. “durable“, věc kterou si jednou koupíme a můžeme jí využívat třeba na vždy (například speciální zbraň pro postavičku ve hře).
Ke konkrétnímu kódu a podrobnější problematice se dostaneme v příštím díle, ale rád bych ještě zmínil několik drobností.
Je potřeba si uvědomit, že na WinRT (na rozdíl od Silverlight) nemáme možnost testovat nákupy pomocí knihovny “Mock IaP“ a v lokální debug verzi nám nákupy NEBUDOU FUNGOVAT! Máme tedy na výběr ze dvou možností, jak implementaci IaPs otestovat. Já osobně preferuji kombinovat obě varianty, ale pokud jde ale jen o malou aplikaci s malou zákaznickou základnou, vystačíte si i s první variantou.
První varianta testování využívá tzv. “CurrentAppSimulator“. Funguje to tak, že namísto aby aplikace získávala informace o produktech, které vlastníme a které jsou k dispozici ke koupi ze Store, získává je z lokálního XML souboru.
Implementace je vskutku jednoduchá. Doporučuji kód rozdělit pomocí ‘#if DEBUG‘ podmínek. Takže například LicenceInfo se bude načítat takto:
#if DEBUG
var _licInfo = CurrentAppSimulator.LicenseInformation;
#else
var _licInfo = CurrentApp.LicenseInformation;
#endif
Simulátor inicializujeme takto:
StorageFolder proxyDataFolder = await Package.Current.InstalledLocation.GetFolderAsync("Data");
StorageFile proxyFile = await proxyDataFolder.GetFileAsync("WindowsStoreProxy.xml");
await CurrentAppSimulator.ReloadSimulatorAsync(proxyFile);
XML soubor jako takový vypadá například takto:
<?xml version="1.0" encoding="utf-16" ?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>988b90e4-5d4d-4dea-99d0-e423e414ffbc</AppId>
<LinkUri> </LinkUri>
<CurrentMarket>en-gb</CurrentMarket>
<AgeRating>12</AgeRating>
<MarketData xml:lang="en-gb">
<Name>App with several in-app products</Name>
<Description>Sample app for demonstrating an expiring in-app product and a consumable in-app product</Description>
<Price>0.00</Price>
<CurrencySymbol>£</CurrencySymbol>
</MarketData>
</App>
<Product ProductId="MORE_CASH_1000" LicenseDuration="0" ProductType="Consumable">
<MarketData xml:lang="en-gb">
<Name>Consumable Item</Name>
<Price>0.99</Price>
<CurrencySymbol>£</CurrencySymbol>
</MarketData>
</Product>
</ListingInformation>
<LicenseInformation>
<App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
</App>
</LicenseInformation>
<!--
<ConsumableInformation>
<Product ProductId="MORE_CASH_1000" TransactionId="00000001-0000-0000-0000-000000000000" Status="Active" />
</ConsumableInformation>
-->
</CurrentApp>
Druhý způsob je vytvoření beta aplikace. Vše se implementuje stejně, jako později do normálního vydání s tím rozdílem, že můžeme kontrolovat, kdo má do beta aplikace přístup. Nejlepší způsob je v betě vytvořit produkt, který je zadarmo a zkusit ho “nakoupit“ sám.
V příštím díle se podíváme na konkrétní implementaci a problematiku durable & consumable produktů a vysvětlíme si řešení free / pro & ads / ads free verzemi aplikace.
Toť pro dnešní díl vše a jako vždy přeji hodně štěstí a málo bugů! :)