8 Tage Windows Phone 8 | Tag #8: Brieftasche & In-App Käufe

Geschrieben am von leitning

Die­ser Arti­kel ist Tag #8 der Serie 8 Tage Win­dows Phone 8 von Geert van der Cruijsen.

Der Ori­gi­nal­ar­ti­kel befin­det sich hier: 8 days of Win­dows Phone 8 — Day 8: Wal­let and In-App Purcha­ses.

8 Tage Windows Phone 8

Will­kom­men zum letz­ten Arti­kel der Serie 8 Tage Win­dows Phone 8, wel­che sich mit den neuen Fea­tures der Win­dows Phone 8 Platt­form beschäf­tigt. Heute, am Tag 8, bespre­chen wir die Brief­ta­sche und In-App Käufe.

day8

Brief­ta­sche

Die Brieftaschen-Anwendung ist als Ort gedacht, in wel­chem alle mög­li­chen Anwen­dun­gen Dinge wie Deals, Kre­dit­kar­ten­in­for­ma­tio­nen, Bonus­punkte und der­glei­chen spei­chern kön­nen. Mit Hilfe der Wal­let API kön­nen Sie Ein­träge zur Brief­ta­sche hin­zu­fü­gen, diese lesen, ver­än­dern und löschen.

Als ers­tes wer­den wir in unse­rer Bei­spiel­an­wen­dung einen Deal zur Brief­ta­sche hin­zu­fü­gen. In die­sem Bei­spiel erstel­len wir einen Deal für ein Frei­bier, wel­chen der Benut­zer in sei­ner Lieb­lings­bar in Anspruch neh­men kann. Bevor wir mit Code anfan­gen, stat­ten wir unser WMAppManifest.xml mit der Wal­let Fähig­keit aus.

walletcapability

Danach erstel­len wir einen But­ton 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 Brief­ta­sche zu erstel­len. Wir begin­nen, indem wir ein neues Deal Objekt erstel­len und die­sem eine ein­deu­tige ID über­ge­ben. Auf dem Deal Objekt kön­nen Sie eine Reihe von Eigen­schaf­ten set­zen, wie z.B. Name, Bil­der und einen Bar­code. In unse­rem Bei­spiel habe ich einige der ein­fa­chen Eigen­schaf­ten mit Wer­ten belegt. Gerade die Bar­code Eigen­schaft kann aber sehr prak­tisch sein, etwa, wenn es daran geht, den Deal in einer Bar ein­zu­lö­sen. Nach­dem wir alle Eigen­schaf­ten gesetzt haben, kön­nen wir die Methode Save­Async auf­ru­fen und der Deal wird gespei­chert. Es ist gän­gige Pra­xis, danach die Brief­ta­sche zu öffnen, so dass der Benut­zer sehen kann, was dort gespei­chert wurde. Es gibt kei­nen spe­zi­el­len Laun­cher für die Brief­ta­sche. Statt­des­sen öffnen Sie eine spe­zi­elle URL — begin­nend mit wallet:// — um die Brief­ta­sche 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 Anwen­dung aus­füh­ren und auf den Free Beer But­ton drü­cken, wird sich die Brief­ta­sche öffnen und unser Deal wird sicht­bar sein. Wenn wir auf die­sen kli­cken, sehen wir seine Details. Wenn Sie einen Bar­code hin­zu­fü­gen, wird die­ser eben­falls hier sicht­bar sein. Wei­ter­hin gibt es eine Mög­lich­keit, die zum Deal gehö­rige Anwen­dung zu öffnen. Dabei wird der Wert der Eigen­schaft Navi­ga­ti­onURI ver­wen­det, die wir auf dem Deal Objekt set­zen kön­nen. Sie kön­nen die Deals hier auch als ver­braucht mar­kie­ren oder diese aus Ihrer Brief­ta­sche löschen.

wallet1

wallet2

wallet3

wallet4

