• Home
  • Sobre mim
Blue Orange Green Pink Purple

AIR – Criando uma aplicação com atualização automática – Parte III

Posted in AIR, Flex. on sexta-feira, agosto 14th, 2009 by Stefan Horochovec Tags: AIR, Auto-Update, Flex
ago 14

Na última parte do artigo, a última configuração que deve ser feita dentro do projeto, é que dentro da pasta src, você deve criar um arquivo chamado update-config.xml. Esse arquivo irá conter as informações de como o processo de atualização deve se comportar.

?Download update-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0">
	<url>http://www.seusite.com.br/air/update-config.xml</url>
	<delay>1</delay>
	<defaultUI>
		<dialog name="checkForUpdate" visible="true" />
		<dialog name="downloadUpdate" visible="true" />
		<dialog name="downloadProgress" visible="true" />
		<dialog name="installUpdate" visible="true" />
		<dialog name="fileUpdate" visible="true" />
		<dialog name="unexpectedError" visible="true" />
	</defaultUI>
</configuration>

Todas as opções foram marcadas como true, para que você possa acompanhar todas as etapas do processo.

A partir deste momento, o trabalho fica todo por conta do Flex. Não há mais necessidade de você se preocupar com nada. Ele será responsável por fazer a verificação, sugerir ou não o download, e caso o usuário opte por baixar a aplicação, ainda irá sou salva-lá em seu HD, ou atualizar automaticamente a aplicação. Fácil não é?

Mas como ele sabe que existe uma nova versão para ser baixada?

Através de um arquivo XML que deverá ser publicado no servidor na mesma URL foi informada na propriedade URL do objeto autoUpdater.

Vamos dar uma conferida em como deve ser esse XML para que o autoUpdater possa fazer as verificações necessárias.

?Download update-config.xml
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>  
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">  
	<version>1.1</version>  
	<url>http://www.seusite.com.br/air/AIRAutoUpdate1-1.air</url>  
	<description><![CDATA[   
	v1.1
	* Adicionado novos feeds para leitura
	]]></description>  
</update>

Simples não é? Poucas informações são necessárias para que a atualização ocorra. Você deve informar apenas a versão da aplicação que deverá ser atualizada. Ou seja, minha primeira compilação da primeira versão do projeto era 1.0, a próxima versão, ela foi compilada como 1.1, então é essa versão que eu devo passar para o update-config.xml.

Depois, devo informar a URL que está o arquivo que deverá ser feito o download para a atualização. E por ultimo, posso descrever quais foram as alterações na versão que geraram a nova atualização.

Dessa forma, quando iniciarmos a aplicação, o aplicativo irá ler esse XML, verificará que existe uma nova versão disponível, e irá inicializar o processo de atualização.

De uma forma simples assim, você não precisará mais se preocupar com atualizadores ou em informar seu cliente que existe uma nova versão para o sistema. Deixe o AIR trabalhar um pouco por você!

Com os códigos informados acima, temos a primeira versão do sistema completa, exceto o XML de atualização, que só deve ser publicado quando houver uma nova versão. Abaixo, seguem os fontes para a versão 1.1 do projeto. Esses sem comentários adicionais, já que o intuito do artigo era apenas explicar como é feita a atualização de forma automática em aplicações em AIR.

AIRAutoUpdate-app.xml

?Download AIRAutoUpdate-app.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.5">
	<id>AIRAutoUpdate</id>
	<version>1.1</version>
	<filename>AIRAutoUpdate</filename>
	<name>AIRAutoUpdate - Tutorial IMasters</name>
	<installFolder>Horochovec/AIR/AIRAutoUpdate</installFolder>
	<programMenuFolder>Horochovec/AIR/AIRAutoUpdate</programMenuFolder>
	<description>Exemplo de app que faz sua atualização automática</description>
    <copyright>Stefan Horochovec (stefan@horochovec.com.br)</copyright>
	<initialWindow>
		<title>AIRAutoUpdate</title>
		<content>AIRAutoUpdate.swf</content>
		<systemChrome>none</systemChrome>
		<transparent>true</transparent>
		<visible>true</visible>
	    <minimizable>true</minimizable>
	    <maximizable>false</maximizable>
	    <resizable>false</resizable>
	</initialWindow>
