標籤:style blog http color os strong io for
Windows Phone 8.1 Preview SDK 發布也有幾個月了,之前斷斷續續也寫過幾篇 Windows Phone 8.1 新特性的文章,今天給大家介紹一下市集啟動協議相關的知識。
關於這方面,想必大家心裡都有很多疑問,為什麼 Windows Phone 8.0 時代的 MarketplaceDetailTask、MarketplaceReviewTask 和 MarketplaceSearchTask 都不見了呢?這種問題在MSDN、stackoverflow等網站上都很多次的出現,我也在這些網站多次回答了類似這樣的問題。
是的,確實不見了,SDK不再給我們提供這方面的類,而是需要通過啟動協議來實現:Windows.System.Launcher.LaunchUriAsync(Uri uri)。
部落格園裡也有同學的部落格介紹了這個方法的具體實現方式:Windows Phone 8.1商店啟動協議,這裡我再做一些補充,然後把這幾個協議進行一下類似 Windows Phone 8.0 時代的封裝。
1. 顯示指定產品的詳細資料頁面(MarketplaceDetailTask)
啟動協議:var uri = new Uri(string.Format("ms-windows-store:navigate?appid={0}", appid));
這裡的appid可以指定為CurrentApp.AppId,就是跳轉到當前應用詳細頁面;也可以指定為特定的AppId,就是跳轉到特定的應用詳細頁,這種情況在做推薦應用的時候便會用到。
我們對它進行這樣的封裝:
using System;using System.Threading.Tasks;using Windows.ApplicationModel.Store;namespace Windows.ApplicationModel.Tasks{ public sealed class MarketplaceDetailTask { public MarketplaceDetailTask() { } /// <summary> /// 擷取或設定要顯示的產品的唯一識別碼。 /// </summary> public string ContentIdentifier { get; set; } /// <summary> /// 顯示 Windows Phone 商城 用戶端應用程式並顯示指定產品的詳細資料頁面。 /// </summary> public async void Show() { await Windows.System.Launcher.LaunchUriAsync( new Uri(string.Format("ms-windows-store:navigate?appid={0}", string.IsNullOrEmpty(ContentIdentifier) ? CurrentApp.AppId.ToString() : ContentIdentifier))); } }}
調用方法:
// 預設啟動當前應用詳細頁面MarketplaceDetailTask task1 = new MarketplaceDetailTask();task1.Show();// 啟動特定應用詳細頁面MarketplaceDetailTask task2 = new MarketplaceDetailTask();task2.ContentIdentifier = "some app id";task2.Show();
2. 顯示指定產品的評論頁面(MarketplaceReviewTask)
啟動協議:var uri = new Uri(string.Format("ms-windows-store:reviewapp?appid={0}", appid));
這裡的appid我們設定為當前應用的ID,因為在應用中評論別的應用是不合理的。
我們對它進行這樣的封裝:
using System;using System.Threading.Tasks;using Windows.ApplicationModel.Store;namespace Windows.ApplicationModel.Tasks{ public sealed class MarketplaceReviewTask { public MarketplaceReviewTask() { } public async void Show() { await Windows.System.Launcher.LaunchUriAsync( new Uri("ms-windows-store:reviewapp?appid=" + CurrentApp.AppId)); } }}
調用方法:
MarketplaceReviewTask task = new MarketplaceReviewTask();task.Show();
3. 顯示產品搜尋網頁面(MarketplaceSearchTask)
啟動協議:var uri = new Uri(string.Format(@"ms-windows-store:search?keyword={0}",keyword));
這裡的keyword就是我們要搜尋的關鍵字,有時候我們需要搜尋我們的開發人員帳號對應的所有應用,這時候可以把keyword設定為開發人員名稱。但是如果你的開發人員名稱與很多產品相似,比如名稱為:微博,這時候搜尋的結果就包括了微博應用,而不只是你的“微博”開發人員名下的應用(好吧,有點繞嘴了)。這時候我們可以把keyword搜尋改成publisher搜尋。
基於keyword和publisher兩種搜尋方式,我們進行這樣的封裝:
using System.Threading.Tasks;using Windows.ApplicationModel.Store;namespace Windows.ApplicationModel.Tasks{ public sealed class MarketplaceSearchTask { public MarketplaceSearchTask(SearchTermsType type) { this.Type = type; } public string SearchTerms { get; set; } public SearchTermsType Type { get; set; } public async void Show() { await Windows.System.Launcher.LaunchUriAsync( new Uri(string.Format("ms-windows-store:search?{0}={1}", this.Type.ToString() ,SearchTerms))); } } public enum SearchTermsType { Keyword, Publisher }}
調用方法:
// 搜尋‘shaomeng‘開發人員名下的所有應用MarketplaceSearchTask task1 = new MarketplaceSearchTask(SearchTermsType.Publisher);task1.SearchTerms = "shaomeng";task1.Show();// 搜尋含有關鍵字‘微博‘的所有應用MarketplaceSearchTask task2 = new MarketplaceSearchTask(SearchTermsType.Keyword);task2.SearchTerms = "微博";task2.Show();
好了,到這裡我們就把常用的市集啟動協議介紹完了。希望能夠協助到大家。Windows Phone 8.1 的“坑”還有很多,如果大家有其他找不到的啟動協議,請留下評論,我會持續去更新,謝謝。