Aktualisieren von AIR-Anwendungen

Benutzer können eine AIR-Anwendung durch Doppelklicken auf eine AIR-Datei auf dem Computer oder im Browser (mithilfe der nahtlosen Installationsfunktion) installieren oder aktualisieren. Das Adobe® AIR®-Installationsprogramm verwaltet die Installation und macht den Benutzer darauf aufmerksam, falls eine vorhandene Anwendung aktualisiert wird.

Mithilfe der Updater-Klasse können Sie jedoch auch eine bereits installierte Anwendung auf eine neue Version aktualisieren. (Eine installierte Anwendung kann feststellen, dass eine neue Version zum Download bereitsteht und installiert werden kann.) Die Updater-Klasse enthält eine update()-Methode, mit der Sie auf eine AIR-Datei auf dem Computer des Benutzers verweisen und auf diese Version aktualisieren können. Ihre Anwendung muss als AIR-Datei komprimiert sein, damit Sie die Updater-Klasse verwenden können. Anwendungen, die als native ausführbare Dateien oder Pakete komprimiert werden, sollten die von der nativen Plattform bereitgestellten Updatemöglichkeiten verwenden.

Sowohl die Anwendungs-ID als auch die Herausgeber-ID einer AIR-Aktualisierungsdatei müssen mit der zu aktualisierenden Anwendung übereinstimmen. Die Herausgeber-ID wird vom unterzeichnenden Zertifikat abgeleitet. Sowohl das Update als auch die zu aktualisierende Anwendung müssen mit demselben Zertifikat unterzeichnet werden.

Ab Version AIR 1.5.3 enthält die Anwendungsdeskriptordatei ein <publisherID>-Element. Sie müssen dieses Element verwenden, wenn Versionen Ihrer Anwendung in AIR 1.5.2 oder älter entwickelt wurden. Weitere Informationen finden Sie unter publisherID.

Ab Version AIR 1.1 können Sie eine Anwendung zur Verwendung eines neuen Codesignatur-Zertifikats migrieren. Im Rahmen der Anwendungsmigration auf eine neue Signatur muss die AIR-Aktualisierungsdatei sowohl mit dem neuen als auch dem ursprünglichen Zertifikat unterzeichnet werden. Die Zertifikatmigration kann nicht rückgängig gemacht werden. Im Anschluss an die Migration werden nur AIR-Dateien, die mit dem neuen Zertifikat (oder mit beiden Zertifikaten) unterzeichnet sind, als Updates einer vorhandenen Installation erkannt.

Die Verwaltung des Updates von Anwendungen kann kompliziert sein. AIR 1.5 enthält das neue Updateframework für AdobeAIR-Anwendungen. Dieses Framework stellt APIs bereit, mit denen Entwickler gute Updatemöglichkeiten in AIR-Anwendungen einbinden können.

Mithilfe der Zertifikatmigration können Sie von einem selbst unterzeichneten Zertifikat zu einem kommerziellen Codesignatur-Zertifikat oder von einem selbst unterzeichneten oder kommerziellen Zertifikat zu einem anderen wechseln. Wird keine Zertifikatmigration durchgeführt, müssen bestehende Benutzer die gegenwärtige Version der Anwendung entfernen, bevor sie die neue Version installieren. Weitere Informationen finden Sie unter Wechseln von Zertifikaten.

Es hat sich bewährt, eine Updatefunktion in Anwendungen zu integrieren. Wenn Sie eine neue Version Ihrer Anwendung erstellen, kann die Updatefunktion den Benutzer zum Installieren der neuen Version auffordern.

Das Installationsprogramm der AIR-Anwendung erstellt Protokolldateien, wenn eine AIR-Anwendung installiert, aktualisiert oder entfernt wird. Sie können diese Protokolldateien untersuchen, um die Ursache etwaiger Installationsprobleme herauszufinden. Siehe Installationsprotokolle.

Hinweis: Neue Versionen der Adobe AIR-Laufzeitumgebung enthalten ggf. aktualisierte Versionen des WebKit. Eine aktualisierte WebKit-Version kann zu unerwarteten Änderungen an HTML-Inhalten in einer bereitgestellten AIR-Anwendung führen. Diese Änderungen können ein Update der Aktualisierung erfordern. Eine Updatefunktion kann den Benutzer über die neue Version der Anwendung informieren. Weitere Informationen finden Sie unter Einführung in die HTML-Umgebung (für ActionScript-Entwickler) oder Network connectivity changes (für HTML-Entwickler).

Aktualisieren von Anwendungen

Die Updater-Klasse (im flash.desktop-Paket) enthält eine Methode, update(), die Sie verwenden können, um die derzeit ausgeführte Anwendung mit einer anderen Version zu aktualisieren. Im folgenden Beispiel wird die Anwendung aktualisiert, wenn sich eine Version der AIR-Datei (Sample_App_v2.air) auf dem Desktop des Benutzers befindet.

ActionScript-Beispiel:

var updater:Updater = new Updater(); 
var airFile:File = File.desktopDirectory.resolvePath("Sample_App_v2.air"); 
var version:String = "2.01"; 
updater.update(airFile, version);

JavaScript-Beispiel:

var updater = new air.Updater(); 
var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); 
var version = "2.01"; 
updater.update(airFile, version);

Bevor eine Anwendung die Updater-Klasse verwenden kann, muss die aktualisierte Version der AIR-Datei durch den Benutzer oder die Anwendung auf den Computer heruntergeladen werden. Weitere Informationen finden Sie unter Herunterladen einer AIR-Datei auf den Computer des Benutzers.

Ergebnisse des Aufrufs der Updater.update()-Methode

Wenn die update()-Methode durch eine Anwendung in der Laufzeitumgebung aufgerufen wird, wird die Anwendung durch die Laufzeitumgebung geschlossen, und sie versucht anschließend, die neue Version anhand der AIR-Datei zu installieren. Die Laufzeitumgebung prüft, ob die in der AIR-Datei angegebenen Anwendungs- und Herausgeber-IDs mit denjenigen der Anwendung, die die update()-Methode aufruft, übereinstimmen. (Weitere Informationen zur Anwendungs-ID und Herausgeber-ID finden Sie unter AIR-Anwendungsdeskriptordateien.) Sie prüft auch, ob der version-String mit dem version-String, der an die update()-Methode übergeben wird, übereinstimmt. Bei erfolgreichem Abschluss der Installation wird die neue Version der Anwendung von der Laufzeitumgebung geöffnet. Andernfalls (falls die Installation nicht abgeschlossen werden kann) wird die vorhandene Version der Anwendung wieder geöffnet.

Wenn unter Mac OS eine aktualisierte Version der Anwendung installiert werden soll, benötigt der Benutzer die entsprechenden Systemberechtigungen, um im Anwendungsverzeichnis zu installieren. Unter Windows und Linux muss der Benutzer über Administratorberechtigungen verfügen.

Wenn für die aktualisierte Version der Anwendung eine aktualisierte Version der Laufzeitumgebung erforderlich ist, wird die neue Laufzeitversion installiert. Für die Aktualisierung der Laufzeitumgebung muss ein Benutzer über Administratorberechtigungen für den Computer verfügen.

Wenn Sie eine Anwendung mit ADL testen, führt der Aufruf der update()-Methode zu einem Laufzeitausnahmefehler.

version-String

Der·String,·der·als·version-Parameter·der·update()-Methode·angegeben·ist,·muss·mit·dem·String·im·version-·oder·versionnumber-Attribut in der Anwendungsdeskriptordatei der zu installierenden AIR-Datei übereinstimmen. Aus Sicherheitsgründen ist die Angabe des version-Parameters erforderlich. Da die Anwendung die Versionsnummer in der AIR-Datei überprüfen muss, wird ausgeschlossen, dass die Anwendung versehentlich eine ältere Version installiert. (Eine ältere Version der Anwendung enthält möglicherweise Sicherheitsschwachstellen, die in der derzeit installierten Anwendung behoben wurden.) Außerdem sollte der version-String in der AIR-Datei mit dem version-String in der installierten Anwendung verglichen werden, um Downgrade-Angriffe zu verhindern.

