Эта статья была вдохновлена выдающимся MVP Silverlight и евангелистом Куналом Чоудхури, который написал симпатичный небольшой пост о том, как лучше продвигать ваше приложение WP — http://bit.ly/SDtMd0
Таким образом, увидев это, я не мог помочь быстро изменить его статью под Windows 8, что становится очевидным, если сравнить их, так это то, что с Windows Phone есть так много всего, что в принципе проще, и, надеюсь, Windows 8 API станет более зрелым в ближайшие месяцы. (будет еще интереснее, когда будет раскрыт WP8 SDK, если они остались верны своим корням или перейдут на более выигрышный маршрут Win 8 # дрожь)
Итак, вот фактический класс помощника:
Или загрузите здесь с CodePaste.NET — http://bit.ly/OfOgkG
using System; using System.Reflection; using System.Text; using Windows.ApplicationModel.DataTransfer; using Windows.Foundation; using Windows.UI.ApplicationSettings; using Windows.UI.Xaml; public static class ApplicationHelper { private static TypedEventHandler<DataTransferManager, DataRequestedEventArgs> handler; static string appPackageID; static string friendlyName; static string twitterHandle; static string facebookProfileID; static string marketplaceSearchTerm; public static void Init(string AppPackageID,string FriendlyName = "", string TwitterHandle = "", string FacebookProfileID = "", string MarketplaceSearchTerm = "") { appPackageID = AppPackageID; friendlyName = FriendlyName; twitterHandle = TwitterHandle; facebookProfileID = FacebookProfileID; marketplaceSearchTerm = MarketplaceSearchTerm; } public static string GetApplicationVersion() { if (Windows.ApplicationModel.DesignMode.DesignModeEnabled) { return "version x.x.x.x"; } Assembly assembly = typeof(Application).GetTypeInfo().Assembly; var name = new AssemblyName(assembly.FullName); return name.Version.ToString(4); } public static void ReviewApplication() { Windows.System.Launcher.LaunchUriAsync( new Uri("ms-windows-store:REVIEW?PFN=" + appPackageID)); } public static void SearchMoreApps(string searchTerm) { Windows.System.Launcher.LaunchUriAsync( new Uri("ms-windows-store:Search?query=" + searchTerm)); } public static void ViewWebsite(string websiteUrl) { Windows.System.Launcher.LaunchUriAsync( new Uri(websiteUrl)); } public static void ConnectInTwitter(string twitterHandle) { Windows.System.Launcher.LaunchUriAsync( new Uri(string.Format("http://twitter.com/{0}", twitterHandle))); } public static void ConnectInFacebook(string facebookProfileID) { Windows.System.Launcher.LaunchUriAsync( new Uri(string.Format("http://facebook.com/{0}", facebookProfileID))); } public static void SupportQuestion(string toAddress, string subject, string body = null) { // Register handler for DataRequested events for sharing if (handler != null) DataTransferManager.GetForCurrentView().DataRequested -= handler; handler = new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>((sender,args) => { var request = args.Request; request.Data.Properties.Title = subject; request.Data.Properties.Description = "Send feedback to " + toAddress; // Share recipe text StringBuilder builder = new StringBuilder(); builder.Append("Please send feedback to:\r\n"); builder.Append(toAddress); builder.AppendLine(); builder.Append("--------------------------------------\r\n"); builder.Append(body); request.Data.SetText(builder.ToString()); DataTransferManager.GetForCurrentView().DataRequested -= handler; }); DataTransferManager.GetForCurrentView().DataRequested += handler; DataTransferManager.ShowShareUI(); } public static void AddCommands(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) { if (!string.IsNullOrEmpty(appPackageID)) { SettingsCommand rateReviewCmd = new SettingsCommand("ratereview", "rate and review", (x) => { ReviewApplication(); }); args.Request.ApplicationCommands.Add(rateReviewCmd); } if (!string.IsNullOrEmpty(twitterHandle)) { SettingsCommand rateReviewCmd = new SettingsCommand("twitter", string.Format("See {0} on twitter",string.IsNullOrEmpty(friendlyName) ? twitterHandle : friendlyName), (x) => { ConnectInTwitter(twitterHandle); }); args.Request.ApplicationCommands.Add(rateReviewCmd); } if (!string.IsNullOrEmpty(facebookProfileID)) { SettingsCommand rateReviewCmd = new SettingsCommand("facebook", string.Format("See {0} on facebook", string.IsNullOrEmpty(friendlyName) ? facebookProfileID : friendlyName), (x) => { ConnectInFacebook(facebookProfileID); }); args.Request.ApplicationCommands.Add(rateReviewCmd); } if (!string.IsNullOrEmpty(marketplaceSearchTerm)) { SettingsCommand rateReviewCmd = new SettingsCommand("market", string.Format("See other apps from {0}", string.IsNullOrEmpty(friendlyName) ? marketplaceSearchTerm : friendlyName), (x) => { SearchMoreApps(marketplaceSearchTerm); }); args.Request.ApplicationCommands.Add(rateReviewCmd); } } }
Реализация этого самостоятельно не должна отличаться от Windows Phone, поэтому вызывайте методы так, как вы хотите из своего приложения.
Но если вы также хотите, чтобы эти параметры отображались на панели «Настройки», в конце класса есть дополнительная функция, для реализации которой вам необходимо:
- Вызовите функцию Init () в конструкторе приложений
ApplicationHelper.Init("<APP Package Name>t","<Friendly name", "<Twitter Handle>", "<Facebook Handle>", "<Marketplace Search Term");
Все параметры, кроме имени пакета приложения, являются необязательными, и в них не будет добавлена команда настроек для опций, которые вы не выбираете. Чтобы узнать название пакета приложения, см. Эту статью (откуда я понял ) — http: // bit.ly/SDFB2Z
- Настройте панель «Настройки», если вы еще этого не сделали
Посмотрите документы MSDN, если вы еще не реализовали его — http://bit.ly/SDFJ2n
- Вызовите функцию AddCommands () из вашего обработчика событий настроек
Просто добавьте следующее в ваши настройки обработчик CommandsRequested
//Add Application Helper Commands ApplicationHelper.AddCommands(sender,args);
Вот и все
Special thanks to Kunal (for the basic idea) and to Rudi Grobler for his Marketplace rate article – http://bit.ly/SDFB2Z