




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
概 練習 任務1–增加MockIAPLib庫支 任務2–添加永久任務3–測試永久任務4–添加消費任務5–測試消費練習 任務1–添加和技 任務2–在UI上增加應用任務3–測試應用總 概WindowsPhone應用的一個重要功能是——初次應用,然后通過內置功能應用的擴展,啟用模塊或者提供消費項目。所有的來自WindowsPhone商店的,都使用一個很著名并安全的API.因為您將在本實驗中使用WindowsPhone模擬器,而它沒有WindowsPhone商店的權限,我們將結合一個模擬庫,模擬WindowsPhone商店API,來開發和測試應用內,而無需連接到商店。模擬調用庫叫MockIAPLib,將被添加到我們的演示應用中來執行以下任務。你可以使用一個開發者過的WindowsPhone設備和一個可用的WindowsPhone商店賬號來實MockIAPLib就不是必須的。注意:本實驗不包括和功能請到Phone8app。WindowsPhone信息,請參閱MSDN目需 VisualStudioExpress2012forWindowsPhone或 VisualStudio2012withtheWindowsPhoneSDK一些WindowsPhone實驗結3MockIAPLib啟用應用內(從試用版的轉換測試機估計完成時60在本練習中,修改ContosoCookbook應用,以使在應用內配方組和烹飪時間模塊。我們加入MockIAPLib庫用來在WindowsPhone模擬器上測試WindowsPhone商店的API,而無需開發者的設備。在ContosoCookbook應用中,用戶將使用應用內,能比在最初版本的應用里瀏覽如,考慮第一人射擊游戲的,或流應用程序的時間。在ContosoCookbook應用中,用戶將使用應用內,各種配方的烹飪(分鐘),并使用設置一個提醒,當烹調時間結束時,的試用結束。當的事件使用完了后,它會。如果用戶想再次使用必須重新。任務1增加MockIAPLib庫支在這個任務中,我們要增加MockIAPLibWindowsPhone模擬器的應用程序。然后,我們將添加為WindowsPhoneStoreAPI的支持,在實際設備上使用。注注意MockIAPLib庫代碼會被加在"#ifDEBUG"條件塊之下。要運行帶WindowsStoreAPI“Release”或者刪除“DEBUG”“DEBUG”的Debug和Release/en-:導航到EX1begin打開ContosoBookbook.sln定位到"References"并選擇"AddReference…"(增加),通過點擊“瀏覽”來找到MockIAPLib庫定位到Assets文件夾,并增加MockIAPLib.dll作為一個#define#define#defineusingusingSystem.Xml.Linq;#ifDEBUGusingusingStore=MockIAPLib;usingStore=注意:如果是”DEBUG”編譯塊,WindowsPhone商店API。MockIAPLib庫APIWindows.ApplicationModel.StorepublicstaticStore.ListingInformationIAPListingInformation{get;MockIAPLib或WindowsPhone應用APIprivateasyncvoid{#if//UseMockAPIinsteadofrealstore#if//Clearthecacheeverytime.Removethistohavepersistence.varsri=App.GetResourceStream(newUri("Data\\MockupLicenseInfo.xml",Xdoc=X.Load(sri.Stream);stringxml=doc.ToString();MockIAP.SetListingInformation(1,"en-us","ContosoCookbookssampleapp","$5.99","ContosoCookbooks");#ifStore.CurrentApp.LicenseInformation.IsTrial=true;//LoadassociatedproductlistingsIAPListingInformation=await}注意:如果是注意:如果是Debug“#ifDEBUGMockIAPLibSetListingInformationxml文件來加載模擬的信息到的MockIAPLib庫。如果使用WindowsPhone商店,信息會被加到商店管理UI中,這當使用MockIAPLib庫時,我們可能會使得后保持應用啟動時重新清除MockIAPLib庫DONT_PRESERVE_LICENSE_INFO”條件編譯塊控制。安裝階段完成后,前面代碼的最后一行使得應用可以從WindowsPhone商店API通過LoadListingInformationAsync方法獲取當前信息。此方法不管我們是否使用MockIAPLib庫或真正的WindowsPhone商店API,都能返回所有能的和當前用戶可的信息。找到"Data"文件夾并導航到Data文件夾中的文件選擇器,并選擇MockupLicenseInfo.xmlMockupLicenseInfo.xml文件包含MockIAPLib庫所需的信息。在真實設備上,這些信息將被從WindowsPhone商店加載。證文件中了ProductListingsXML元素,它包含可用于的列表。每個ProductListing元素了產品的名稱和描述,它的唯一標識符,其產品類型(常用或消費XML格式可以被用來設定一系列搜索關鍵字或者應用中的”Tag”元素。xml格式被用來傳遞數據的應用程序的產品。在ContosoCookbook應用,我們在時使用”Tag”元<ProductListingKey="Italian"Purchased="false"<Name>Italian<Description>ItalianrecipespackforContosoCookbooksThisrecipepackincludesthefollowingLemonLinguinewithSpaghettiCapreseappdata:///Images/Italian/italiangroup.png</ImageUri> 任務2添加永#if#ifusingusingStore=MockIAPLib;usingStore=這些代碼和之前加過的一樣。我們要在所有需要用MocklAPLibFeatures類License.Phone.Store.LicenseInformation_infoprivateprivatestaticStore.LicenseInformation_info#if就像之前。DebugMockIAPLib。Release版本設定我們使用WindowsPhoneStoreAPI的LicenseInformation。要在UI中正確顯示食譜菜單組,我們需要確定一個組是否已經被用戶。增加下面internalinternalstaticboolIsGroupLicensed(string{{varproductListingvarliveInfo=varliveInfo=return}return}我們現在修改配方(當應用啟動時的)數據源來支持模塊。打開DataModel\RecipeDataSource.cs文件。找到的LoadLocalDataAsync找到“foreachgroup.Items.Add(recipe)方法調用,在該方法調用之前添if(!Features.License.IsGroupLicensed(group.UniqueId))group.LicensedRequired=true;我們現在設定本組的LicensedRequired屬性的IsGroupLicensed方法。現在,我們已經創建增加一個組內的應用內支持打開GroupDetailPage.xaml定位到第二個controls:PivotItem元素,定位到內部的controls:PivotItem.Header元素,然后加上下面的xaml代碼到內部的StackPanel元素的尾部。就在TextBlock <ImageVisibility="{BindingConverter={StaticResourceHorizontalAlignment="Right"VerticalAlignment="Center"Margin="15,0"前面的XAML代碼當LicensedRequired屬性設置為true時的一個鎖定圖標。通過提供一個XML配置文件或配置的WindowsPhone商店,我們無論應用是否在狀態,在UI上,部分組是免費提供的。其它一些組將保持鎖定狀態,并且可以通過應用程序的永久后。定位到lstRecipes_SelectionChangedelseifgroup.LicensedRequiredgroup.UniqueId,VisualStudio解決方案資源管理器中右鍵單擊該項目,并添加了新的一個WindowsPhoneProductInfoPage.xaml. :SystemTray.IsVisible元素為False(默Background{StaticResource{StaticResource用下面的代碼替換TitlePanelStackPanel<Imagex:Name="imgLogo"Source="Assets/Title.png"<TextBlockx:Name="PageTitle"Text="ProductInfo"Margin="9,-7,0,0"Style="{StaticResourcePhoneTextTitle1Style}"Foreground="{StaticResourceCustomGroupTitleBrush}"/>UI控件用于顯示產品信息。更改的內容的ContentPanel<RowDefinition<RowDefinition<RowDefinition<RowDefinition<RowDefinition<TextBlockText="{BindingName}"Grid.ColumnSpan="2"Style="{StaticResourcePhoneTextTitle2Style}"Foreground="{StaticResourceCustomGroupTitleBrush}"/><TextBlockText="{BindingDescription}"TextWrap Grid.Column="0"Grid.Row="1"Style="{StaticResource<StackPanelGrid.Column="0"Grid.Row="2"Orientation="Vertical"Margin="0,<TextBlockText="Producttype:"Style="{StaticResourcePhoneTextSmallStyle}"<TextBlockText="{BindingProductType}"Style="{StaticResourcePhoneTextSmallStyle}"Foreground="{StaticResourceCustomGroupTitleBrush}"/><StackPanelGrid.Column="0"Grid.Row="3"<TextBlockText="Purchaseprice:"Style="{StaticResourcePhoneTextSmallStyle}"<TextBlockText="{BindingFormattedPrice}"Style="{StaticResourcePhoneTextLargeStyle}"Foreground="{StaticResourceCustomGroupTitleBrush}"<ImageSource="{BindingImageUri}"Grid.Column="1"Grid.Row="1"<ButtonGrid.Row="4"Grid.Column="0"Content="Buynow"x:Name="btnPurchase"Background="{StaticResourceCustomGroupTitleBrush}"HorizontalAlignment="Stretch"VerticalAlignment="Bottom"/><ButtonGrid.Row="4"Grid.Column="1"Content="Cancel"x:Name="btnCancel"Background="{StaticResourceCustomGroupTitleBrush}"HorizontalAlignment="Stretch"VerticalAlignment="Bottom"/>前面的代碼實現了ProductInfoPage.xaml的的頁面,用來顯示產品的信息給用戶,使用戶using #ifusingusingStore=MockIAPLib;usingStore=ProductListingproductInfo=null;stringgroupId="";public{}OnNavigatedToprotectedoverridevoidOnNavigatedTo(NavigationEventArgs{groupId=productInfo=#ifif(null!={//Tweakimagestrings=productInfo.ImageUri.OriginalString;s=s.Rece("ms-appdata://","");productInfo.ImageUri=newUri(s,}this.Dontext=productInfo;}上面的代碼獲取當前的組標識符的導航查詢字符串,并加載該組的產品信息。在Debug版本配置下通過條件編譯,代碼會顯示一個產品(在WindowsPhone商店API下不privateasyncvoidbtnPurchase_Click_1(objectsender,RoutedEventArgs{varreceiptawaitStore.CurrentApp.RequestProductPurchaseAsync(productInfo.ProductId,if(productInfo.ProductType=={vargroup=App.Recipes.FindGroup(groupId);group.LicensedRequired=}}privatevoidbtnCancel_Click_1(objectsender,RoutedEventArgs{}當用戶點擊“”按鈕,我們使用API(MockIAPLib或者WindowsPhone商店)試圖。API可能會顯示附加的頁面給用戶,諸如驗證步驟,然后再返回產品的食注注意:RequestProductPurchaseAsync-一個產品ID和一個布爾變量,XML文檔。該文檔可以被用作應用驗證操作是否成功。ContosoCookbook應用不使用此功能。LicensedRequired屬性為相反的當前值。換句話說,如果了,此組并不再需要一個許任務3測試永主頁鎖定組頁滾動頂部的pivotcontrol“Recipes”pivot食譜組頁信彈出"MockUI注意:在注意:在Release版本中,這些消息會被WindowsPhoneStoreUI圖MockUI消點擊 食譜頁主頁任務4添加消在這個任務中,我們加入消費的支持打開App.xaml.cspublicstaticintRemainingCookingTime{get;set;privatevoid{RemainingCookingTime=}SettingsRemainingCookingTime為了支持消費,一些對Common\Features.cs的改動是必須的。我們會添加一些新的ContosoCookbook,可的消費產品烹飪時間包。我們現在就增加代碼來做消費購在Features類內部增加一個內部類。這個類包含所有的消費的信息publicpublicstaticclass{publicstaticint{intremainingCookingTime=varappSettings=varappSettings=if(appSettings.Contains("RemainingCookingTime"))remainingCookingTime={remainingCookingTime=}return}publicstaticvoidSetRemainingCookingTime(int{varappSettings=if(appSettings["RemainingCookingTime"]!=null)appSettings["RemainingCookingTime"]=}}NotificationsSetReminder方法ifIsScheduled(item.UniqueId“ifvarschedule=ScheduledActionService.Find(item.UniqueId);if(null!=schedule)在上面的代碼中,如果我們發現已經有一個計時器處于激活狀態,其刪除,并創建“if//ConsumeApp.RemainingCookingTime-=item.PrepTime;//RedeemtimeasusercancelledApp.RemainingCookingTime+=item.PrepTime;下一步,我們修改應用程序,以使用戶烹調時間。打開privateboolHasEnoughCookingMinutes(int{if(App.RemainingCookingTime>=duration)returntrue;return}定位到btnStartCooking_Clickif(HasEnoughCookingMinutes(item.PrepTime)||{}newUri("/ProductSelectionPage.xaml?Keyword=minutes",上面的代碼調用HasEnoughCookingMinutes方法以確保用戶了足夠的時間。如果沒有,我們會將用戶轉到ProductSelectionPage.xaml頁面,這將允許額外的時間。在接下來的幾個步驟中,添加此頁。VisualStudio解決方案資源管理器中右鍵單擊該項目,并添加新的“Windows縱向頁面”,命名為ProductSelectionPage.xaml改變 :SystemTray.IsVisible為False(默認要顯示應用程序的徽標和標題,LayoutRoot的Grid元素的background{StaticResource{StaticResourceTitlePanelStackPanel<Imagex:Name="imgLogo"Source="Assets/Title.png"Stretch="Uniform"HorizontalAlignment="Left"Width="{StaticResourceLogoImageWidth}"/><TextBlockx:Name="PageTitle"Text="Products"Margin="9,-7,0,0"Style="{StaticResourcePhoneTextTitle1Style}"Foreground="{StaticResourceCustomGroupTitleBrush}"/>我們現在增加一些主要UI控件來顯示產品列表(時間單位)ContentPanel的Grid<RowDefinition<RowDefinition<StackPanelGrid.Row="0"<TextBlockText="Youdon'thaveenoughcookingtimeleft!"Style="{StaticResourcePhoneTextSmallStyle}"Foreground="{StaticResourceCustomGroupTitleBrush}"/><TextBlockText="{BindingStringFormat='Yourremainingtimeis\{0:D\}minutes'}"Style="{StaticResourcePhoneTextSmallStyle}"<TextBlockText="PleasepurchaseadditionaltimefromtheproductsStyle="{StaticResourcePhoneTextSmallStyle}"Foreground="{StaticResourceCustomGroupTitleBrush}"/><ListBoxGrid.Row="1"x:Name="lstProducts"ItemsSource="{Binding}"SelectionChanged="lstProducts_SelectionChanged_1"Margin="10"> <Border<BorderBorderBrush="{StaticResourceMargin="0,5"<RowDefinition<RowDefinition<ColumnDefinition<ColumnDefinition<TextBlockText="{BindingValue.Name}"<TextBlockText="{BindingValue.Description}"Grid.Row="1"TextWrap <TextBlockFontWeight="Bold"Grid.Column="1" 找到并打開最近新創建的ProductSelectionPage.xaml.cs#if#ifusingusingStore=MockIAPLib;usingusingStore=用以下代碼代替public{}protectedoverrideasyncvoidOnNavigatedTo(NavigationEventArgs{stringsearchTerm=NavigationContext.QueryString["Keyword"];varresults=await {searchTermlstProducts.Dontext=results.ProductListings;txtRemainingCookingTime.Dontext=App.RemainingCookingTime;awaitStore.CurrentApp.LoadListingInformationAsync();}privatevoidlstProducts_SelectionChanged_1(object{if(lstProducts.SelectedIndex>-{varselection=Uri("/ProductInfoPage.xaml?ID="+}}載列表。然后,我們結合該列表的lstProducts頁面上的控件,使用戶可以選擇的產品。當用戶選擇一個產品,然后導航到之前添加的ProductInfoPage.xaml頁來完成。現在,我們添加用于消費品的ProductInfoPage.xaml頁面的支持。打開找到的btnPurchase_Click_1的的處理程序中elseif(productInfo.ProductType=={if{//Fulfill--appApp.RemainingCookingTime+=int.Parse(productInfo.Tag);//Report}}要消費類產品,上面的代碼中添加到App.RemainingCookingTime的屬性中并報告產品的完成。產品實現了的消費產品已經充分提供給用戶,所以完成了。任務5測試消任務主應用頁點擊的配方的配滾動pivotpivot食譜組頁點擊屏幕底部的鎖圖標食譜頁當"Products"頁面打開后,提供時間。假設你沒有足夠時間烹飪產品點擊"10Minutes"然后點擊“Buynow”來確認作為一個應用程序開發人員,您可以上傳到WindowsPhone商店,它是免費的,沒有試用期或其者功能限制。在后一種情況下,你可以通過來啟用被禁用的功能。這是我們在ContosoCookbook上試用的方案。在本練習中,修改ContosoCookbook應用。使應用從試用到完整的功能的。然后,我任務1–添加和技為了支持,我們現在到Common\Features.cs文件做一些修改。添加一些新的方法,定位到 類privateprivatestaticbool_isTrial=false;publicstaticboolIsTrial{{return_isTrial;}}privateprivatestaticvoid{if(null==_info=#ifisTrial=_isTrial=}上面的代碼會從MockIAPLib庫或真正的WindowsPhone商店API(API)獲取當前信息,并設置_isTrial的當前狀態。publicpublicstaticvoid{#if//Simulateappstringmessage="Thissampledemonstratestheimplementationofaapppurchaseprocess.\n"+"Press"Press'OK'tosimulatesuccessfulpurchase.\nPress'Cancel'tokeeprunningtheappintrialmode.";if(MessageBox.Show(message,"DebugTrial",MessageBoxButton.OKCancel)==Store.CurrentApp.LicenseInformation.IsTrial=false; ceDetai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025寫字樓租賃合同
- 2025租房合同,租房合同范本
- 2025屋頂保溫涂料施工合同范本
- 《亞洲魅力女明星》課件
- 信息安全審計流程與實踐
- 蒲松齡與《聊齋志異》
- 建議2014年司法考試學員的一套復習計劃
- 暨大傳播學考研利用好復習資料展開全面復習計劃
- 護理工作個人總結2025
- 優化課間休息環境的策略與實踐路徑
- 蘇教版數學六年級下冊期中考試試卷及答案
- 2024年電工(高級技師)考前必刷必練題庫500題(含真題、必會題)
- 生日宴會祝福快閃演示模板
- 2024年青海省中考英語試卷真題(含答案解析)
- 2020中等職業學校英語課程標準
- 高標準農田設計實施方案(技術標)
- 創傷失血性休克中國急診專家共識2023解讀課件
- 云計算白皮書(2024年)解讀
- 電力電子技術智慧樹知到期末考試答案章節答案2024年中國石油大學(華東)
- 2024年四川省樂山市中考地理·生物合卷試卷真題(含答案)
- 2024年內蒙古航開城市投資建設有限責任公司招聘筆試沖刺題(帶答案解析)
評論
0/150
提交評論