In Versionen vor AIR 2.5 kann der Versionsstring ein beliebiges Format haben, wie etwa „2.01“ oder „Version 2“. In AIR 2.5 oder höher muss der Versionsstring eine Folge von bis zu drei dreistelligen Zahlen sein, die durch Punkte getrennt sind. So sind zum Beispiel „.0“, „1.0“ und „67.89.999“ gültige Versionsnummern. Vor dem Aktualisieren der Anwendung sollten Sie den Updateversionsstring validieren.

Wenn eine Adobe AIR-Anwendung eine AIR-Datei vom Internet herunterlädt, empfiehlt es sich, einen Mechanismus zu bieten, mit dem der Webservice der Adobe AIR-Anwendung die Version der heruntergeladenen Datei mitteilen kann. Anschließend kann die Anwendung diesen String als version-Parameter der update()-Methode verwenden. Wird die AIR-Datei auf andere Weise abgerufen, sodass die Version der AIR-Datei unbekannt ist, kann die AIR-Anwendung durch eine Überprüfung der AIR-Datei die Versionsinformationen feststellen. (Bei einer AIR-Datei handelt es sich um ein ZIP-komprimiertes Archiv und bei der Anwendungsdeskriptordatei um den zweiten Datensatz in diesem Archiv.)

Weitere Informationen zur Anwendungsdeskriptordatei finden Sie unter AIR-Anwendungsdeskriptordateien.

Signierungsablauf für Anwendungsupdates

Das Veröffentlichen von Updates in Ad-hoc-Weise kompliziert die Verwaltung mehrerer Anwendungsversionen und erschwert das Verfolgen von Zertifikatablaufdaten. Möglicherweise laufen Zertifikate ab, bevor Sie ein Update veröffentlichen.

Die Adobe AIR-Laufzeitumgebung behandelt ein Anwendungsupdate, das ohne Migrationssignatur veröffentlicht wird, als neue Anwendung. Benutzer müssen ihre aktuelle AIR-Anwendung deinstallieren, bevor sie das Anwendungsupdate installieren können.

Um dieses Problem zu lösen, laden Sie jede aktualisierte Anwendung mit dem neuesten Zertifikat an eine separate Bereitstellungs-URL hoch. Schließen Sie einen Mechanismus ein, der Sie daran erinnert, Migrationssignaturen anzuwenden, wenn der 180-Tage-Toleranzzeitraum für das Zertifikat begonnen hat. Weitere Informationen finden Sie unter Signieren einer aktualisierten Version einer AIR-Anwendung.

Informationen zum Anwenden von Signaturen finden Sie unter ADT-Befehle.

Führen Sie Folgendes aus, um das Anwenden von Migrationssignaturen zu vereinfachen:

  • Laden Sie jede aktualisierte Anwendung auf eine separate Bereitstellungs-URL hoch.

  • Laden Sie die Updatedeskriptor-XML-Datei und das neueste Zertifikat für das Update auf dieselbe URL hoch.

  • Signieren Sie die aktualisierte Anwendung mit dem neuesten Zertifikat.

  • Wenden Sie mit dem Zertifikat, das zum Signieren der vorherigen Version auf einer anderen URL verwendet wurde, eine Migrationssignatur auf die aktualisierte Anwendung an.

Bereitstellen einer benutzerdefinierten Oberfläche für die Anwendungsaktualisierung

AIR enthält eine Standardoberfläche für die Aktualisierung:

Diese Oberfläche wird immer bei der ersten Installation einer Version einer Anwendung auf einem Computer angezeigt. Sie können jedoch für spätere Instanzen eine eigene Oberfläche definieren. Wenn Ihre Anwendung eine benutzerdefinierte Updateoberfläche definiert, geben Sie in der Anwendungsdeskriptordatei ein customUpdateUI-Element für die zurzeit installierte Anwendung an:

<customUpdateUI>true</customUpdateUI>

Wenn der Benutzer nach der Installation der Anwendung eine AIR-Datei öffnet, deren Anwendungs- und Herausgeber-ID mit denen der installierten Anwendung übereinstimmen, öffnet die Laufzeitumgebung die Anwendung statt des Standardinstallationsprogramms für AIR-Anwendungen. Weitere Informationen finden Sie unter customUpdateUI.

Wenn die Anwendung ausgeführt wird (wenn das NativeApplication.nativeApplication-Objekt ein load-Ereignis auslöst), kann sie entscheiden, ob die Anwendung aktualisiert werden soll (mit der Updater-Klasse). Soll eine Aktualisierung durchgeführt werden, kann die Anwendung dem Benutzer ihre eigene Installationsoberfläche (die sich von der standardmäßigen Ausführungsoberfläche unterscheidet) bereitstellen.

Herunterladen einer AIR-Datei auf den Computer des Benutzers

Die Updater-Klasse kann erst verwendet werden, nachdem eine AIR-Datei durch die Anwendung oder den Benutzer auf dem Computer des Benutzers gespeichert wurde.

Hinweis: AIR 1.5 enthält ein Updateframework, mit dem Entwickler gute Updatemöglichkeiten in AIR-Anwendungen einbinden können. Die Verwendung dieses Frameworks kann erheblich einfacher sein als die direkte Verwendung der update()-Methode der Update-Klasse. Weitere Informationen finden Sie unter Verwenden des Updateframeworks.

Im folgenden Code wird eine AIR-Datei von einer URL (http://example.com/air/updates/Sample_App_v2.air) heruntergeladen und im Anwendungsspeicherverzeichnis gespeichert.

ActionScript-Beispiel:

var urlString:String = "http://example.com/air/updates/Sample_App_v2.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.applicationStorageDirectory.resolvePath("My App v2.air"); 
    var fileStream:FileStream = new FileStream(); 
    fileStream.open(file, FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 
    trace("The AIR file is written."); 
}

JavaScript-Beispiel:

var urlString = "http://example.com/air/updates/Sample_App_v2.air"; 
var urlReq = new air.URLRequest(urlString); 
var urlStream = new air.URLStream(); 
var fileData = new air.ByteArray(); 
urlStream.addEventListener(air.Event.COMPLETE, loaded); 
urlStream.load(urlReq); 
 
function loaded(event) { 
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
    writeAirFile(); 
} 
 
function writeAirFile() { 
    var file = air.File.desktopDirectory.resolvePath("My App v2.air"); 
    var fileStream = new air.FileStream(); 
    fileStream.open(file, air.FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 
    trace("The AIR file is written."); 
}

Weitere Informationen finden Sie unter:

Prüfen, ob eine Anwendung zum ersten Mal ausgeführt wird

Möglicherweise empfiehlt es sich, dem Benutzer nach der Anwendungsaktualisierung eine Meldung „Erste Schritte“ oder „Willkommen“ zu bieten. Beim Starten prüft die Anwendung, ob sie zum ersten Mal ausgeführt wird, um festzustellen, ob die Meldung angezeigt werden soll.

Hinweis: AIR 1.5 enthält ein Updateframework, mit dem Entwickler gute Updatemöglichkeiten in AIR-Anwendungen einbinden können. Dieses Framework bietet einfache Methoden, um zu überprüfen, ob eine Anwendung zum ersten Mal ausgeführt wird. Weitere Informationen finden Sie unter Verwenden des Updateframeworks.

Zu diesem Zweck könnte beispielsweise bei jeder Anwendungsinitialisierung eine Datei im Anwendungsspeicherverzeichnis gespeichert werden. Bei jedem Anwendungsstart sollte geprüft werden, ob diese Datei vorhanden ist. Ist sie nicht vorhanden, wird die Anwendung zum ersten Mal für den gegenwärtigen Benutzer ausgeführt. Wenn die Datei vorhanden ist, wurde die Anwendung mindestens einmal ausgeführt. Falls die Datei vorhanden ist und eine ältere als die aktuelle Versionsnummer enthält, dann führt der Benutzer zum ersten Mal die neue Version aus.

Im folgenden Flex-Beispiel wird dieses Konzept demonstriert:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"  
    layout="vertical"  
    title="Sample Version Checker Application" 
    applicationComplete="system extension()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.filesystem.*; 
            public var file:File; 
            public var currentVersion:String = "1.2"; 
            public function system extension():void { 
                file = File.applicationStorageDirectory; 
                file = file.resolvePath("Preferences/version.txt"); 
                trace(file.nativePath); 
                if(file.exists) { 
                    checkVersion(); 
                } else { 
                    firstRun(); 
                } 
            } 
            private function checkVersion():void { 
                var stream:FileStream = new FileStream(); 
                stream.open(file, FileMode.READ); 
                var reversion:String = stream.readUTFBytes(stream.bytesAvailable); 
                stream.close(); 
                if (reversion != currentVersion) { 
                    log.text = "You have updated to version " + currentVersion + ".\n"; 
                } else { 
                    saveFile(); 
                } 
                log.text += "Welcome to the application."; 
            } 
            private function firstRun():void { 
                log.text = "Thank you for installing the application. \n" 
                    + "This is the first time you have run it."; 
                saveFile(); 
            } 
            private function saveFile():void { 
                var stream:FileStream = new FileStream(); 
                stream.open(file, FileMode.WRITE); 
                stream.writeUTFBytes(currentVersion); 
                stream.close(); 
            } 
        ]]> 
    </mx:Script> 
    <mx:TextArea ID="log" width="100%" height="100%" /> 
