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 AnwendungenDie 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()-MethodeWenn 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-StringDer·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 AnwendungsupdatesDas 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:
Bereitstellen einer benutzerdefinierten Oberfläche für die AnwendungsaktualisierungAIR 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 BenutzersDie 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 wirdMö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 UpdateframeworksDas 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:
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-UpdateframeworkdateienDas AIR-Updateframework ist im Verzeichnis „frameworks/libs/air“ des AIR 2 SDK enthalten. Es umfasst die folgenden Dateien:
Weitere Informationen finden Sie in den folgenden Abschnitten: Einrichten der Flex-EntwicklungsumgebungDie 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-AnwendungDas Verzeichnis „frameworks/html“ des Updateframeworks enthält die folgenden SWF-Dateien:
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-VersionDie 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:
Als Nächstes fügen Sie die Updateversion der AIR-Anwendung Ihrem Webserver hinzu:
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.5Da 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.
<?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 WebserverWenn 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:
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 UpdaterobjektsNach 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 UpdateeinstellungenApplicationUpdater 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-KonfigurationsdateiDie Updatekonfigurationsdatei ist eine XML-Datei. Sie kann die folgenden Elemente enthalten:
Die Konfigurationsdatei für die ApplicationUpdaterUI kann neben den Elementen updateURL und delay auch die folgenden Elemente enthalten:
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-CodeDiese 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:
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 UpdateprozessDas AIR-Updateframework führt beim Updatevorgang die folgenden Schritte aus:
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:
Einige Methoden des Updaterobjekts werden nur ausgeführt, wenn sich der Updater in einem bestimmten Status befindet. Initialisieren des UpdateframeworksNach 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:
Das Aufrufen diese Methode kann dazu führen, dass das Updaterobjekt die folgenden Ereignisse auslöst:
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:
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-VersionIn 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-VersionSie 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 UpdatedeskriptordateiDas 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:
Herunterladen der AIR-UpdatedateiDas 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:
Aktualisieren der AnwendungDas 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:
Installieren aus einer beliebigen AIR-DateiSie 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:
Abbrechen des UpdateprozessesSie 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ächeDie 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. |
|