</application>

Posts.mxml

?Download AIRAutoUpdate-app.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow 
	xmlns:mx="http://www.adobe.com/2006/mxml" 
	layout="absolute" 
	width="500" 
	height="250" 
	showCloseButton="true" 
	creationComplete="creationCompleteHandler(event);"
	close="onCloseHandler(event);" 
	title="Feeds Imasters - Seção Flex">
 
	<mx:Script>
		<![CDATA[
 
			import flash.desktop.NativeApplication;
			import mx.events.CloseEvent;
			import mx.events.FlexEvent;			
			import mx.rpc.events.ResultEvent;
 
			/**
			 * Dataprovider do grid
			 */			
			private var xmlList : XMLList;
 
    		/**
    		 * Evento disparado na finalização da construção do componente
    		 * Responsavel por iniciar o HTTPService para leitura do feed
    		 */
			private function creationCompleteHandler(event:FlexEvent) : void
			{
				this.service.send();
			}
 
			/**
			 * Evento disparado no termino com sucesso da leitura do HTTPService
			 * Responsavel por adicionar ao grid o dataProvider
			 */
			private function serviceHandler(event:ResultEvent) : void
			{
				var result : XML = new XML(event.result);
				xmlList	= result..item;
				this.grid.dataProvider	= xmlList;
			}
 
    		/**
    		 * Evento disparado no fechar da TitleWindow, ele é responsável por fechar a aplicação
    		 */			
			private function onCloseHandler(event:CloseEvent) : void 
			{
				NativeApplication.nativeApplication.exit();
			}
 
			/**
			 * Quando ocorrer um click no grid, o botao para abrir o link do post
			 * sera habilitado, e coloca os textos para os componentes do autor 
			 * e descrição do post
			 */
			private function onClickGridHandler(event:MouseEvent) : void
			{
				this.btnLink.visible	= true;
				this.autor.text			= ((this.grid.selectedItem) as Object)['author'];
				this.descricao.text		= ((this.grid.selectedItem) as Object)['description'];
			}
 
			/**
			 * Click do botao para visualizar o artigo
			 */
			private function onBtnLinkClickHandler(event:MouseEvent) : void
			{
				navigateToURL(new URLRequest(((this.grid.selectedItem) as Object)['guid'].toString()), "_blank");
			}
 
		]]>
	</mx:Script>
 
	<mx:HTTPService id="service" url="http://imasters.uol.com.br/feed/secao/flex" 
					showBusyCursor="true" resultFormat="e4x" 
					result="serviceHandler(event)"/>
 
	<mx:VBox bottom="5" left="5" right="5" top="5">
		<mx:AdvancedDataGrid id="grid" designViewDataType="flat" 
							 bottom="5" left="5" right="5" top="5" 
							 height="50%" width="100%"
							 click="onClickGridHandler(event);">
			<mx:columns>
				<mx:AdvancedDataGridColumn headerText="Titulo do artigo" dataField="title"/>
			</mx:columns>
		</mx:AdvancedDataGrid>
 
		<mx:Canvas 	height="50%" width="100%" borderColor="#DADADA" borderStyle="solid">
			<mx:Label x="6" y="6" id="autor" fontWeight="bold"/>
			<mx:TextArea 	height="53" id="descricao" bottom="6" left="6" right="6" 
							borderStyle="none" selectable="false" mouseFocusEnabled="false" 
							mouseEnabled="false"/>
			<mx:LinkButton 	x="383" y="4" label="Ler artigo" visible="false" 
							id="btnLink" click="onBtnLinkClickHandler(event);"/>
 
		</mx:Canvas>
 
	</mx:VBox>
 
</mx:TitleWindow>

Espero ter ficado claro o processo de atualização automática no AIR.

Abraços a todos.