</mx:WindowedApplication>

Im folgenden Beispiel wird das Konzept in JavaScript veranschaulicht:

<html> 
    <head> 
        <script src="AIRAliases.js" /> 
        <script> 
            var file; 
            var currentVersion = "1.2"; 
            function system extension() { 
                file = air.File.appStorageDirectory.resolvePath("Preferences/version.txt"); 
                air.trace(file.nativePath); 
                if(file.exists) { 
                    checkVersion(); 
                } else { 
                    firstRun(); 
                } 
            } 
            function checkVersion() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.READ); 
                var reversion = stream.readUTFBytes(stream.bytesAvailable); 
                stream.close(); 
                if (reversion != currentVersion) { 
                    window.document.getElementById("log").innerHTML  
                            = "You have updated to version " + currentVersion + ".\n"; 
                } else { 
                    saveFile(); 
                } 
                window.document.getElementById("log").innerHTML 
                                 += "Welcome to the application."; 
            } 
            function firstRun() { 
                window.document.getElementById("log").innerHTML  
                            = "Thank you for installing the application. \n" 
                            + "This is the first time you have run it."; 
                saveFile(); 
            } 
            function saveFile() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.WRITE); 
                stream.writeUTFBytes(currentVersion); 
                stream.close(); 
            } 
        </script> 
    </head> 
    <body onLoad="system extension()"> 
        <textarea ID="log" rows="100%" cols="100%" /> 
    </body> 
</html> 

Falls die Anwendung Daten lokal speichert (wie etwa im Anwendungsspeicherverzeichnis), empfiehlt es sich, bei der ersten Ausführung auf zuvor gespeicherte Daten zu prüfen (von früheren Versionen).

Verwenden des Updateframeworks

Das Verwalten von Anwendungsupdates kann lästig sein. Das Update-Framework für Adobe-AIR-Anwendungen enthält APIs, mit denen Entwickler über zuverlässige Aktualisierungsmöglichkeiten für AIR-Anwendungen verfügen. Das AIR-Update-Framework nimmt Entwicklern die folgenden Aufgaben ab:

  • Prüfen auf Updates, entweder intervallbasiert oder bei Benutzeranforderung

  • Herunterladen von AIR-Dateien (Updates) von einer Webquelle

  • Informieren des Benutzers beim ersten Ausführen der neu installierten Version

  • Bestätigen, dass der Benutzer nach Updates suchen möchte

  • Anzeigen von Informationen zur neuen Updateversion für den Benutzer

  • Anzeigen des Downloadfortschritts und von Fehlermeldungen für den Benutzer

Das AIR-Update-Framework stellt eine Beispiel-Benutzeroberfläche für Ihre Anwendung bereit. Sie bietet dem Benutzer grundlegende Informationen und Konfigurationsoptionen für Anwendungsupdates. Ihre Anwendung kann auch eine benutzerdefinierte Oberfläche zur Verwendung mit dem Updateframework definieren.

Das AIR-Updateframework ermöglicht die Speicherung von Informationen zur Updateversion einer AIR-Anwendung in einfachen XML-Konfigurationsdateien. Bei den meisten Anwendungen erzielen Sie mit dem Einrichten dieser Konfigurationsdateien zum Einfügen von Basiscodezeilen eine gute Aktualisierungsfunktionalität für den Endbenutzer.

Auch wenn Sie das Updateframework nicht nutzen, enthält Adobe AIR eine Updater-Klasse, mit der AIR-Anwendungen ein Upgrade auf neue Versionen ausführen können. Mit der Updater-Klasse kann eine Anwendung ein Upgrade auf eine Version ausführen, die in der AIR-Datei auf dem Computer des Benutzers vorhanden ist. Die Upgradeverwaltung kann jedoch mehr beinhalten als ein Update der Anwendung anhand einer lokal gespeicherten AIR-Datei.

AIR-Updateframeworkdateien

Das AIR-Updateframework ist im Verzeichnis „frameworks/libs/air“ des AIR 2 SDK enthalten. Es umfasst die folgenden Dateien:

  • applicationupdater.swc – Definiert die grundlegenden Funktionen der Updatebibliothek zur Verwendung in ActionScript. Diese Version hat keine Benutzeroberfläche.

  • applicationupdater.swf – Definiert die grundlegenden Funktionen der Updatebibliothek zur Verwendung in JavaScript. Diese Version hat keine Benutzeroberfläche.

  • applicationupdater_ui.swc – Definiert eine Flex 4-Version der grundlegenden Funktionalität der Updatebibliothek einschließlich einer Benutzeroberfläche, mit der Ihre Anwendung Updateoptionen anzeigen kann.

  • applicationupdater_ui.swf – Definiert eine JavaScript-Version der grundlegenden Funktionalität der Updatebibliothek einschließlich einer Benutzeroberfläche, mit der Ihre Anwendung Updateoptionen anzeigen kann.

Weitere Informationen finden Sie in den folgenden Abschnitten:

Einrichten der Flex-Entwicklungsumgebung

Die SWC-Dateien im Verzeichnis „frameworks/libs/air“ des AIR 2 SDK definieren Klassen, die Sie für die Entwicklung mit Flex und Flash verwenden können.

Um das Updateframework beim Kompilieren mit dem Flex-SDK zu verwenden, schließen Sie entweder die Datei „ApplicationUpdater.swc“ oder die Datei „ApplicationUpdater_UI.swc“ in den Aufruf des amxmlc-Compilers mit ein. Im folgenden Beispiel lädt der Compiler die Datei „ApplicationUpdater.swc“ in das Unterverzeichnis „lib“ des Flex SDK-Verzeichnisses:

amxmlc -library-path+=lib/ApplicationUpdater.swc  -- myApp.mxml

Im folgenden Beispiel lädt der Compiler die Datei „ApplicationUpdater_UI.swc“ in das Unterverzeichnis „lib“ des Flex SDK-Verzeichnisses:

