winphone8版本升级提示详解
本文参考自:http://www.oschina.net/question/213217_37963
方法一:有点复杂但是好理解的方法
Dispatcher.BeginInvoke(() =>
{
if (MessageBox.Show(sd.memo, "是否要更新", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{try{
MarketplaceDetailTask task = new MarketplaceDetailTask();
task.ContentType = MarketplaceContentType.Applications;
task.ContentIdentifier = "82a23635-5bd9-df11-a844-00237de2db9e";//这步需要注意:
//如果已经发布,想更新的话,需要把自己,在应用商店的id(从DashBoard进去)拷进去(就是WinPhone应用商店的ID),
//区别于我们自己应用程序里面那个产品id,我们每个应用创建的时候都会有一个id,但是这个时候肯定没进微软的数据库,
//只有发布了之后,微软才会重新分配一个,存了他们数据库里面的id,拿着这个id,才能调微软提供的:new MarketplaceDetailTask()任务。
//或者直接去除 task.ContentIdentifier的赋值也可以;
//如果还未发布,希望测试程序时(此程序还未通过Marketplace的审核),需要设定一个可用的验证符,这里给出的是facebook的,我也不知道原作者从哪弄的。
task.Show();
}
catch(Exception)
{MessageBox.Show("应用商店里没有此应用")}
}});
方法二:简单方法
if (MessageBox.Show( "应用程序已有新版本,是否要更新","提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
try
{
new MarketplaceDetailTask().Show();//发布未成功之前会有错误代码,发布成功后就不报错了
}
catch (Exception)
{
MessageBox.Show("应用商店里没有此应用")
}
}
有的时候,我们需要后端开发人员配合更新,为了减轻后端负担,我们可以通过调用微软的商店版本接口,和本地的版本号对比,来实现自主更新。
具体如下:
#region UpdatedVersion private string GetManifestAttributeValue(string attributeName) { var xmlReaderSettings = new XmlReaderSettings { XmlResolver = new XmlXapResolver() }; using (XmlReader xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings)) { xmlReader.ReadToDescendant("App"); return xmlReader.GetAttribute(attributeName); } } private Task<Version> GetUpdatedVersion(string appProductId) { string cultureInfoName = CultureInfo.CurrentUICulture.Name; string url = string.Format( "http://marketplaceedgeservice.windowsphone.com/v8/catalog/apps/{0}?os={1}&cc={2}&oc=&lang={3}", appProductId, Environment.OSVersion.Version, cultureInfoName.Substring(cultureInfoName.Length - 2).ToUpperInvariant(), cultureInfoName); WebRequest request = WebRequest.Create(url); return Task.Factory.FromAsync(request.BeginGetResponse, result => { try { var response = (HttpWebResponse)request.EndGetResponse(result); if (response.StatusCode != HttpStatusCode.OK) { throw new WebException("Http Error: " + response.StatusCode); } using (Stream outputStream = response.GetResponseStream()) { using (XmlReader reader = XmlReader.Create(outputStream)) { reader.MoveToContent(); string aNamespace = reader.LookupNamespace("a"); reader.ReadToFollowing("entry", aNamespace); reader.ReadToDescendant("version"); return new Version(reader.ReadElementContentAsString()); } } } catch (Exception ex) { return null; } }, null); } public async void CheckForUpdatedVersion(string appProductId) { var currentVersion = new Version(GetManifestAttributeValue("Version")); Version updatedVersion = await GetUpdatedVersion(appProductId); string demo = "应用程序已有新的版本,你是否需要更新?";//或者这里加更新内容 if (updatedVersion > currentVersion) { Deployment.Current.Dispatcher.BeginInvoke(() => { var result = MessageBox.Show(demo, "提醒", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) new MarketplaceDetailTask().Show(); }); } } #endregion //调用的时候,用下面语句,相信聪明的你一定能够看得懂。 const string productid = "3c3052ac-115d-e011-854c-00237de2db9e";//商店里面的应用id CheckForUpdatedVersion(productid);