8 Comments

  1. Iury on agosto 31st, 2009

    Cara, esta forma de dispor o código assim estreito… tá de brincadeira né? Pouco prático.

  2. Stefan Horochovec on setembro 1st, 2009

    Ola Iuri.
    Não sei se entendi seu comentario, mas parece ser com relação ao comprimento do Box contendo códigos fontes.
    Bom, o layout que eu utilizo no wordpress sugere essa largura para o texto, então vou seguir o layout.
    Voce pode muito bem copiar o texto e por em seu FlexBuilder, e analisar por lá, acredito que já é de grande valia eu postar exemplos práticos de como devem ser feitas as implementações.

    Obrigado por visitar o blog e de qualquer forma, por comentar.

  3. Leonardo Versiani on outubro 6th, 2009

    Stefan Horochovec, parabéns cara !!! pelo tutorial, acompanhei também o seu do flex mania, vc manda muito bem. É que as vezes as pessoas só veêm os espinhos sacô !!

    é isso ai, continue assim.

  4. Stefan Horochovec on outubro 7th, 2009

    Obrigado Leonardo pelo comentário e por visitar meu blog. Espero ter contribuido em algo ;)

    Abraços

  5. Ricardo Paes on outubro 30th, 2009

    Olá,

    O tutorial ficou muito bom, parabéns.

    Mas não estou conseguindo usar no meu aplicativo AIR,
    quando ele vai atualizar dá o erro 16815.

    Na documentação está assim:
    16815 Descritor de atualização inválido (versão do descritor desconhecida).

    Tentei procurar e não consegui achar o erro.

    Tem idéia do que seja ?

    Abraços

  6. jhs on dezembro 7th, 2009

    Stefan, show de bola o tutorial, parabens, só tenho uma duvida, tem algum jeito de, quando haver uma nova versão, só deixar continuar se ele instalar a nova versão?
    Abraços.

  7. anselmo on fevereiro 3rd, 2010

    Ola Stefan,
    Sou novato na area e segui o seu tutorial mas da um erro na linha 89 do AIRAutoUpdate.mxml () com o erro:
    -1046: Type was not found or was not a compile-time constant: Posts.
    poderia me ajudar?

    Obrigado desde ja…

  8. anselmo on fevereiro 4th, 2010

    Stefan, consegui encontrar o erro… eu havia colocado o pacote br.com…view… fora do pacote src.
    Agora esta rodando.
    Obrigado pelo post.



Leave a Reply

Stefan Horochovec

  • Blogosfera
    • Erko Bridee
    • Fábio da Silva
    • Igor Costa
    • Janderson FC
    • Jose Carlos Fiel
    • Mario Junior
    • Mario Santos (msdevstudio)
    • Rodrigo Fraga
    • Vedovelli
  • Links
    • Flexmania
    • Forum – FlexBrasil
    • RedeRIA
  • Pessoal
    • Blog em Inglês
    • LinkedIn Profile
    • Oreilly Blog
  • Categorias
    • AIR (14)
    • BlazeDS (4)
    • Eng. de Software (2)
    • Flash Builder (1)
    • Flash Player (1)
    • Flex (18)
    • Flex 4 (4)
    • FlexBuilder (1)
    • FlexDuck (4)
    • Flexmania (1)
    • Geral (3)
    • Java (10)
    • Palestras (1)
    • Pessoal (2)
    • Sem categoria (8)
    • Tecnologia (1)
  • Archives
    • julho 2010
    • junho 2010
    • maio 2010
    • março 2010
    • janeiro 2010
    • novembro 2009
    • outubro 2009
    • setembro 2009
    • agosto 2009
    • julho 2009
    • junho 2009
    • maio 2009
    • abril 2009
    • março 2009
    • dezembro 2008
    • outubro 2008
    • março 2008
    • fevereiro 2008
    • janeiro 2008
  • Search






  • Home
  • Sobre mim

© Copyright Stefan Horochovec. All rights reserved.
Designed by FTL Wordpress Themes brought to you by Smashing Magazine

Back to Top