amxmlc -library-path+=lib/ApplicationUpdater_UI.swc  -- myApp.mxml

Beim Entwickeln mit Flash Builder fügen Sie die SWC-Datei auf der Registerkarte „Library Path“ unter „Flex Build Path“ im Dialogfeld „Properties“ hinzu.

Achten Sie darauf, die SWC-Dateien in das Verzeichnis zu kopieren, auf das Sie im amxmlc-Compiler (bei Verwendung des Flex-SDK) oder in Flash Builder verweisen.

Einschließen von Frameworkdateien in eine HTML-basierte AIR-Anwendung

Das Verzeichnis „frameworks/html“ des Updateframeworks enthält die folgenden SWF-Dateien:

  • applicationupdater.swf – Definiert die grundlegende Funktionalität der Updatebibliothek ohne Benutzeroberfläche

  • applicationupdater_ui.swf – Definiert die grundlegende Funktionalität der Updatebibliothek einschließlich einer Benutzeroberfläche, mit der Ihre Anwendung Updateoptionen anzeigen kann

JavaScript-Code in AIR-Anwendungen kann in SWF-Dateien definierte Klassen verwenden.

Um das Update-Framework zu verwenden, schließen Sie die Datei „applicationupdater.swf“ bzw. die Datei „applicationupdater_ui.swf“ in das Anwendungsverzeichnis (oder ein Unterverzeichnis) ein. Schließen Sie dann in die HTML-Datei, die das Framework verwendet (im JavaScript-Code), ein script-Tag ein, das die Datei lädt:

<script src="applicationUpdater.swf" type="application/x-shockwave-flash"/>

Oder verwenden Sie dieses script-Tag, um die Datei „applicationupdater_ui.swf“ zu laden:

<script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/>

Die in diesen beiden Dateien definierte API wird im Rest des vorliegenden Dokuments beschrieben.

Basisbeispiel – Verwenden der ApplicationUpdaterUI-Version

Die ApplicationUpdaterUI-Version des Updateframeworks bietet eine Basisoberfläche, die Sie unkompliziert in Ihrer Anwendung verwenden können. Nachstehend finden Sie ein grundlegendes Beispiel.

Erstellen Sie zunächst die AIR-Anwendung, die das Updateframework aufruft:

  1. Wenn es sich bei Ihrer Anwendung um eine HTML-basierte AIR-Anwendung handelt, laden Sie die Datei „applicationupdaterui.swf“:

    <script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>
  2. Instanziieren Sie im Programmcode der AIR-Anwendung ein ApplicationUpdaterUI-Objekt.

    Verwenden Sie in ActionScript den folgenden Code:

    var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); 

    Verwenden Sie in JavaScript den folgenden Code:

    var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); 

    Sie können diesen Code einer Initialisierungsfunktion hinzufügen, die nach dem Laden der Anwendung ausgeführt wird.

  3. Erstellen Sie eine Textdatei mit dem Namen „updateConfig.xml“ und fügen Sie ihr Folgendes hinzu:

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
         <url>http://example.com/updates/update.xml</url> 
        <delay>1</delay> 
    </configuration>

    Bearbeiten Sie das URL-Element der Datei „updateConfig.xml“, sodass es dem Speicherort der Updatedeskriptordatei auf Ihrem Webserver entspricht (siehe nächstes Verfahren).

    Mit delay wird die Anzahl der Tage angegeben, nach denen die Anwendung nach Updates sucht.

  4. Fügen Sie die Datei „updateConfig.xml“ dem Projektverzeichnis Ihrer AIR-Anwendung hinzu.

  5. Legen Sie fest, dass das Updaterobjekt auf die Datei „updateConfig.xml“ verweist, und rufen Sie die initialize()-Methode des Objekts auf.

    Verwenden Sie in ActionScript den folgenden Code:
    appUpdater.configurationFile = new File("app:/updateConfig.xml"); 
    appUpdater.initialize();
    Verwenden Sie in JavaScript den folgenden Code:
    appUpdater.configurationFile = new air.File("app:/updateConfig.xml"); 
    appUpdater.initialize();
  6. Erstellen Sie eine zweite Version der AIR-Anwendung, die eine andere Versionsnummer als die erste Anwendung hat. (Die Version wird in der Anwendungsdeskriptordatei im version-Element angegeben.)

Als Nächstes fügen Sie die Updateversion der AIR-Anwendung Ihrem Webserver hinzu:

  1. Legen Sie die Updateversion der AIR-Datei auf dem Webserver ab.

  2. Erstellen Sie eine Textdatei mit dem Namen „updateDescriptor.2.5.xml“ und fügen Sie ihr Folgendes hinzu:

    <?xml version="1.0" encoding="utf-8"?> 
         <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
           <versionNumber>1.1</versionNumber> 
           <url>http://example.com/updates/sample_1.1.air</url> 
           <description>This is the latest version of the Sample application.</description> 
        </update>

    Bearbeiten Sie die Elemente versionNumber, URL und description der Datei „updateDescriptor.xml“, um sie an die AIR-Updatedatei anzupassen. Dieses Updatedeskriptorformat wird von Anwendungen verwendet, die mit dem Update-Framework, das im AIR 2.5 SDK (und höher) enthalten ist.

  3. Erstellen Sie eine Textdatei mit dem Namen „updateDescriptor.1.0.xml“ und fügen Sie ihr Folgendes hinzu:

    <?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://example.com/updates/sample_1.1.air</url> 
           <description>This is the latest version of the Sample application.</description> 
        </update>

    Bearbeiten Sie die Elemente version, URL und description der Datei „updateDescriptor.xml“, um sie an die AIR-Updatedatei anzupassen. Dieses Updatedeskriptorformat wird von Anwendungen verwendet, die das im AIR 2 SDK enthaltene Update-Framework verwenden.

    Hinweis: Diese zweite Updatedeskriptordatei brauchen Sie nur dann zu erstellen, wenn Sie Updates von Anwendungen, die vor AIR 2.5. erstellt wurden, unterstützen.
  4. Fügen Sie die Dateien „updateDescriptor.2.5.xml“ und „updateDescriptor.1.0.xml“ zu demselben Webserververzeichnis hinzu, das die AIR-Updatedatei enthält.

Dies ist ein Basisbeispiel, es bietet jedoch für viele Anwendungen ausreichende Updatefunktionalität. In den verbleibenden Abschnitten dieses Dokuments wird beschrieben, wie Sie das Updateframework am besten für Ihre Zwecke einsetzen können.

Ein weiteres Verwendungsbeispiel für das Updateframework finden Sie in den folgenden Beispielanwendungen im Adobe AIR Developer Center:

Aktualisieren auf AIR 2.5

Da die Regeln für das Zuweisen von Anwendungsversionsnummern in AIR 2.5 geändert wurden, kann das Update-Framework von AIR 2 die Versionsinformationen in einem AIR 2.5-Anwendungsdeskriptor nicht analysieren. Wegen dieser Inkompatibilität müssen Sie Ihre Anwendung aktualisieren, damit sie das neue Update-Framework verwendet, BEVOR Sie die Anwendung auf die Verwendung des AIR 2.5 SDK aktualisieren. Somit sind für die Aktualisierung Ihrer Anwendung von einer beliebigen Version vor AIR 2.5 auf AIR 2.5 oder höher ZWEI Updates erforderlich. Das erste Update muss den AIR 2-Namespace verwenden und die AIR 2.5-Update-Frameworkbibliothek enthalten (Sie können das Anwendungspaket dennoch mit dem AIR 2.5 SDK erstellen). Das zweite Update kann den AIR 2.5-Namespace verwenden und die neuen Funktionen Ihrer Anwendung enthalten.

Es ist auch möglich, dass das Zwischenupdate abgesehen vom Aktualisieren der AIR 2.5-Anwendung direkt mit der AIR-Updater-Klasse nichts ausführt.

