Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-12-2008, 11:43   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2006
Beiträge: 123
dynamische updates?

Hi ho AIR-Gemeinde...

Ich habe ein Mini-App, welches ich für meine Updateversuche generiert habe. Dieses Mini-App lädt sich eine bestimmte (im AS festgelegte ) Version vom Server runter. Jetzt hab ich aber noch 2 Fragen, die ich mir bis jetzt noch nicht zusammensuchen konnte:

1. Wie überprüfe ich, ob auf dem Server überhaupt eine neue Version liegt?
2. Wie lade ich eine Dynamische Version herunter, die nur einfach Höher ist wie die aktuelle?

(Ich benutze Flash)

Zur Zeit kann ich mit:

Code:
function btn_CLICK(event_:MouseEvent ):void {
	var urlString:String="http://www.xxxyyy.de/update/Test2.air";
	var urlReq:URLRequest=new URLRequest(urlString);
	var urlStream:URLStream = new URLStream();
	var fileData:ByteArray = new ByteArray();
	urlStream.addEventListener(Event.COMPLETE, loaded);
	urlStream.load(urlReq);

	function loaded(event:Event):void {
		urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
		writeAirFile();
	}

	function writeAirFile():void {
		var file:File=File.desktopDirectory.resolvePath("Test2.air");
		var fileStream:FileStream = new FileStream();
		fileStream.addEventListener(Event.CLOSE, fileClosed);
		fileStream.openAsync(file, FileMode.WRITE);
		fileStream.writeBytes(fileData, 0, fileData.length);
		fileStream.close();

	}

	function fileClosed(event:Event):void {
		var updater:Updater = new Updater();
		var airFile:File = File.desktopDirectory.resolvePath("Test2.air");
		var version:String = "1.1";
		updater.update(airFile, version);
	}
nur die festgelegte Version (1.1) herunterladen. Kann ich irgendwie die Versionsnummern auf Server überprüfen?

cu, Patte
__________________
If (Ahnung==0){
lernen = (true);
fragen = (true);
}else{
lernen = (true);
fragen = (true);
wissen_weitergeben.mov.gotoAndPlay(1);
}
DasPatte ist offline   Mit Zitat antworten
Alt 12-12-2008, 12:11   #2 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Eine gängige(?) Variante ist es, eine xml auf den Server zu schieben. In dieser handelste dann die Informationen die Du brauchst, und lädst nur etwas runter, wenn es eine neue Version gibt.

Beispiel:

XML:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>

<versionInformation>

<versionNummer>1</versionNummer>
<dateipfad>http://localhost/test/update/update.air</dateipfad>
<reason>Why not ?</reason>

</versionInformation>

Edit:

Vorgang:

1. Prüfen was die aktuelle Version ist. (Steht in der applikation.xml) (Lokal)
2. Prüfen welche Version die XML und somit die aktuelle Version der .-air Datei auf dem Server hat (Server)
3. Falls die neue Version größer als die aktuelle ist - Download starten.
...

Geändert von Nico B. (12-12-2008 um 12:17 Uhr)
Nico B. ist gerade online   Mit Zitat antworten
Alt 12-12-2008, 12:21   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2006
Beiträge: 123
Ah, okay.. also ne XMl erstellen.. werde es mal probieren...

Danke für die schnelle Antwort...

cu, Patte
__________________
If (Ahnung==0){
lernen = (true);
fragen = (true);
}else{
lernen = (true);
fragen = (true);
wissen_weitergeben.mov.gotoAndPlay(1);
}
DasPatte ist offline   Mit Zitat antworten
Alt 12-12-2008, 12:22   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Nachsatz:

Du musst natürlich in der neuen .air File die applikation-xml anpassen. (Sprich Versionsnummer auch auf 2 setzen. Sonst funtzt der Prozess nur einmal...)


Da ich mich persöhnlich immer über Antworten ohne wirkliche Code-Schnipsel ärgere...

PHP-Code:
package
{
    
import flash.desktop.NativeApplication;
    
import flash.desktop.Updater;
    
import flash.events.Event;
    
import flash.events.EventDispatcher;
    
import flash.events.IEventDispatcher;
    
import flash.filesystem.File;
    
import flash.filesystem.FileMode;
    
import flash.filesystem.FileStream;
    
import flash.net.URLLoader;
    
import flash.net.URLLoaderDataFormat;
    
import flash.net.URLRequest;
    
import flash.net.URLStream;
    
import flash.utils.ByteArray;    
    
import mx.controls.Alert;




    public class 
UpdateManager extends EventDispatcher
    
{
    
// ---- Variablen -------------------------------------------------------------------
    
        // -- Variablen für die XML auf dem Server ----
        
private var _xmlPath:String;
        private var 
_xmlRequest:URLRequest;
        private var 
_xmlLoader:URLLoader;
        private var 
_xml:XMLList;
        private var 
newVersion:int;
        private var 
updateFileURL:String;
        
        
// -- Variablen für die Descriptor XML ----
        
private var appXML:XML;
        private var 
airNamespace:Namespace;
        private var 
applikationVersion:int;
        
        
// -- Variablen für den Update Prozess ----
        
        
private var _stream:URLStream;
        private var 
fileData:ByteArray;
        private var 
_updateFile:File;
        private var 
_updater:Updater;
        
        
// -- ProgrammVariablen ----------------------
        
        
// ---- Contructor ------------------------------------------------------------------------------------------
        
public function UpdateManager(xmlLink:Stringtarget:IEventDispatcher=null)
        {
            
super(target);
            
_xmlPath xmlLink;
            
init();
        }
        
        
// Xml einlesen - version größer als aktuelle Version - do Update
        // Die Versionsnummer in der XML, muss die Gleiche sein wie in der .air Datei auf dem Sever
        
private function init():void
        
{
            
_xmlLoader = new URLLoader();    
            
_xmlRequest = new URLRequest(_xmlPath);    
            
_xmlLoader.dataFormat URLLoaderDataFormat.TEXT;
            
_xmlLoader.addEventListener(Event.COMPLETExmlComplete);
            
_xmlLoader.load(_xmlRequest);
        }
        
        private function 
xmlComplete(event:Event):void
        
{        
            try
            {
                
_xml = new XMLList(event.target.data);
                
newVersion _xml.versionNummer;
                
updateFileURL _xml.dateipfad;
                
trace(_xml.dateipfad);
                
pruefeVersion();
            }    
            catch (
event:TypeError)
            {
                
trace(event.message);        
            }            
        }
        
        private function 
pruefeVersion():void
        
{
            
appXML NativeApplication.nativeApplication.applicationDescriptor;
            
airNamespace appXML.namespaceDeclarations()[0];
            
applikationVersion appXML.airNamespace::version;
            
trace("newVersion = " newVersion "   applikationVersion = " applikationVersion);
            
            if( 
newVersion applikationVersion)
            {
                
trace("UPDATE needed");
                
startUpdate();
            }
            else if( 
newVersion <= applikationVersion)
            {
                
trace"no Update needed");
            }            
        }        
        
        private function 
startUpdate():void
        
{
            var 
req:URLRequest = new URLRequestupdateFileURL );
            
_stream = new URLStream();
            
fileData = new ByteArray();
            
_stream.addEventListenerEvent.COMPLETEonDownloadComplete );
            
_stream.loadreq );
        }
        
        private function 
onDownloadComplete(event:Event):void
        
{
            
_stream.readBytesfileData0_stream.bytesAvailable );
            
_updateFile  File.desktopDirectory.resolvePath("updwddate.air");
            var 
fs:FileStream = new FileStream();
            
fs.addEventListenerEvent.CLOSEperformUpdate );
            
fs.addEventListener(Event.COMPLETEcompleteListener);
            
fs.openAsync_updateFileFileMode.WRITE );
            
fs.writeBytesfileData0fileData.bytesAvailable );
            
fs.close();
        }
        
        private function 
performUpdate(event:Event):void
        
{
            
_updater = new Updater();
            
_updater.update(_updateFilenewVersion.toString());
        }
        
        private function 
completeListener(event:Event):void
        
{
            
Alert.show("OMG");
        }
    }

Sollte so funtkionieren, aber ist natürlich sehr sehr ausbaufähig.

Geändert von Nico B. (12-12-2008 um 12:30 Uhr)
Nico B. ist gerade online   Mit Zitat antworten
Alt 15-12-2008, 09:39   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2008
Beiträge: 148
von adobe gibts ein framework dafür:
link
sytch ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele