Implementering av In-App Purchase i Windows 8 apps (C#)

Windows 8 tilbyr deg som utvikler en rekke muligheter for å tjene penger. Dette er enten ved at du tar betalt for at brukeren skal kunne laste ned appen, eller via reklame og andre in-app kjøpsmuligheter. Hvilken av disse modellene som er best er helt variabelt i forhold til hva slags app du lager, og hva “markedet” ønsker. Valget er derfor vanskelig, og det gjelder å prøve forskjellige løsninger før du er konfortabel med ditt valg.

Du kan f.eks lage en gratis app som inneholder reklame, men også implementere en mulighet for at brukeren kan betale en gitt sum for å fjerne reklamen i appen. Dette kan en enkelt gjøre med In-App purchase, og kan f.eks være et valg i appens meny. Eller du kan tilby en versjon av appen gratis, men la brukeren ha muligheter for å låse opp funksjoner og områder basert på eget ønske.

 

I denne artikkelen vil jeg dele hvordan jeg gjorde det i spillet “Bandinos” til Windows 8.

 

Spillet er i utgangspunktet gratis å laste ned, og tilbyr en gratis verden med 10 nivåer. I figur 1 ser du første verden, og en knapp “Select” lar deg begynne å spille denne.

image

Fig 1 – Første verden er gratis

Om du velger å bla deg videre til neste verden vil den være synlig for å “friste” brukeren til å se hva som kommer og spille mer. Men for å fortsette må brukeren låse det opp via det vi kaller for “In-App purchase”.

image

Fig 2 – Kjøp “Bandinos Game Pack” for å fortsette

 

imageBrukeren får da informasjon om at denne delen er låst, men kan låses opp ved å trykke på Unlock. Da vil brukeren få tilgang til 4 nye verdener, 40 baner og 3 nye dinosaurer en kan bruke for å løse banene.

Figur 3 viser hvordan jeg har valgt å starte prosessen for å ta i mot en betaling, og låse opp nye nivåer i spillet.

Windows 8 SDKen inneholder en rekke funksjoner for at du enklest mulig kan implementere dette i dine apper. SDKen styrer alt fra å gi brukeren en sikker betalings-løsning med muligheter for å skrive inn kortnummer eller velge eksisterende kort, og en skjerm som viser at transaksjonen er godkjent.

Hele denne prosessen kan du kalle på  ved hjelp av èn linje kode, som returnerer et resultat basert på om brukeren klarte å betale, eller om prosessen ble avbrutt eller feilet slik at du kan håndtere de forskjellige situasjonene selv.
Figur 3 – lås opp for å fortsette

Hvordan brukergrensesnittet ser ut kan du se i figur 4 (under). Her ser du at brukeren må bekrefte kjøpet, skrive inn sitt passord og legge til en betalingsmetode.

image

image

image

Figur 4 – kjøp og betaling

Implementering

La oss se hvordan vi kan implementere dette! For det første må vi hente ned lisens-informasjonen brukeren har for appen.
Dette gjøres med CurrentApp.LicenseInformation.

var licenseInformation = CurrentApp.LicenseInformation; 

NB: Denne vil ikke fungere som forventet om appen ikke er i Windows Store. Om du jobber med debugging må du bruke CurrentAppSimulator fremfor CurrentApp

Nå kan du benytte det nye objektet til å sjekke om brukeren kjører en trial-versjon av appen, eller sjekke om diverse lisenser er aktive eller ikke.

En “In-App purchase” er egentlig en lisens brukeren kan betale en valgt sum for å åpne. Disse lisensene blir enkelt og greit identifisert med et navn som f.eks:

“BandinosGamePack1”
”MiniGamePack3”
”ExpansionPack1World6”
”DisableAds”

Disse legger du til under Advaced Featuers da du registrerer appen i Windows Store.
NB: Om du bruker CurrentAppSimulator trenger ikke featurene være registrert til appen i Windows Store. Den simulerer at den finnes uansett hva, og om du vil late som at transkasjonen er godkjent eller ikke osv.

Med dette kan du enkelt sjekke om brukeren har en lisens slik:

if (licenseInformation.ProductLicenses["BandinosGamePack1"].IsActive)
{
// har tilgang
}
else
{
// har ikke tilgang
}

Om brukeren ikke har tilgang kan du velge å f.eks disable knappen for å starte funksjonjaliteten og vise en dialog som sier at brukeren ikke har tilgang, vise hengelåser eller andre smarte skjermer for å si til brukeren at “du har ikke tilgang, men dette kan låses opp via en in-app purchase”.

Om da brukeren trykker på kjøp-knappen kan du kalle på RequestProductPurchaseAsync for å vise hele prosessen og dialogen rundt kjøpe (som vist i figur 4):

await CurrentProduct.RequestProductPurchaseAsync("featureName", false);

 

Denne vil hente ned informasjonen om featuren fra Windows Store, og hvilken pris du har satt den til. Da du lager nye features i Windows Store velger du navn, pris, varighet og beskrivelse. Denne informasjonen blir da vist her.

 

Lykke til med utviklingen, og ta kontakt om du skulle ha spørsmål! Smile