Neben Deals kön­nen Sie auch Zah­lungs­mit­tel hin­ter­le­gen. Diese Objekte sind Dinge wie z.B. Bonus­punkte, die man beim Ein­kau­fen sam­melt. Oft kann man diese Punkte ein­lö­sen gegen irgend­eine Beloh­nung. Die Erstel­lung eines Zah­lungs­mit­tels läuft fast genau so ab wie die Erstel­lung eines Deals. Wir ver­wen­den dies­mal nur ein Pay­men­tIn­stru­ment Objekt. Die Klasse Pay­men­tIn­stru­ment hat eine Eigen­schaft, mit wel­cher Sie den Betrag set­zen kön­nen. Die­sen kön­nen Sie auch nach­träg­lich noch erhö­hen oder verringern.

Um die Zah­lungs­mit­tel in der Brief­ta­sche zu ver­wen­den, müs­sen Sie dem WMAppManifest.xml eine wei­tere Fähig­keit mit dem Namen ID_CAP_WALLET_PAYMENTINSTRUMENTS hinzufügen.

Zu guter Letzt kön­nen Sie der Brief­ta­sche gene­ri­sche Objekte hin­zu­fü­gen. Das könnte etwa eine Kun­den­karte mit einem Bar­code oder einer Num­mer sein, wel­che Sie in einem Laden als Stamm­kun­den iden­ti­fi­ziert. Gene­ri­sche Ein­träge in der Brief­ta­sche kön­nen Sie mit Hilfe des Wal­let­T­ran­sac­tio­nI­tem erstellen.

In-App Käufe

Ein wirk­lich wich­ti­ges Fea­ture von Win­dows Phone 8 ist die Mög­lich­keit, In-App Käufe zu nut­zen. In Win­dows Phone 7 konn­ten Sie nur zwi­schen kos­ten­lo­sen und zah­lungs­pflich­ti­gen Apps (evtl. mit Test­ver­sion) wäh­len. In-App Käufe eröff­nen ganz neue Mög­lich­kei­ten, mit einer App Geld zu ver­die­nen. Sie könn­ten z.B. ein kos­ten­lo­ses Spiel ent­wi­ckeln, in wel­chem der Nut­zer neue Levels für einen gewis­sen Betrag kau­fen kann. Ein wei­te­res Bei­spiel wäre eine Sport-Anwendung, in wel­cher Ihre Benut­zer die Push-Benachrichtigungen für eine Sai­son abon­nie­ren kön­nen, anstatt diese für immer zu bekom­men. Wie also machen wir das?

In-App Käufe müs­sen im Ent­wick­ler­por­tal erstellt wer­den. Log­gen Sie sich mit Ihrem Ent­wick­ler­konto auf dev.windowsphone.com ein und laden Sie eine neue Anwen­dung hoch oder navi­gie­ren Sie zu den Details einer exis­tie­ren­den Anwendung.

inapp1

Kli­cken Sie auf den Rei­ter Pro­ducts und dann auf „Add in-app pro­duct“. Damit erstel­len Sie ein neues Pro­dukt, wel­ches aus Ihrer App her­aus erwor­ben wer­den kann.

inapp2

Zunächst müs­sen wir die Eigen­schaf­ten des In-App Pro­dukts aus­fül­len. Diese beste­hen aus einem Namen und einem Iden­ti­fi­ka­tor. Die­ser Iden­ti­fi­ka­tor ist wich­tig, da wir über die­sen das Pro­dukt in unse­rer App anspre­chen können.

Wei­ter­hin kön­nen Sie fest­le­gen, ob es sich um ein dau­er­haf­tes oder ein zu ver­brau­chen­des Pro­dukt han­delt. Dau­er­hafte Pro­dukte kön­nen ein­mal erwor­ben wer­den und ste­hen dem Nut­zer danach unein­ge­schränkt zur Ver­fü­gung. Zu ver­brau­chende Pro­dukte wer­den ein­mal gekauft und ver­fal­len nach Benutzung.

inapp3

