Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Como verificar atualizações dentro da própria aplicação

From Wiki
Jump to: navigation, search

Este artigo explica como verificar atualizações dentro da própria aplicação.

SignpostIcon XAML 40.png
WP Metro Icon WP8.png
Article Metadata

Testado com
SDK: Windows Phone 8.0 SDK
Aparelho(s): Nokia Lumia 920

Compatibilidade
Plataforma(s):
Windows Phone 8

Artigo
Tradução:
Por saramgsilva
Última alteração feita por lpvalente em 15 Nov 2013

Introdução

Há alguns meses, comecei a receber alguns relatórios de falha de um dos meus aplicativos de maior sucesso, Geosense! Depois de corrigir o problema e publicar uma versão atualizada do aplicativo, até hoje eu ainda recebo muito poucos relatórios da mesma versão antiga, mas nenhum da uma atualizada

Isso me levou a pensar sobre a razão por que as pessoas não atualizar seus apps! Aqui estão algumas razões:

  • Sem conectividade constante com a Internet
  • Removendo o “tile” da loja da tela inicial
  • Não se preocupam com a atualização das aplicações

O primeiro não faz muito sentido para mim, como o ecossistema do Windows Phone faz muito mais sentido como um sistema de "sempre online"! Além disso, ”Geosense” requer conexão com à Internet para o trabalh, e relatórios de falhas não pode ser feito sem conexão com à Internet, de modo que este não parece ser a principal razão, no meu caso! Eu não vejo o ponto nisto, mas não se importar com a verificação e atualização das aplicações em uns telefone é apenas uma questão de opinião pessoal! Isso deixa a opção do meio: ter o “tile” da loja na tela inicial permitirá aos usuários obter uma notificação visual de atualizações (o número de aplicativos atualizados aparece na “tile”), sem ela, a única outra opção é que o usuário realmente abre a loja do menu de aplicações.

Código

Não seria bom apenas para obter a aplicação para notificar o utilizador de que uma atualização está disponível? Tendo isso em mente, eu abri “Fiddler” no meu laptop, e configurei o meu telefone para usá-lo como um servidor proxy, abri o “Geosense” através da loja, e este é o pedido que eu poderia ver indo para servidores da Microsoft:

http://marketplaceedgeservice.windowsphone.com/v8/catalog/apps/7ca9cfea-1b92-4ca4-8559-269936d5361e?os=8.0.9903.0&cc=GB&oc=&lang=en-GB&hw=520170499&dm=RM-821_eu_euro1&oemId=NOKIA&moId=VOD-GB&cf=99-1

Eu posso ver na url acima a aplicação ProductId (7ca9cfea-1b92-4ca4-8559-269936d5361e), o telefone versão do Windows (os = 8.0.9903.0), o território da loja (cc = GB), a linguagem (lang = en-GB) e um monte de outras coisas relacionadas com a marca do dispositivo, modelo e versão. A resposta é ainda mais interessante, pois mostra todas as informações sobre a aplicação da loja, incluindo a versão mais recente disponível e data de lançamento.

Dado que estamos interessados apenas na versão, depois de limpar manualmente a resposta é o que temos:

<a:feed xmlns:a="http://www.w3.org/2005/Atom" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://schemas.zune.net/catalog/apps/2008/02">
<!-- other stuff -->
 
<a:entry>
<!-- other stuff -->
 
<version>1.10.1.8</version>
 
<!-- other stuff -->
</a:entry>
 
<!-- other stuff -->
</a:feed>

Bem, agora sabemos como obter as informações da loja acerca de uma aplicação em particular, nós sabemos o que é e como voltou a lê-lo, então vamos colocar isso tudo junto! Vamos precisar do ProductID para o aplicativo atual em execução, e para isso pode apenas lê-lo de “WMAppManifest.xml” file o' como eu mostrado em previous article:

public static string GetManifestAttributeValue(string attributeName)
{
var xmlReaderSettings = new XmlReaderSettings
{
XmlResolver = new XmlXapResolver()
};
 
using (var xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings))
{
xmlReader.ReadToDescendant("App");
 
return xmlReader.GetAttribute(attributeName);
}
}

Dado que não há nenhuma maneira no SDK atual para recuperar o território da loja, vamos atribuir o CultureInfo.CurrentUICulture valor para ele e também para o idioma.

Aqui está o método assíncrono completo para recuperar as informações da versão mais recente da loja:

private Task<Version> GetUpdatedVersion()
{
var cultureInfoName = CultureInfo.CurrentUICulture.Name;
 
var url = string.Format("http://marketplaceedgeservice.windowsphone.com/v8/catalog/apps/{0}?os={1}&cc={2}&oc=&lang={3}",
GetManifestAttributeValue("ProductID"),
Environment.OSVersion.Version,
cultureInfoName.Substring(cultureInfoName.Length - 2).ToUpperInvariant(),
cultureInfoName);
 
var request = WebRequest.Create(url);
 
return Task.Factory.FromAsync(request.BeginGetResponse, result =>
{
var response = (HttpWebResponse)request.EndGetResponse(result);
 
if (response.StatusCode != HttpStatusCode.OK)
{
throw new WebException("Http Error: " + response.StatusCode);
}
 
using (var outputStream = response.GetResponseStream())
{
using (var reader = XmlReader.Create(outputStream))
{
reader.MoveToContent();
 
var aNamespace = reader.LookupNamespace("a");
 
reader.ReadToFollowing("entry", aNamespace);
 
reader.ReadToDescendant("version");
 
return new Version(reader.ReadElementContentAsString());
}
}
}, null);
}

Tudo o que você agora tem a fazer é compará-lo com a versão aplicativo ativo, como neste exemplo de código:

private async void CheckForUpdatedVersion()
{
var currentVersion = new Version(GetManifestAttributeValue("Version"));
var updatedVersion = await GetUpdatedVersion();
 
if (updatedVersion > currentVersion
&& MessageBox.Show("Do you want to install the new version now?", "Update Available", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
new MarketplaceDetailTask().Show();
}
}

Na inicialização, basta chamar CheckForUpdatedVersion () e ele irá verificar se uma nova versão está disponível, e se sim, mostra uma caixa de mensagem de confirmação para o usuário e abre os detalhes do mercado para o aplicativo atualizado.

Cimbalino em alternativa

Se estiver a usar Cimbalino Windows Phone Toolkit, foi adicionado o IMarketplaceInformationService que contém toda a lógica para obter a informação das aplicações na loja, com o bónus que é suportado não só para WP8 mas também em WP7! Este novo serviço está apenas disponível na versão “3.1.0-rc” do toolkit, por isso tenha a certeza que instala a versão “pre-release”!

This page was last modified on 15 November 2013, at 13:13.
217 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×