×
Namespaces

Variants
Actions
Revision as of 13:13, 15 November 2013 by lpvalente (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

From Nokia Developer 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.
48 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.

×