Zum Schluss wäh­len wir einen Preis und drü­cken auf Save. Danach geben wir eine Beschrei­bung für unser Pro­dukt an.

inapp4

Bei der Beschrei­bung müs­sen Sie einen Titel, einen aus­führ­li­chen Beschrei­bungs­text und ein Bild ange­ben. Drü­cken Sie danach wie­der Save.

inapp5

inapp6

Jetzt sind wir bereit, das In-App Pro­dukt ein­zu­rei­chen. Wenn wir Sub­mit drü­cken, wird unser Pro­dukt gespei­chert und wir kön­nen es nach der Zer­ti­fi­zie­rung in unse­rer Anwen­dung verwenden.

inapp7

Da wir jetzt ein In-App Pro­dukt defi­niert haben, kön­nen wir ver­su­chen, die­ses aus unse­rer App her­aus zu kaufen.

Fügen wir einen But­ton 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 Pro­dukt zu kau­fen. Als ers­tes holen wir uns eine Liste aller ver­füg­ba­ren Pro­dukte. Diese bekom­men wir vom Cur­ren­tApp Objekt, indem wir die Methode Load­Lis­tin­gIn­for­ma­tionAsync auf­ru­fen. Da wir wis­sen, dass es nur ein Pro­dukt gibt, neh­men wir eine Abkür­zung und grei­fen gleich auf den ers­ten Ein­trag zu. Wenn es meh­rere Pro­dukte gäbe, könn­ten Sie das gewünschte Pro­dukt mit Hilfe der ID aus­wäh­len. Sobald wir eine Refe­renz auf das Pro­dukt haben, kön­nen wir die Methode Request­Pro­duct­Purchase­Async auf­ru­fen, um den Store zu öffnen. Dort hat der Nut­zer die Mög­lich­keit, zu ent­schei­den, ob er die­sen Extra­kauf täti­gen möchte. Nach­dem der Nut­zer seine Ent­schei­dung getrof­fen hat, kom­men wir zurück in unse­ren Code, wo wir über­prü­fen kön­nen, ob das Pro­dukt nun auf Active gesetzt ist. Wenn die­ser Wert true ist, müs­sen wir die Methode Report­Pro­duct­Ful­fill­ment rufen, um den Store wis­sen zu las­sen, dass die App den Kauf regis­triert hat. Anschlie­ßend kön­nen wir irgendwo eine Eigen­schaft spei­chern, wel­che anzeigt, dass das zum Pro­dukt gehö­rige Fea­ture in der Anwen­dung frei­ge­schal­tet 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;
   }
}

Beach­ten Sie, dass wir in einem Pro­dukt kei­nen Extra-Code oder sons­ti­ges hin­zu­fü­gen. Es han­delt sich um nichts wei­ter als einen Boole’schen Wert, wel­cher auf true gesetzt wurde. In dem Bei­spiel, in dem der Nut­zer 30 Levels kau­fen kann, müs­sen diese bereits im Paket vor­han­den sein. Sie deak­ti­vie­ren ein­fach die ent­spre­chen­den Berei­che der Benut­zer­ober­flä­che, so lange der Wert durch den Kauf noch nicht auf true gesetzt wurde.

Ich mag die Mög­lich­kei­ten der In-App Käufe und glaube, dass dadurch mehr Fir­men, etwa Zei­tun­gen, dazu moti­viert wer­den, Apps für die Win­dows Phone Platt­form zu entwickeln.

Sie kön­nen das Bei­spiel­pro­jekt hier her­un­ter­la­den: http://sdrv.ms/QSJ2yx.

Das war’s Leute. Die Serie 8 Tage Win­dows Phone 8 ist zum Ende gekom­men. Hof­fent­lich hat Ihnen das Lesen die­ser Serie etwas Spaß gemacht und Sie haben dabei etwas gelernt.

Wenn Sie neue Fea­tures ver­misst haben soll­ten, las­sen Sie es mich wis­sen. Wenn mög­lich, kann ich noch einige wei­tere Arti­kel schreiben.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>