Das folgende Beispiel veranschaulicht das Aktualisieren einer Anwendung von Version 1.0 auf Version 2.0. Dabei verwendet Version 1.0 den alten 2.0-Namespace. Version 2.0 verwendet den 2.5-Namespace und weist neue Funktionen auf, die mit AIR 2.5 APIs implementiert wurden.

  1. Erstellen Sie eine Zwischenversion der Anwendung, Version 1.0.1, die auf Version 1.0 der Anwendung basiert.

    1. Verwenden Sie beim Erstellen der Anwendung das Anwendungs-Update-Framework von AIR 2.5.

      Hinweis: Verwenden Sie applicationupdater.swc oder applicationupdater_ui.swc für AIR-Anwendungen, die auf Flash-Technologie basieren, und applicationupdater.swf oder applicationupdater_ui.swf für HTML-basierte AIR-Anwendungen.
    2. Erstellen Sie eine Updatedeskriptordatei für Version 1.0.1, indem Sie den alten Namespace und die alte Version verwenden, wie nachstehend beschrieben:

      <?xml version="1.0" encoding="utf-8"?> 
          <update xmlns="http://ns.adobe.com/air/framework/update/description/2.0"> 
              <version>1.0.1</version> 
              <url>http://example.com/updates/sample_1.0.1.air</url> 
              <description>This is the intermediate version.</description> 
          </update>
  2. Erstellen Sie Version 2.0 der Anwendung, die AIR 2.5 APIs und den 2.5-Namespace verwendet.

  3. Erstellen Sie einen Updatedeskriptor, um die Anwendung von Version 1.0.1 auf Version 2.0 zu aktualisieren.

<?xml version="1.0" encoding="utf-8"?> 
    <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
        <version>2.0</version> 
        <url>http://example.com/updates/sample_2.0.air</url> 
        <description>This is the intermediate version.</description> 
    </update>

Definieren der Updatedeskriptordateien und Hinzufügen der AIR-Datei zum Webserver

Wenn Sie das AIR-Updateframework verwenden, definieren Sie grundlegende Informationen über das gültige Update in Updatedeskriptordateien, die auf dem Webserver gespeichert werden. Eine Updatedeskriptordatei ist eine einfache XML-Datei. Das in der Anwendung enthaltene Updateframework überprüft diese Datei, um festzustellen, ob eine neue Version hochgeladen wurde.

Das Format der Updatedeskriptordatei wurde in AIR 2.5 geändert. Das neue Format verwendet einen anderen Namespace. Der ursprüngliche Namespace ist „http://ns.adobe.com/air/framework/update/description/1.0“. Der AIR 2.5-Namespace ist „http://ns.adobe.com/air/framework/update/description/2.5“.

AIR-Anwendungen, die vor AIR 2.5 erstellt wurden, können nur den Updatedeskriptor der Version 1.0 lesen. AIR-Anwendungen, die mit dem in AIR 2.5 oder höher erstellten Updater-Framework erstellt wurden, können nur den Updatedeskriptor der Version 2.5 lesen. Aufgrund dieser Versionsinkompatibilität müssen Sie häufig zwei Updatedeskriptordateien erstellen. Die Aktualisierungslogik in den AIR 2.5-Versionen Ihrer Anwendung muss einen Updatedeskriptor herunterladen, der das neue Format verwendet. Frühere Versionen Ihrer AIR-Anwendung müssen weiterhin das ursprüngliche Format verwenden. Beide Dateien müssen für jedes Update, das Sie veröffentlichen, geändert werden (bis Sie die Unterstützung von vor AIR 2.5. erstellten Versionen einstellen).

Die Updatedeskriptordatei enthält die folgenden Daten:

  • versionNumber – Die neue Version der AIR-Anwendung. Verwenden Sie das versionNumber-Element in Updatedeskriptoren, die zum Aktualisieren von AIR 2.5-Anwendungen verwendet werden. Der Wert muss derselbe String sein, der im versionNumber-Element der neuen AIR-Anwendungsdeskriptordatei verwendet wird. Wenn die Versionsnummer in der Updatedeskriptordatei nicht mit der Versionsnummer in der AIR-Updatedatei übereinstimmt, gibt das Updateframework eine Ausnahme aus.

  • version – Die neue Version der AIR-Anwendung. Verwenden Sie das version-Element in Updatedeskriptoren, die zum Aktualisieren von Anwendungen verwendet werden, die vor AIR 2.5 erstellt wurden. Der Wert muss derselbe String sein, der im version-Element der neuen AIR-Anwendungsdeskriptordatei verwendet wird. Wenn die Version in der Updatedeskriptordatei nicht mit der Version in der AIR-Updatedatei übereinstimmt, gibt das Updateframework eine Ausnahme aus.

  • versionLabel – Die Klartextversion des Strings, die den Benutzern angezeigt werden soll. Das versionLabel-Element ist optional, kann aber nur in Updatedeskriptordateien der Version 2.5 angegeben werden. Verwenden Sie es, wenn Sie versionLabel im Anwendungsdeskriptor verwenden, und setzen Sie es auf denselben Wert.

  • url – Der Speicherort der AIR-Updatedatei. Dies ist die Datei, die die aktualisierte Version der AIR-Anwendung enthält.

  • description – Details zur neuen Version. Diese Informationen können dem Benutzer während des Updateprozesses angezeigt werden.

Die Elemente version und url sind obligatorisch. Das Element description ist optional.

Folgendes ist ein Beispiel einer Updatedeskriptordatei der Version 2.5:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
       <versionNumber>1.1.1</versionNumber> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description>This is the latest version of the Sample application.</description> 
    </update>

Folgendes ist ein Beispiel einer Updatedeskriptordatei der Version 1.0:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1.1</version> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description>This is the latest version of the Sample application.</description> 
    </update>

Wenn Sie das description-Tag in mehreren Sprachen definieren möchten, verwenden Sie mehrere text-Elemente, die ein lang-Attribut definieren:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
       <versionNumber>1.1.1</versionNumber> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

Legen Sie die Updatedeskriptordatei zusammen mit der AIR-Datei auf dem Webserver ab.

Das Vorlagenverzeichnis, das im Updatedeskriptor enthalten ist, enthält Beispiele für Updatedeskriptordateien. Diese enthalten sowohl ein- als auch mehrsprachige Versionen.

Instanziieren eines Updaterobjekts

Nach dem Laden des AIR-Updateframeworks in den Code (siehe Einrichten der Flex-Entwicklungsumgebung und Einschließen von Frameworkdateien in eine HTML-basierte AIR-Anwendung) müssen Sie ein Updaterobjekt instanziieren, wie im folgenden Beispiel.

ActionScript-Beispiel:

var appUpdater:ApplicationUpdater = new ApplicationUpdater();

JavaScript-Beispiel:

var appUpdater = new runtime.air.update.ApplicationUpdater();

Im vorherigen Code wurde die ApplicationUpdater-Klasse, die keine Benutzeroberfläche zur Verfügung stellt, verwendet. Wenn Sie die ApplicationUpdaterUI-Klasse verwenden möchten, die eine Benutzeroberfläche bietet, verwenden Sie Folgendes.

ActionScript-Beispiel:

var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();

JavaScript-Beispiel:

var appUpdater = new runtime.air.update.ApplicationUpdaterUI();

Bei den verbleibenden Codebeispielen in diesem Dokument wird davon ausgegangen, dass Sie ein Updaterobjekt mit dem Namen appUpdater instanziiert haben.

Konfigurieren der Updateeinstellungen

ApplicationUpdater und ApplicationUpdaterUI können beide über eine Konfigurationsdatei konfiguriert werden, die mit der Anwendung geliefert wird, oder über ActionScript oder JavaScript in der Anwendung.

