Ein Königreich für einen Demo-Modus!

Sign in to queue

Description

Kürzlich habe ich euch erklärt, wie ihr das Thema Monetarisierung angehen könnt und bin dabei auf den Demo- oder Test-Modus zu sprechen gekommen. Allerdings habe ich die eigentliche Implementierung in dem betreffenden Beitrag lediglich gestreift, deswegen möchte ich die Gelegenheit nutzen, das ganze ausführlich zu erklären.

 Als erstes öffnet ihr die Klasse (oder das Codebehind), in der ihr die Überprüfung der Demolizenz erledigen wollt.

Ganz am Anfang müsst ihr den entsprechenden Namespace hinzufügen, nämlich:

using Windows.ApplicationModel.Store;

Weiterhin müsst ihr am Anfang der Klasse eine Variable anlegen, die die Lizenzinformationen enthalten soll:

 

var licenseInformation = CurrentAppSimulator.LicenseInformation;

Was hat es jetzt mit dem CurrentAppSimulator auf sich? Ganz einfach: wenn ihr die Funktionalitäten der Testversion sowie den reibungslosen Wechsel zur Vollversion testen wollt, solltet ihr nicht jedes Mal Geld ausgeben müssen. Dafür springt der CurrentAppSimulator ein, der den Kauf (inklusive möglicher Fehler) simuliert.

Wenn ihr das Spiel allerdings veröffentlicht, müsst ihr natürlich die "richtige" Schnittstelle ansprechen. Dann verwendet ihr einfach statt dessen "CurrentApp".

Um nicht vor der Veröffentlichung alle Instanzen von "CurrentAppSimulator" zu suchen und jeweils durch "CurrentApp" zu ersetzen, könnt ihr sogenannte Compiler-Direktiven verwenden.

Visual Studio baut automatisch zwei Modi ein, Debug und Release.

#if DEBUG
var licenseInformation = CurrentAppSimulator.LicenseInformation;
#else
var licenseInformation = CurrentApp.LicenseInformation;
#endif

Jetzt nehmen wir mal an, dass ihr im Frontend - also dem XAML - einen Kaufen-Button namens "BuyButton" - platziert habt. Der soll nur angezeigt werden, wenn das Spiel noch nicht gekauft wurde, also im Testmodus ausgeführt wird.

Das könnt ihr jetzt so umsetzen:

if (!licenseInformation.IsTrial)
{
BuyButton.Visibility = Visibility.Collapsed;
}
else
{
BuyButton.Visibility = Visibility.Visible;
}

Wenn die App NICHT im Test-Modus läuft, wird der Button nicht angezeigt ("Collapsed"). Wenn das Spiel allerdings im Testmodus ist, wird der Button angezeigt ("Visible").

Eine zweite Eigenschaft ist "IsActive". Im Windows Store könnt ihr bei der App-Einreichung bestimmen, wie lang der Testzeitraum sein soll. Wenn diese Zeit abläuft, wird "IsTrial" immer noch "True" zurückgeben, aber ihr müsst die Funktionen ja trotzdem sperren. Stellt euch vor, wir haben auf der Startseite einen Button "PlayButton", der deaktiviert sein soll, wenn die Lizenz inaktiv ist. Ihr könnt den Code natürlich effizienter gestalten, aber ich trenne hier mal die Bereiche für den einfachen Überblick.

if (licenseInformation.IsTrial) //ist die App im Test-Modus?
{
if (licenseInformation.IsActive) //ist die Lizenz noch aktiv?
{
PlayButton.IsEnabled = true;
}
//jetzt die Alternative, wenn der Testmodus abgelaufen ist.
else
{
PlayButton.IsEnabled = false;
}
}

So schauts aus, wenn der Testmodus läuft und aktiv ist:

Test-Modus läuft und ist aktiv

Sobald der Testzeitraum abgelaufen ist, passiert folgendes:

Testzeitraum ist abgelaufen.

 

So. Jetzt muss der Spieler allerdings noch die Gelegenheit bekommen, das Spiel auch tatsächlich zu kaufen. Das geht - natürlich - auch total einfach :) Nutzen wir mal den "BuyButton" dafür, den wir vorhin schon angezeigt haben.

Zuerst gehen wir in die Datei mit dem Frontend, also die XAML-Datei.
Dort schaut ihr in die Eigenschaften vom Button selbst, also den Teil in dem steht

<Button x:Name="BuyButton"/>

Diesen Button müsst ihr noch mit den Klick-Infos ergänzen - also was passiert, wenn der Spieler draufklickt? Am Ende sieht das ganze ungefähr so aus:

<Button x:Name="BuyButton" Click="BuyButton_Click"/>

Visual Studio bietet hier auch an, einen entsprechenden Event-Handler im Codebehind, also der dazugehörigen C#-Datei anzulegen. Dieser sieht dann so aus:

       private void BuyButton_Click(object sender, RoutedEventArgs e)
       {
        }

Hier kommt folgender Code rein:

await CurrentAppSimulator.RequestAppPurchaseAsync(true);

Da dies allerdings eine asynchrone Methode ist, müsst ihr die Methode selbst auch asynchron markieren - fügt einfach das Stichwörtchen "async" hinzu:

private async void BuyButton_Click(object sender, RoutedEventArgs e)

Wenn ich im Spiel jetzt auf den BuyButton klicke, siehts so aus:

 So sieht's aus, wenn man im Simulator auf "kaufen" klickt.

Jetzt muss noch irgendwo definiert werden, was mit Aktivierung der Lizenz passieren soll. Nachdem ihr die Variable licenseInformation angelegt und initialisiert habt, könnt ihr noch folgendes hinzufügen:

licenseInformation.LicenseChanged += licenseInformation_LicenseChanged;

Und weiter unten im Code genauer werden:

void licenseInformation_LicenseChanged()
{
BuyButton.Visibility = Visibility.Collapsed;
PlayButton.IsEnabled = true;       
}

 Generic Episode Image

Das wars dann auch schon - viel mehr ist nicht dabei. Setzt die Code-Schnipsel so ein, wie es am besten für eure App passt und probierts aus :)

The Discussion

Add Your 2 Cents