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);

  

 

 

posted on 2014-04-08 15:50  鸣动我心  阅读(248)  评论(0编辑  收藏  举报