Definieren der Updateeinstellungen in einer XML-Konfigurationsdatei

Die Updatekonfigurationsdatei ist eine XML-Datei. Sie kann die folgenden Elemente enthalten:

  • updateURL – Ein String. Repräsentiert den Speicherort des Updatedeskriptors auf dem Remoteserver. Jeder gültige URLRequest-Speicherort ist zulässig. Sie müssen die updateURL-Eigenschaft entweder über die Konfigurationsdatei oder über Skript definieren (siehe Definieren der Updatedeskriptordateien und Hinzufügen der AIR-Datei zum Webserver). Diese Eigenschaft muss definiert werden, bevor der Updater verwendet wird (bevor die initialize()-Methode des Updater-Objekts wie unter Initialisieren des Updateframeworks beschrieben aufgerufen wird).

  • delay – Eine Zahl. Repräsentiert ein Zeitintervall in Tagen (zum Beispiel ein Wert wie 0.25) für die Suche nach Updates. Mit dem Standardwert 0 wird angegeben, dass der Updater nicht in regelmäßigen Abständen automatisch überprüft, ob Updates vorliegen.

Die Konfigurationsdatei für die ApplicationUpdaterUI kann neben den Elementen updateURL und delay auch die folgenden Elemente enthalten:

  • defaultUI: Eine Liste von dialog-Elementen. Jedes dialog-Element verfügt über ein name-Attribut, das einem Dialogfeld in der Benutzeroberfläche entspricht. Jedes dialog-Element verfügt über ein visible-Attribute, das definiert, ob das Dialogfeld sichtbar ist. Der Standardwert lautet true. Das name-Attribut kann folgende Werte haben:

    • "checkForUpdate" – Entspricht den Dialogfeldern „Check for Update“ (Nach Updates suchen), „No Update“ (Kein Update verfügbar) und „Update Error“ (Updatefehler)

    • "downloadUpdate" – Entspricht dem Dialogfeld „Download Update“ (Update herunterladen)

    • "downloadProgress" – Entspricht den Dialogfelder „Download Progress“ (Downloadfortschritt“ und „Download Error“ (Downloadfehler)

    • "installUpdate" – Entspricht dem Dialogfeld „Install Update“ (Update installieren)

    • "fileUpdate" – Entspricht den Dialogfeldern „File Update“ (Datei-Update), „File No Update“ (Kein Datei-Update) und „File Error“ (Dateifehler)

  • "unexpectedError" – Entspricht dem Dialogfeld „Unexpected Error“ (Unerwarteter Fehler)

    Mit der Einstellung false erscheint das entsprechende Dialogfeld nicht als Teil des Updatevorgangs.

Folgendes ist ein Beispiel für die Konfigurationsdatei des ApplicationUpdater-Frameworks:

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
</configuration>

Folgendes ist ein Beispiel für die Konfigurationsdatei des ApplicationUpdater-Frameworks, das eine Definition des defaultUI-Elements enthält:

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
      <defaultUI> 
         <dialog name="checkForUpdate" visible="false" /> 
         <dialog name="downloadUpdate" visible="false" /> 
         <dialog name="downloadProgress" visible="false" /> 
      </defaultUI> 
</configuration>

Verweisen Sie mit der configurationFile-Eigenschaft auf den Speicherort dieser Datei:

ActionScript-Beispiel:

appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
JavaScript-Beispiel:
appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");

Das Vorlagenverzeichnis („templates“) des Updateframeworks enthält eine Beispielkonfigurationsdatei, config-template.xml.

Definieren der Updateeinstellungen mit ActionScript- oder JavaScript-Code

Diese Konfigurationsparameter können auch mithilfe von Code in der Anwendung festgelegt werden wie im Folgenden:

appUpdater.updateURL = " http://example.com/updates/update.xml"; 
appUpdater.delay = 1;

Die Eigenschaften des Updaterobjekts sind updateURL und delay. Mit diesen Eigenschaften werden dieselben Einstellungen wie mit den updateURL- und delay-Elementen in der Konfigurationsdatei festgelegt: die URL der Updatedeskriptordatei und das Intervall für die Suche nach Updates. Wenn Sie eine Konfigurationsdatei und Einstellungen im Code angeben, haben die mithilfe von Code festgelegten Eigenschaften Vorrang vor den entsprechenden Einstellungen in der Konfigurationsdatei.

Sie müssen die updateURL-Eigenschaft entweder über die Konfigurationsdatei oder über Skript definieren (siehe Definieren der Updatedeskriptordateien und Hinzufügen der AIR-Datei zum Webserver), bevor der Updater verwendet wird (bevor die initialize()-Methode des Updaterobjekt aufgerufen wird wie unter Initialisieren des Updateframeworks beschrieben).

Das ApplicationUpdaterUI-Framework definiert diese zusätzlichen Eigenschaften des Updaterobjekts:

  • isCheckForUpdateVisible – Entspricht den Dialogfeldern „Check for Update“ (Nach Updates suchen), „No Update“ (Kein Update verfügbar) und „Update Error“ (Updatefehler)

  • isDownloadUpdateVisible – Entspricht dem Dialogfeld „Download Update“ (Update herunterladen)

  • isDownloadProgressVisible – Entspricht den Dialogfelder „Download Progress“ (Downloadfortschritt“ und „Download Error“ (Downloadfehler)

  • isInstallUpdateVisible – Entspricht dem Dialogfeld „Install Update“ (Update installieren)

  • isFileUpdateVisible – Entspricht den Dialogfeldern „File Update“ (Datei-Update), „File No Update“ (Kein Datei-Update) und „File Error“ (Dateifehler)

  • isUnexpectedErrorVisible – Entspricht dem Dialogfeld „Unexpected Error“ (Unerwarteter Fehler)

Jede Eigenschaft entspricht einem Dialogfeld oder mehreren Dialogfeldern in der ApplicationUpdaterUI-Benutzeroberfläche. Jede Eigenschaft ist ein boolescher Wert; der Standardwert lautet true. Mit der Einstellung false erscheinen die entsprechenden Dialogfelder nicht als Teil des Updatevorgangs.

Diese Dialogfeldeigenschaften haben Vorrang vor den Einstellungen in der Updatekonfigurationsdatei.

Der Updateprozess

Das AIR-Updateframework führt beim Updatevorgang die folgenden Schritte aus:

  1. Bei der Updaterinitialisierung wird überprüft, ob innerhalb des definierten Zeitraums nach Updates gesucht wurde (siehe Konfigurieren der Updateeinstellungen). Wenn eine Suche nach Updates fällig ist, wird der Updateprozess fortgesetzt.

  2. Der Updater lädt die Updatedeskriptordatei asynchron herunter und interpretiert sie.

  3. Der Updater lädt die AIR-Updatedatei herunter.

  4. Der Updater installiert die aktualisierte Version der Anwendung.

Das Updaterobjekt löst nach Abschluss der einzelnen Schritte Ereignisse aus. In der ApplicationUpdater-Version können Sie die Ereignisse abbrechen, die den erfolgreichen Abschluss eines Prozessschrittes anzeigen. Wenn Sie eines dieser Ereignisse abbrechen, wird der nächste Prozessschritt abgebrochen. In der ApplicationUpdaterUI-Version zeigt der Updater ein Dialogfeld an, das dem Benutzer bei jedem Prozessschritt die Möglichkeit zum Abbrechen oder Fortsetzen des Prozesses gibt.

Wenn Sie das Ereignis abbrechen, können Sie den Prozess durch den Aufruf von Methoden des Updaterobjekts fortsetzen.

Während die ApplicationUpdater-Version des Updaters den Updateprozess durchläuft, wird der aktuelle Status in einer currentState-Eigenschaft aufgezeichnet. Diese Eigenschaft ist auf einen String mit folgenden möglichen Werte festgelegt:

  • "UNINITIALIZED" – Der Updater wurde nicht initialisiert.

  • "INITIALIZING" – Der Updater wird initialisiert.

  • "READY" – Der Updater wurde initialisiert

  • "BEFORE_CHECKING" – Der Updater hat noch nicht nach der Updatedeskriptordatei gesucht.

  • "CHECKING" – Der Updater sucht nach einer Updatedeskriptordatei.

  • "AVAILABLE" – Die Updatedeskriptordatei ist verfügbar.

  • "DOWNLOADING" – Der Updater lädt die AIR-Datei herunter.

  • "DOWNLOADED" – Der Updater hat die AIR-Datei heruntergeladen.

  • "INSTALLING" – Der Updater installiert die AIR-Datei.

  • "PENDING_INSTALLING" – Der Updater wurde initialisiert und es gibt ausstehende Updates.

Einige Methoden des Updaterobjekts werden nur ausgeführt, wenn sich der Updater in einem bestimmten Status befindet.

Initialisieren des Updateframeworks

Nach dem Einstellen der Konfigurationseigenschaften (siehe Basisbeispiel – Verwenden der ApplicationUpdaterUI-Version) rufen Sie die initialize()-Methode auf, um das Update zu initialisieren:

appUpdater.initialize();

Diese Methode führt Folgendes aus:

  • Sie initialisiert das Updateframework, wobei ohne weitere Meldung synchron die ggf. ausstehenden Updates installiert werden. Es ist erforderlich, diese Methode beim Anwendungsstart aufzurufen, da sie die Anwendung beim Aufrufen möglicherweise neu startet.

  • Sie sucht nach einer verschobenen Aktualisierung und installiert sie ggf.

  • Wenn es beim Updateprozess zu einem Fehler kommt, löscht die Methode die Updatedatei und die Versionsinformationen aus dem Anwendungsspeicherbereich.

  • Wenn die Verzögerung abgelaufen ist, wird der Updateprozess gestartet. Andernfalls wird der Timer neu gestartet.

Das Aufrufen diese Methode kann dazu führen, dass das Updaterobjekt die folgenden Ereignisse auslöst:

  • UpdateEvent.INITIALIZED – Wird ausgelöst, wenn die Initialisierung abgeschlossen ist.

  • ErrorEvent.ERROR – Wird ausgelöst, wenn es bei der Initialisierung zu einem Fehler kommt.

Beim Auslösen des UpdateEvent.INITIALIZED-Ereignisses ist der Updateprozess abgeschlossen.

Wenn Sie die initialize()-Methode aufrufen, beginnt der Updater mit dem Updateprozess und führt alle Schritte basierend auf der Verzögerungseinstellung des Timers aus. Sie können den Updateprozess aber jederzeit starten, indem Sie die checkNow()-Methode des Updaterobjekts aufrufen:

appUpdater.checkNow();

Diese Methode hat keine Auswirkungen, wenn der Updateprozess bereits ausgeführt wird. Andernfalls wird der Updateprozess gestartet.

Das Updaterobjekt kann das folgende Ereignis als Resultat des Aufrufs der checkNow()-Methode auslösen:

  • UpdateEvent.CHECK_FOR_UPDATE, direkt vor dem Versuch, die Updatedeskriptordatei herunterzuladen.

Wenn Sie das checkForUpdate-Ereignis abbrechen, können Sie die checkForUpdate()-Methode des Updaterobjekts aufrufen. (Lesen Sie dazu den nächsten Abschnitt.) Wenn Sie das Ereignis nicht abbrechen, wird der Updateprozess fortgesetzt, um nach der Updatedeskriptordatei zu suchen.

Verwalten des Updateprozesses in der ApplicationUpdaterUI-Version

In der ApplicationUpdaterUI-Version kann der Benutzer den Prozess über die Schaltfläche „Abbrechen“ in den Dialogfeldern der Benutzeroberfläche abbrechen. Außerdem lässt sich der Updateprozess programmgesteuert abbrechen, indem die cancelUpdate()-Methode des ApplicationUpdaterUI-Objekts aufgerufen wird.

Sie können die Eigenschaften des ApplicationUpdaterUI-Objekts festlegen oder Elemente in der Updatekonfigurationsdatei definieren, um anzugeben, welche Dialogfeldbestätigungen vom Updater angezeigt werden. Weitere Informationen finden Sie unter Konfigurieren der Updateeinstellungen.

Verwalten des Updateprozesses in der ApplicationUpdater-Version

Sie können die preventDefault()-Methode von Ereignisobjekten aufrufen, die vom ApplicationUpdater-Objekt ausgelöst werden, um Schritte des Updateprozesses abzubrechen (siehe Der Updateprozess). Das Abbrechen des Standardverhaltens gibt der Anwendung die Möglichkeit, den Benutzer in einer Meldung zu fragen, ob der Vorgang fortgesetzt werden soll.

In den folgenden Abschnitten wird beschrieben, wie Sie den Updateprozess nach Abbruch eines Prozessschrittes fortsetzen.

Herunterladen und Interpretieren der Updatedeskriptordatei

Das ApplicationUpdater-Objekt löst das checkForUpdate-Ereignis aus, bevor der Updateprozess beginnt, direkt bevor der Updater versucht, die Updatedeskriptordatei herunterzuladen. Wenn Sie das Standardverhalten des checkForUpdate-Ereignisses abbrechen, lädt der Updater die Updatedeskriptordatei nicht herunter. Sie können die checkForUpdate()-Methode aufrufen, um den Updateprozess fortzusetzen:

appUpdater.checkForUpdate();

Das Aufrufen der checkForUpdate()-Methode veranlasst den Updater, die Updatedeskriptordatei asynchron herunterzuladen und zu interpretieren. Als Folge des Aufrufs der checkForUpdate()-Methode kann das Updaterobjekt die folgenden Ereignisse auslösen:

  • StatusUpdateEvent.UPDATE_STATUS – Der Updater hat die Updatedeskriptordatei erfolgreich heruntergeladen und interpretiert. Dieses Ereignis hat die folgenden Eigenschaften:

    • available – Ein boolescher Wert. Die Eigenschaft hat den Wert true, wenn eine andere Version verfügbar ist als die aktuelle Anwendung; andernfalls (wenn die Version identisch ist) hat sie den Wert false.

    • version – Ein String. Die Version aus der Anwendungsdeskriptordatei der Updatedatei.

    • details – Ein Array. Wenn es keine lokalisierten Versionen der Beschreibung gibt, gibt dieses Array einen leeren String ("") als erstes Element und die Beschreibung als zweites Element zurück.

      Wenn es mehrere Versionen der Beschreibung gibt (in der Updatedeskriptordatei) enthält das Array mehrere Teilarrays. Jedes Array verfügt über zwei Elemente: das erste ist ein Sprachencode (zum Beispiel "en") und das zweite ist die entsprechende Beschreibung (ein String) dieser Sprache. Lesen Sie dazu Definieren der Updatedeskriptordateien und Hinzufügen der AIR-Datei zum Webserver.

  • StatusUpdateErrorEvent.UPDATE_ERROR – Es ist ein Fehler aufgetreten und der Updater konnte die Updatedeskriptordatei nicht herunterladen oder interpretieren.

Herunterladen der AIR-Updatedatei

Das ApplicationUpdater-Objekt löst das updateStatus-Ereignis aus, nachdem der Updater die Updatedeskriptordatei erfolgreich heruntergeladen und interpretiert hat. Das Standardverhalten besteht darin, die Updatedatei herunterzuladen, falls sie verfügbar ist. Wenn Sie das Standardverhalten abbrechen, können Sie die downloadUpdate()-Methode aufrufen, um den Updateprozess fortzusetzen:

appUpdater.downloadUpdate();

Der Aufruf dieser Methode veranlasst den Updater, die Updateversion der AIR-Datei asynchron herunterzuladen.

Die downloadUpdate()-Methode kann die folgenden Ereignisse auslösen:

  • UpdateEvent.DOWNLOAD_START – Die Verbindung zum Server wurde hergestellt. Bei Verwendung der ApplicationUpdaterUI-Bibliothek zeigt dieses Ereignis ein Dialogfeld mit einem Fortschrittsbalken für den Downloadprozess an.

  • ProgressEvent.PROGRESS – Wird regelmäßig ausgelöst, während die Datei heruntergeladen wird.

  • DownloadErrorEvent.DOWNLOAD_ERROR – Wird ausgelöst, wenn beim Herstellen der Verbindung oder beim Herunterladen der Update-Datei ein Fehler auftritt. Das Ereignis wird auch ausgelöst, wenn ein ungültiger HTTP-Status vorliegt (zum Beispiel „404 - Datei nicht gefunden“). Dieses Ereignis hat eine errorID-Eigenschaft, eine Ganzzahl, die weitere Fehlerinformationen definiert. Eine zusätzliche subErrorID-Eigenschaft kann ausführlichere Fehlerinformationen enthalten.

  • UpdateEvent.DOWNLOAD_COMPLETE – Der Updater hat die Updatedeskriptordatei erfolgreich heruntergeladen und interpretiert. Wenn Sie dieses Ereignis nicht abbrechen, fährt die ApplicationUpdater-Version mit der Installation der Updateversion fort. In der ApplicationUpdaterUI-Version wird dem Benutzer ein Dialogfeld angezeigt, in dem er sich für die Fortsetzung des Vorgangs entscheiden kann.

Aktualisieren der Anwendung

Das ApplicationUpdater-Objekt löst das downloadComplete-Ereignis aus, wenn der Download der Updatedatei abgeschlossen ist. Wenn Sie das Standardverhalten abbrechen, können Sie die installUpdate()-Methode aufrufen, um den Updateprozess fortzusetzen:

appUpdater.installUpdate(file);

Der Aufruf dieser Methode veranlasst den Updater, die Updateversion der AIR-Datei zu installieren. Die Methode enthält einen Parameter, file, bei dem es sich um ein File-Objekt handelt, das auf die als Update zu verwendende AIR-Datei verweist.

Das ApplicationUpdater-Objekt kann das beforeInstall-Ereignis als Folge des Aufrufs der installUpdate()-Methode auslösen:

  • UpdateEvent.BEFORE_INSTALL – Wird direkt vor dem Installieren des Updates ausgelöst. Es kann sinnvoll sein, die Installation des Updates zu diesem Zeitpunkt zu verhindern, damit der Benutzer aktuelle Vorgänge abschließen kann, bevor das Update fortgesetzt wird. Durch den Aufruf der preventDefault()-Methode des Ereignisobjekts wird die Installation bis zum nächsten Neustart verschoben, und es kann kein weiterer Updateprozess gestartet werden. (Dies schließt Updates mit ein, die aufgrund eines Aufrufs der checkNow()-Methode oder aufgrund regelmäßiger Überprüfungen ausgeführt werden.)

Installieren aus einer beliebigen AIR-Datei

Sie können die installFromAIRFile()-Methode aufrufen, um die Updateversion von einer AIR-Datei auf dem Computer des Benutzers zu installieren:

appUpdater.installFromAIRFile();

Mit dieser Methode installiert der Updater eine Updateversion der Anwendung aus der AIR-Datei.

Die installFromAIRFile()-Methode kann die folgenden Ereignisse auslösen:

  • StatusFileUpdateEvent.FILE_UPDATE_STATUS – Wird ausgelöst, nachdem der ApplicationUpdater die mit der installFromAIRFile()-Methode gesendete Datei erfolgreich validiert hat. Dieses Ereignis verfügt über die folgenden Eigenschaften:

    • available – Die Eigenschaft hat den Wert true, wenn eine andere Version verfügbar ist als die der aktuellen Anwendung; andernfalls (wenn die Versionen identisch sind) hat sie den Wert false.

    • version – Der String, der die neue verfügbare Version darstellt.

    • path – Repräsentiert den nativen Pfad der Updatedatei.

    Sie können dieses Ereignis abbrechen, wenn die available-Eigenschaft des StatusFileUpdateEvent-Objekts den Wert true hat. Das Abbrechen dieses Ereignisses führt dazu, dass das Update nicht fortgesetzt wird. Rufen Sie die installUpdate()-Methode auf, um das abgebrochene Update fortzusetzen.

  • StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR – Es ist ein Fehler aufgetreten und der Updater konnte die AIR-Anwendung nicht installieren.

Abbrechen des Updateprozesses

Sie können die cancelUpdate()-Methode aufrufen, um den Updateprozess abzubrechen:

appUpdater.cancelUpdate();

Mit dieser Methode werden alle ausstehenden Downloads abgebrochen, unvollständig heruntergeladene Dateien werden gelöscht und der Timer für die regelmäßige Suche nach Updates wird zurückgesetzt.

Die Methode hat keine Auswirkungen, wenn das Updaterobjekt initialisiert wird.

Lokalisieren der ApplicationUpdaterUI-Oberfläche

Die ApplicationUpdaterUI-Klasse stellt eine Standardbenutzeroberfläche für den Updateprozess bereit. Dazu gehören Dialogfelder, in denen der Benutzer den Prozess starten oder abbrechen und ähnliche Aktionen ausführen kann.

Mit dem description-Element der Updatedeskriptordatei können Sie die Beschreibung der Anwendung in mehreren Sprachen definieren. Verwenden Sie mehrere text-Elemente, die lang-Attribute definieren, wie im Folgenden:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1a1</version> 
       <url>http://example.com/updates/sample_1.1a1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

Das Updateframework verwendet die Beschreibung, die am besten zum Gebietsschema des Endbenutzers passt. Weitere Informationen finden Sie unter „Definieren der Updatedeskriptordatei und Hinzufügen der AIR-Datei zum Webserver“.

Flex-Entwickler können eine neue Sprache direkt zum "ApplicationUpdaterDialogs"-Bundle hinzufügen.

JavaScript-Entwickler können die addResources()-Methode des Updaterobjekts aufrufen. Diese Methode fügt dynamisch ein neues Ressourcen-Bundle für eine Sprache hinzu. Das Ressourcen-Bundle definiert lokalisierte Strings für eine Sprache. Diese Strings werden in verschiedenen Textfeldern in Dialogfeldern verwendet.

JavaScript-Entwickler können die localeChain-Eigenschaft der ApplicationUpdaterUI-Klasse verwenden, um die von der Benutzeroberfläche verwendeten Gebietsschemaeinstellungen zu definieren. Normalerweise verwenden nur Entwickler, die mit JavaScript (HTML) arbeiten, diese Eigenschaft. Flex-Entwickler können die Gebietsschemaeinstellungen mit dem ResourceManager verwalten.

Im folgenden JavaScript-Code werden zum Beispiel Ressourcen-Bundle für Rumänisch und Ungarisch definiert:

appUpdater.addResources("ro_RO", 
                    {titleCheck: "Titlu", msgCheck: "Mesaj", btnCheck: "Buton"}); 
appUpdater.addResources("hu", {titleCheck: "Cím", msgCheck: "Üzenet"}); 
var languages = ["ro", "hu"]; 
languages = languages.concat(air.Capabilities.languages); 
var sortedLanguages = air.Localizer.sortLanguagesByPreference(languages, 
                         air.Capabilities.language, 
                         "en-US"); 
sortedLanguages.push("en-US"); 
appUpdater.localeChain = sortedLanguages;

Weitere Informationen finden Sie unter der Beschreibung der addResources()-Methode der ApplicationUpdaterUI-Klasse im Referenzhandbuch.