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);
浙公网安备 33010602011771号