Dieser Artikel ist Tag #8 der Serie 8 Tage Windows Phone 8 von Geert van der Cruijsen.
Der Originalartikel befindet sich hier: 8 days of Windows Phone 8 — Day 8: Wallet and In-App Purchases.
Willkommen zum letzten Artikel der Serie 8 Tage Windows Phone 8, welche sich mit den neuen Features der Windows Phone 8 Plattform beschäftigt. Heute, am Tag 8, besprechen wir die Brieftasche und In-App Käufe.
- Tag 0: Einleitung zu den 8 Tagen Windows Phone 8
- Tag 1: Überblick über das SDK
- Tag 2: Live Tiles und Sperrbildschirm
- Tag 3: Der Emulator & das Simulation Dashboard
- Tag 4: Die neuen Bildschirmauflösungen
- Tag 5: .NET 4.5 & C# 5.0
- Tag 6: Die API zur Sprachsteuerung
- Tag 7: NFC und Bluetooth
- Tag 8: Brieftasche und In-App Käufe
Brieftasche
Die Brieftaschen-Anwendung ist als Ort gedacht, in welchem alle möglichen Anwendungen Dinge wie Deals, Kreditkarteninformationen, Bonuspunkte und dergleichen speichern können. Mit Hilfe der Wallet API können Sie Einträge zur Brieftasche hinzufügen, diese lesen, verändern und löschen.
Als erstes werden wir in unserer Beispielanwendung einen Deal zur Brieftasche hinzufügen. In diesem Beispiel erstellen wir einen Deal für ein Freibier, welchen der Benutzer in seiner Lieblingsbar in Anspruch nehmen kann. Bevor wir mit Code anfangen, statten wir unser WMAppManifest.xml mit der Wallet Fähigkeit aus.
Danach erstellen wir einen Button in der MainPage.xaml, um den neuen Freibier-Deal zu erzeugen.
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button x:Name="FreeBeerButton" Content="get 1 free beer deal!" Click="FreeBeerButton_Click_1"></Button> </StackPanel>
In dem Click Event fügen wir den Code hinzu, um den neuen Deal in der Brieftasche zu erstellen. Wir beginnen, indem wir ein neues Deal Objekt erstellen und diesem eine eindeutige ID übergeben. Auf dem Deal Objekt können Sie eine Reihe von Eigenschaften setzen, wie z.B. Name, Bilder und einen Barcode. In unserem Beispiel habe ich einige der einfachen Eigenschaften mit Werten belegt. Gerade die Barcode Eigenschaft kann aber sehr praktisch sein, etwa, wenn es daran geht, den Deal in einer Bar einzulösen. Nachdem wir alle Eigenschaften gesetzt haben, können wir die Methode SaveAsync aufrufen und der Deal wird gespeichert. Es ist gängige Praxis, danach die Brieftasche zu öffnen, so dass der Benutzer sehen kann, was dort gespeichert wurde. Es gibt keinen speziellen Launcher für die Brieftasche. Stattdessen öffnen Sie eine spezielle URL — beginnend mit wallet:// — um die Brieftasche zu öffnen.
private async void FreeBeerButton_Click_1(object sender, RoutedEventArgs e) { var beerDeal = new Deal("1FREEBEER"); beerDeal.MerchantName = "MyBar"; beerDeal.DisplayName = "1 free beer!"; beerDeal.Description = "collect 1 free beer at your favorite bar"; beerDeal.CustomerName = "Geert"; beerDeal.ExpirationDate = DateTime.Now.AddDays(1); beerDeal.IssuerName = "Your Favorite Bar"; beerDeal.NavigationUri = new Uri("/mainpage.xaml?deal=freebeer", UriKind.Relative); await beerDeal.SaveAsync(); Launcher.LaunchUriAsync(new Uri("wallet://", UriKind.RelativeOrAbsolute)); }
Wenn wir die Anwendung ausführen und auf den Free Beer Button drücken, wird sich die Brieftasche öffnen und unser Deal wird sichtbar sein. Wenn wir auf diesen klicken, sehen wir seine Details. Wenn Sie einen Barcode hinzufügen, wird dieser ebenfalls hier sichtbar sein. Weiterhin gibt es eine Möglichkeit, die zum Deal gehörige Anwendung zu öffnen. Dabei wird der Wert der Eigenschaft NavigationURI verwendet, die wir auf dem Deal Objekt setzen können. Sie können die Deals hier auch als verbraucht markieren oder diese aus Ihrer Brieftasche löschen.
Neben Deals können Sie auch Zahlungsmittel hinterlegen. Diese Objekte sind Dinge wie z.B. Bonuspunkte, die man beim Einkaufen sammelt. Oft kann man diese Punkte einlösen gegen irgendeine Belohnung. Die Erstellung eines Zahlungsmittels läuft fast genau so ab wie die Erstellung eines Deals. Wir verwenden diesmal nur ein PaymentInstrument Objekt. Die Klasse PaymentInstrument hat eine Eigenschaft, mit welcher Sie den Betrag setzen können. Diesen können Sie auch nachträglich noch erhöhen oder verringern.
Um die Zahlungsmittel in der Brieftasche zu verwenden, müssen Sie dem WMAppManifest.xml eine weitere Fähigkeit mit dem Namen ID_CAP_WALLET_PAYMENTINSTRUMENTS hinzufügen.
Zu guter Letzt können Sie der Brieftasche generische Objekte hinzufügen. Das könnte etwa eine Kundenkarte mit einem Barcode oder einer Nummer sein, welche Sie in einem Laden als Stammkunden identifiziert. Generische Einträge in der Brieftasche können Sie mit Hilfe des WalletTransactionItem erstellen.
In-App Käufe
Ein wirklich wichtiges Feature von Windows Phone 8 ist die Möglichkeit, In-App Käufe zu nutzen. In Windows Phone 7 konnten Sie nur zwischen kostenlosen und zahlungspflichtigen Apps (evtl. mit Testversion) wählen. In-App Käufe eröffnen ganz neue Möglichkeiten, mit einer App Geld zu verdienen. Sie könnten z.B. ein kostenloses Spiel entwickeln, in welchem der Nutzer neue Levels für einen gewissen Betrag kaufen kann. Ein weiteres Beispiel wäre eine Sport-Anwendung, in welcher Ihre Benutzer die Push-Benachrichtigungen für eine Saison abonnieren können, anstatt diese für immer zu bekommen. Wie also machen wir das?
In-App Käufe müssen im Entwicklerportal erstellt werden. Loggen Sie sich mit Ihrem Entwicklerkonto auf dev.windowsphone.com ein und laden Sie eine neue Anwendung hoch oder navigieren Sie zu den Details einer existierenden Anwendung.
Klicken Sie auf den Reiter Products und dann auf „Add in-app product“. Damit erstellen Sie ein neues Produkt, welches aus Ihrer App heraus erworben werden kann.
Zunächst müssen wir die Eigenschaften des In-App Produkts ausfüllen. Diese bestehen aus einem Namen und einem Identifikator. Dieser Identifikator ist wichtig, da wir über diesen das Produkt in unserer App ansprechen können.
Weiterhin können Sie festlegen, ob es sich um ein dauerhaftes oder ein zu verbrauchendes Produkt handelt. Dauerhafte Produkte können einmal erworben werden und stehen dem Nutzer danach uneingeschränkt zur Verfügung. Zu verbrauchende Produkte werden einmal gekauft und verfallen nach Benutzung.
Zum Schluss wählen wir einen Preis und drücken auf Save. Danach geben wir eine Beschreibung für unser Produkt an.
Bei der Beschreibung müssen Sie einen Titel, einen ausführlichen Beschreibungstext und ein Bild angeben. Drücken Sie danach wieder Save.
Jetzt sind wir bereit, das In-App Produkt einzureichen. Wenn wir Submit drücken, wird unser Produkt gespeichert und wir können es nach der Zertifizierung in unserer Anwendung verwenden.
Da wir jetzt ein In-App Produkt definiert haben, können wir versuchen, dieses aus unserer App heraus zu kaufen.
Fügen wir einen Button hinzu, um unsere 30 neuen Levels zu kaufen.
<Button x:Name="BuyLevelsButton" Content="buy 30 more levels!" Click="BuyLevelsButton_Click_1" ></Button>
Im Click Event fügen wir den Code hinzu, um unser Produkt zu kaufen. Als erstes holen wir uns eine Liste aller verfügbaren Produkte. Diese bekommen wir vom CurrentApp Objekt, indem wir die Methode LoadListingInformationAsync aufrufen. Da wir wissen, dass es nur ein Produkt gibt, nehmen wir eine Abkürzung und greifen gleich auf den ersten Eintrag zu. Wenn es mehrere Produkte gäbe, könnten Sie das gewünschte Produkt mit Hilfe der ID auswählen. Sobald wir eine Referenz auf das Produkt haben, können wir die Methode RequestProductPurchaseAsync aufrufen, um den Store zu öffnen. Dort hat der Nutzer die Möglichkeit, zu entscheiden, ob er diesen Extrakauf tätigen möchte. Nachdem der Nutzer seine Entscheidung getroffen hat, kommen wir zurück in unseren Code, wo wir überprüfen können, ob das Produkt nun auf Active gesetzt ist. Wenn dieser Wert true ist, müssen wir die Methode ReportProductFulfillment rufen, um den Store wissen zu lassen, dass die App den Kauf registriert hat. Anschließend können wir irgendwo eine Eigenschaft speichern, welche anzeigt, dass das zum Produkt gehörige Feature in der Anwendung freigeschaltet wurde.
private async void BuyLevelsButton_Click_1(object sender, RoutedEventArgs e) { var products = await CurrentApp.LoadListingInformationAsync(); var product1 = products.ProductListings.FirstOrDefault(); var boughtProduct = await CurrentApp.RequestProductPurchaseAsync(product1.Value.ProductId, true); if (CurrentApp.LicenseInformation.ProductLicenses[product1.Value.ProductId].IsActive) { CurrentApp.ReportProductFulfillment(product1.Value.ProductId); var saveBoughtProductstate = true; } }
Beachten Sie, dass wir in einem Produkt keinen Extra-Code oder sonstiges hinzufügen. Es handelt sich um nichts weiter als einen Boole’schen Wert, welcher auf true gesetzt wurde. In dem Beispiel, in dem der Nutzer 30 Levels kaufen kann, müssen diese bereits im Paket vorhanden sein. Sie deaktivieren einfach die entsprechenden Bereiche der Benutzeroberfläche, so lange der Wert durch den Kauf noch nicht auf true gesetzt wurde.
Ich mag die Möglichkeiten der In-App Käufe und glaube, dass dadurch mehr Firmen, etwa Zeitungen, dazu motiviert werden, Apps für die Windows Phone Plattform zu entwickeln.
Sie können das Beispielprojekt hier herunterladen: http://sdrv.ms/QSJ2yx.
Das war’s Leute. Die Serie 8 Tage Windows Phone 8 ist zum Ende gekommen. Hoffentlich hat Ihnen das Lesen dieser Serie etwas Spaß gemacht und Sie haben dabei etwas gelernt.
Wenn Sie neue Features vermisst haben sollten, lassen Sie es mich wissen. Wenn möglich, kann ich noch einige weitere Artikel schreiben.