Обновление приложений AIR
Пользователи могут установить или обновить приложение AIR, дважды нажав файл AIR на компьютере или в обозревателе (пользуясь функцией автоматической установки). Программа установки Adobe® AIR® будет управлять установкой, уведомив пользователя о том, что выполняется обновление уже существующего приложения. Однако обновить приложение можно и при помощи класса Updater. (Установленное приложение может проверять наличие новой версии для загрузки и установки.) Класс Updater имеет метод update(), который позволяет указать файл AIR на компьютере пользователя и обновить приложение до этой версии. Для использования класса Updater необходимо, чтобы приложение было упаковано в файл AIR. Приложения, упакованные в виде собственного исполняемого файла или пакета, должны использовать средства обновления, предоставляемые собственной платформой. Идентификатор приложения и идентификатор издателя файла обновления AIR должны соответствовать обновляемому приложению. Идентификатор издателя можно получить из сертификата подписи. Обновление, и обновляемое приложение должны быть подписаны одним сертификатом. В AIR 1.5.3 или более поздней версии файл дескриптора приложения содержит элемент <publisherID>. Этот элемент необходимо использовать, если версии приложения создавались в AIR 1.5.2 или более ранней версии. Дополнительные сведения см. в разделе «publisherID». Что касается AIR 1.1 и более поздних версий, можно выполнить перенос приложения для использования нового сертификата подписи кода. Перенос приложения в целях использования новой подписи включает в себя подписывание файла обновления AIR новым и исходным сертификатом. Перенос сертификата является односторонним процессом. После переноса только файлы AIR, подписанные новым сертификатом (или обоими сертификатами), будут распознаны как обновления существующей установки. Управление обновлением приложений может быть достаточно сложным. AIR 1.5 содержит новую инфраструктуру обновления для приложений AdobeAIR. Эта инфраструктура обеспечивает прикладные интерфейсы программирования, помогающие разработчикам создавать удобные возможности обновления в приложениях AIR. Перенос сертификата можно выполнить для замены самозаверяющего сертификата коммерческим сертификатом подписи кода или смены одного самозаверяющего или коммерческого сертификата на другой. Если не выполнить перенос сертификата, пользователи должны будут удалить текущую версию приложения перед установкой новой. Дополнительные сведения см. в разделе «Замена сертификатов». Рекомендуется включить новый механизм обновления в приложение. При появлении новой версии приложения, механизм обновления выведет пользователю приглашение на ее установку. Программа установки приложения AIR создает файлы журнала при установке, обновлении или удалении приложения AIR. Журналы установок позволяют определить причины проблем при установке или обновлении. См. статью Журналы установки. Примечание. Новые версии среды Adobe AIR могут включать в себя обновленные версии WebKit. Обновленная версия WebKit может привести к неожиданным изменениям в содержимом HTML развернутого приложения AIR. Поэтому может потребоваться обновить приложение. Механизм обновления может уведомлять пользователей о выходе новой версии приложения. Дополнительные сведения см. в разделе Сведения о среде HTML (для разработчиков ActionScript) или Сведения о среде HTML (для разработчиков HTML).
Об обновлении приложенийКласс Updater (в пакете flash.desktop) содержит один метод, update(), который можно использовать для обновления выполняемого приложения. Например, если на рабочем столе пользователя размещена версия файла AIR («Sample_App_v2.air»), следующий код обновляет приложение. Пример ActionScript: 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: var updater = new air.Updater(); var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); var version = "2.01"; updater.update(airFile, version); Перед использованием класса Updater приложением пользователь или приложение должны загрузить обновленную версию файла AIR на компьютер. Дополнительные сведения см. в разделе «Загрузка файла AIR на компьютер пользователя». Результаты вызова метода Updater.update()Когда приложение вызывает в среде выполнения метод update(), среда выполнения закрывает приложение, а затем пытается установить новую версию из файла AIR. Среда выполнения проверяет идентификатор приложения и идентификатор издателя, указанные в файле AIR, на соответствие идентификатору приложения и идентификатору издателя приложения, вызывающего метод update(). (Сведения об идентификаторе приложения и идентификаторе издателя см. в разделе «Файлы дескриптора приложения AIR».) Она также проверяет соответствие строки version строке version, передаваемой методу update(). Если установка прошла успешно, среда выполнения открывает новую версию приложения. В противном случае (если установка не может быть завершена) снова открывается существующая (до установки) версия приложения. В случае с системой Mac OS для установки обновленной версии приложения пользователь должен иметь соответствующие системные привилегии для установки в каталог приложения. В Windows и Linux пользователь должен обладать правами администратора. Если обновленная версия приложения требует обновленной версии среды выполнения, устанавливается новая версия среды выполнения. Для обновления среды выполнения на компьютере необходимы права администратора. При тестировании приложения в ADL вызов метода update() выдает исключение среды выполнения. О строке versionСтрока, представленная параметром version метода update(), должна соответствовать строке в элементе version или versionNumber в файле дескриптора приложения устанавливаемого файла AIR. Задание параметра version является обязательным в целях защиты. Заставив приложение проверять номер версии в файле AIR, можно предотвратить случайную установку старой версии приложения. (В более старой версии приложения возможны уязвимые места в системе защиты, которые были исправлены в установленном приложении.) Приложение должно сверить строку version в файле AIR со строкой version установленного приложения во избежание атак с установкой устаревшей версии. До версии AIR 2.5 строка version может иметь любой формат. Например, это может выглядеть как «2.01» или как «version 2». Начиная с версии AIR 2.5 строка version должна содержать последовательность из не более чем трех трехзначных чисел, разделенных точкой. Например, допустимыми номерами версий могут быть следующие: «.0», «1.0» и «67.89.999». Перед обновлением приложения необходимо задать корректную строку version. Если приложение Adobe AIR загружает файл AIR из Интернета, рекомендуется иметь механизм, при помощи которого веб-служба может сообщить приложению Adobe AIR номер загружаемой версии. Приложение может затем использовать эту строку в качестве параметра version метода update(). При получении файла AIR из другого источника, который не предоставляет информацию о версии файла AIR, приложение AIR может проверить файл AIR для получения информации о версии. (Файл AIR является сжатым ZIP-архивом, а файл дескриптора приложения занимает вторую позицию в архиве.) Дополнительные сведения о файле дескриптора приложения см. в разделе «Файлы дескриптора приложения AIR». Процедура подписания для обновлений приложенийПубликация обновлений специальным образом усложняет управление несколькими версиями приложений, а также создает сложности в отслеживании срока действий сертификата. Срок действия сертификата может заканчиваться до публикации обновления. Среда выполнения Adobe AIR рассматривает обновления приложений, опубликованные без подписи переноса, как новые приложения. Пользователям необходимо удалить текущую версию приложений AIR, прежде чем они смогут установить обновление. Для разрешения проблемы загрузите все обновленные приложения с последним сертификатом на отдельный URL развертывания. Добавьте механизм, который будет напоминать вам применять подпись переноса до окончания 180-дневного льготного периода. Дополнительные сведения см. в разделе «Подписание обновленной версии приложения AIR». Дополнительные сведения см. в разделе «Команды ADT». Выполнение следующих операций позволит упростить процесс применения подписи переноса.
Использование настраиваемого пользовательского интерфейса обновления приложенияAIR включает в себя интерфейс обновления по умолчанию: Этот интерфейс используется при первой установке пользователем на компьютер версии приложения. Однако можно задать собственный интерфейс для последующих версий. Если в приложении определяется настраиваемый пользовательский интерфейс обновления, укажите элемент customUpdateUI в файле дескриптора приложения для текущего установленного приложения. <customUpdateUI>true</customUpdateUI> После установки приложения и открытия пользователем файла AIR с идентификатором приложения и идентификатором издателя, соответствующими установленному приложению, среда выполнения открывает приложение, а не программу установки приложения AIR по умолчанию. Дополнительные сведения см. в разделе «customUpdateUI». При выполнении приложения оно может принять решение (при отправке объектом NativeApplication.nativeApplication события load) об установке обновления (при помощи класса Updater). Если принято решение в пользу обновления, приложение может предоставить пользователю собственный интерфейс установки (который отличается от стандартного интерфейса выполнения). Загрузка файла AIR на компьютер пользователяДля использования класса Updater пользователь или приложение должны сначала сохранить файл AIR на компьютер пользователя. Примечание. AIR 1.5 содержит инфраструктуру обновления, помогающую разработчикам создавать удобные возможности обновления в приложениях AIR. Использовать эту инфраструктуру гораздо проще, чем напрямую применять метод update() класса Update. Дополнительные сведения см. в разделе «Использование инфраструктуры обновления».
Следующий код выполняет чтение файла AIR с URL-адреса (http://example.com/air/updates/Sample_App_v2.air) и сохраняет этот файл AIR в каталог хранилища приложения. Пример ActionScript: 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: 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."); } Дополнительные сведения см. в разделе:
Проверка факта первичного запуска приложенияПосле обновления приложения можно отобразить экран приветствия. При запуске приложение проверяет факт первичного запуска и принимает решение о том, отображать приветствие или нет. Примечание. AIR 1.5 содержит инфраструктуру обновления, помогающую разработчикам создавать удобные возможности обновления в приложениях AIR. Эта инфраструктура предоставляет удобные методы проверки, первый ли раз запущена версия приложения. Дополнительные сведения см. в разделе «Использование инфраструктуры обновления».
Для этого можно сохранить файл в каталог хранилища приложения при инициализации приложения. При каждом запуске приложения оно должно проверять наличие этого файла. Если файл не существует, то приложение выполняется первый раз для данного пользователя. Существование файла означает, что приложение уже выполнялось по крайней мере один раз. Если файл существует и содержит номер более старой версии, чем номер текущей версии, значит пользователь выполняет новую версию приложения в первый раз. Следующий пример Flex иллюстрирует данную концепцию: <?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> В следующем примере показана реализация этой концепции в JavaScript: <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> Если приложение сохраняет данные локально (например, в каталоге хранилища приложения), можно проверить ранее сохраненные данные (предыдущими версиями) при первом запуске. Использование инфраструктуры обновленияУправление обновлениями приложений может быть трудоемкой задачей. Инфраструктура обновления для приложений AdobeAIRпредоставляет API-интерфейсы, которые позволяют разработчикам реализовывать возможности обновления в приложениях AIR. Инфраструктура обновления AIR выполняет следующие задачи для разработчиков:
Инфраструктура обновления AIR предлагает пользовательский интерфейс, который может использоваться приложением. Она предоставляет пользователю основную информацию и параметры конфигурации для обновлений приложений. Приложение также может определить настраиваемый пользовательский интерфейс для использования с инфраструктурой обновления. Инфраструктура обновления AIR позволяет сохранять информацию по обновлению версии приложения AIR в простых файлах конфигурации XML. Благодаря настройке файлов конфигурации, позволяющей включить базовый код, большинство приложений способны предложить своим конечным пользователям хорошие функциональные возможности обновления. Даже без использования инфраструктуры обновлений Adobe AIR содержит класс Updater, который можно применять для перехода на новые версии. Класс Updater позволяет приложению выполнить обновление до версии, содержащейся в файле AIR на компьютере пользователя. Но управление обновлениями может включать задачи, более сложные, чем обновление из локально сохраненного файла AIR. Файлы инфраструктуры обновления AIRИнфраструктура обновления AIR содержится в каталоге frameworks/libs/air пакета AIR 2 SDK. Она включает следующие файлы:
Дополнительные сведения см. в следующих разделах: Настройка среды разработки FlexВ файлах SWC в каталоге frameworks/libs/air пакета AIR 2 SDK определены классы, которые можно использовать при разработке в средах Flex и Flash. Чтобы использовать инфраструктуру обновления при компиляции с помощью пакета Flex SDK, необходимо включить файл ApplicationUpdater.swc или ApplicationUpdater_UI.swc в вызов компилятора amxmlc. В следующем примере компилятор загружает файл ApplicationUpdater.swc в подкаталог lib пакета Flex SDK. amxmlc -library-path+=lib/ApplicationUpdater.swc -- myApp.mxml В следующем примере компилятор загружает файл ApplicationUpdater_UI.swc в подкаталог lib пакета Flex SDK. amxmlc -library-path+=lib/ApplicationUpdater_UI.swc -- myApp.mxml При разработке с помощью Flash Builder добавьте SWC-файл на вкладке «Путь к библиотеке» в настройках путей к библиотекам Flex Builder в диалоговом окне «Свойства». Обязательно скопируйте SWC-файлы в каталог, который будет указан при вызове компилятора amxmlc (во Flex SDK) или Flash Builder. Включение файлов инфраструктуры в HTML-приложение AIRВ каталоге frameworks/html инфраструктуры обновления размещаются cледующие SWF-файлы:
Код JavaScript в приложениях AIR может использовать классы, определенные в SWF-файлах. Чтобы использовать инфраструктуру обновления, добавьте файл applicationupdater.swf или applicationupdater_ui.swf в каталог приложения (или его подкаталог). Затем включите в HTML-файл, который будет использовать инфраструктуру (в коде JavaScript), тег script, загружающий этот файл. <script src="applicationUpdater.swf" type="application/x-shockwave-flash"/> Также можно использовать тег script для загрузки файла applicationupdater_ui.swf. <script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/> Прикладной интерфейс программирования, определенный в этих двух файлах, описывается в оставшейся части данного документа. Простой пример: использование версии ApplicationUpdaterUI (с интерфейсом пользователя)Входящая в инфраструктуру обновления версия файла ApplicationUpdater с интерфейсом пользователя предлагает простой интерфейс, который можно использовать в приложении. Далее приведен простейший пример его использования. Вначале создайте приложение AIR, которое вызывает инфраструктуру обновления.
Затем добавьте обновленную версию приложения AIR на веб-сервер.
Это простейший пример, но в нем показано, как работает функция обновления, очень важная для многих приложений. В оставшейся части этого документа описывается, как оптимально использовать инфраструктуру обновления. Другой пример использования инфраструктуры обновления см. в следующих демонстрационных приложениях в центре разработки Adobe AIR:
Обновление до AIR 2.5Поскольку начиная с версии AIR 2.5 были изменены правила назначения номеров версии, инфраструктура обновления AIR 2 не может обрабатывать информацию о версии, указанную в дескрипторе приложений AIR 2.5. По причине такой несовместимости необходимо обновить приложение для использования новой инфраструктуры обновления, ПРЕЖДЕ чем настраивать в нем использование AIR 2.5 SDK. Таким образом, процедура обновления приложения версии более ранней, чем AIR 2.5, до версии AIR 2.5 и более поздней состоит из ДВУХ шагов. Первое обновление должно использовать пространство имен AIR 2 и включать библиотеку инфраструктуры обновления AIR 2.5 (при этом пакет приложения можно создать с помощью AIR 2.5 SDK). Второе обновление может использовать пространство имен AIR 2.5 и включать новые функции приложения. Кроме того, можно применить промежуточное обновление, которое используется только для обновления приложения AIR 2.5 с помощью класса AIR Updater. В следующем примере представлен процесс обновления приложения с версии 1.0 до версии 2.0. В версии 1.0 используется старое пространство имен 2.0. В версии 2.0 используется пространство имен 2.5 и новые функции, реализованные с помощью API-интерфейсов AIR 2.5.
<?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> Определение файла дескриптора обновления и добавление файла AIR на веб-серверПри использовании инфраструктуры обновления AIR основные сведения о доступном обновлении определяются в файлах дескрипторов обновления, хранящихся на веб-сервере. Файл дескриптора обновления является простым XML-файлом. Инфраструктура обновления, входящая в приложение, проверяет этот файл, чтобы определить, не выложена ли новая версия. Формат файла дескриптора обновления был изменен в версии AIR 2.5. В новом формате используется другое пространство имен. Исходное пространство имен: «http://ns.adobe.com/air/framework/update/description/1.0». Пространство имен AIR 2.5: «http://ns.adobe.com/air/framework/update/description/2.5». Приложения AIR, созданные в версии среды до AIR 2.5, могут считывать только дескриптор обновления версии 1.0. Приложения AIR, созданные с использованием инфраструктуры обновления, включенной в AIR 2.5 и более поздние версии, могут считывать только дескриптор обновления версии 2.5. По причине несовместимости версий часто требуется создавать два файла дескриптора обновления. В соответствии с логикой обновления в версиях AIR 2.5 необходимо загрузить дескриптор обновления, который использует новый формат. В более ранних версиях приложения AIR следует по-прежнему использовать исходный формат. Для каждого выпускаемого обновления требуется изменять оба файла (до тех пор, пока поддерживаются версии, созданные с помощью AIR версии до 2.5). Файл дескриптора обновления содержит следующие данные:
Элементы version и url обязательны. Элемент description не обязателен. Здесь приведен пример файла дескриптора обновления версии 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> Здесь приведен пример файла дескриптора обновления версии 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> Если требуется определить тег description для нескольких языков, используйте несколько элементов text, определяющих атрибут lang. <?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> Поместите файл дескриптора обновления вместе с обновленным файлом AIR на веб-сервер. В создаваемом с дескриптором обновления каталоге templates также располагаются демонстрационные файлы дескриптора обновления. Среди них есть дескрипторы для одного языка и для нескольких языков. Создание экземпляра объекта UpdaterПосле загрузки инфраструктуры обновления AIR в программном коде (см. разделы «Настройка среды разработки Flex» и «Включение файлов инфраструктуры в HTML-приложение AIR») необходимо создать экземпляр объекта, как показано в следующем примере. Пример ActionScript: var appUpdater:ApplicationUpdater = new ApplicationUpdater(); Пример JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdater(); В предыдущем примере используется класс ApplicationUpdater (который не предоставляет интерфейса пользователя). Если требуется использовать класс ApplicationUpdaterUI (предоставляющий интерфейс пользователя), код должен быть следующим. Пример ActionScript: var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); Пример JavaScript: var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); В оставшихся примерах кода в этом документе предполагается, что уже создан экземпляр объекта Updater с именем appUpdater. Настройка параметров обновленияКак класс ApplicationUpdater, так и класс ApplicationUpdaterUI можно настроить с помощью файла конфигурации, поставляемого с приложением, используя ActionScript или JavaScript. Определение параметров обновления в файле конфигурации XMLКонфигурационный файл обновления — это XML-файл. В нем содержатся следующие элементы:
Файл конфигурации для класса ApplicationUpdaterUI может содержать следующий элемент в дополнение к элементам updateURL и delay.
Здесь приведен пример файла конфигурации для инфраструктуры ApplicationUpdater. <?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> Здесь приведен пример файла конфигурации для инфраструктуры ApplicationUpdaterUI, которая содержит определение элемента defaultUI. <?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> Укажите местоположение этого файла в свойстве configurationFile: Пример ActionScript: appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");Пример JavaScript: appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml"); Каталог templates инфраструктуры обновления содержит демонстрационный файл конфигурации config-template.xml. Код ActionScript или JavaScript для определения параметров обновленияЭти параметры конфигурации также могут быть установлены с помощью программного кода приложения, как в следующем примере: appUpdater.updateURL = " http://example.com/updates/update.xml"; appUpdater.delay = 1; Свойствами объекта updater являются updateURL и delay. Эти свойства определяют те же параметры, что и элементы updateURL и delay в файле конфигурации: адрес URL файла дескриптора обновления и интервал времени между проверками обновлений. Если в программном коде указывается файл конфигурации и параметры, то любое свойство, установленное в коде, переопределяет соответствующие параметры файла конфигурации. Необходимо определить свойство updateURL либо с помощью файла конфигурации, либо с помощью сценария (см. раздел «Определение файла дескриптора обновления и добавление файла AIR на веб-сервер») прежде, чем использовать объект updater (до вызова метода initialize() объекта updater, как описано в разделе «Инициализация инфраструктуры обновления»). Инфраструктура ApplicationUpdaterUI определяет эти дополнительные свойства объекта updater следующим образом:
Каждое свойство соответствует одному или нескольким диалоговым окнам в интерфейсе пользователя ApplicationUpdaterUI. Каждое свойство является логическим значением, для которого по умолчанию задано значение true. Если установлено значение false, соответствующие диалоговые окна не отображаются в ходе процедуры обновления. Эти свойства диалоговых окон переопределяют параметры, установленные в файле конфигурации обновления. Процесс обновленияИнфраструктура обновления AIR выполняет процесс обновления, используя следующие шаги:
Объект updater отправляет соответствующие события при завершении каждого из описанных шагов. В версии ApplicationUpdater (без интерфейса пользователя) можно отменить события, сообщающие об успешном выполнении шагов этого процесса. Если какое-то из этих событий отменяется, то отменяется и следующий шаг в процессе. В версии ApplicationUpdaterUI (с интерфейсом пользователя) объект updater открывает диалоговые окна, позволяющие пользователю отменить или выполнить каждый шаг в процессе обновления. Если отменяется событие, можно вызвать соответствующие методы объекта updater для возобновления процесса. По мере того как версия ApplicationUpdater объекта updater выполняет различные этапы процесса обновления, она фиксирует его текущее состояние в свойстве currentState. Для этого свойства устанавливается переменная типа string со следующими возможными значениями:
Некоторые методы объекта updater выполняются только в определенном состоянии этого объекта. Инициализация инфраструктуры обновленияПосле установки параметров конфигурации (см. раздел «Простой пример: использование версии ApplicationUpdaterUI (с интерфейсом пользователя)»), вызовите метод initialize() для инициализации обновления. appUpdater.initialize(); Этот метод выполняет следующие действия:
Вызов этого метода может привести к отправке следующих событий объектом updater:
После отправки события UpdateEvent.INITIALIZED процесс обновления завершается. При вызове метода initialize() объект updater запускает процесс обновления и выполняет все шаги, учитывая параметр задержки таймера. Однако также можно запустить процесс обновления в любой момент времени, вызвав метод checkNow() объекта updater: appUpdater.checkNow(); Этот метод не делает ничего, если процесс обновления уже запущен. Иначе происходит запуск процесса обновления. Объект updater может отправлять следующие события в результате вызова метода checkNow():
Если отменяется событие checkForUpdate, можно вызвать метод checkForUpdate() объекта updater. (См. следующий раздел.) Если событие не отменяется, процесс обновления выполняет проверку файла дескриптора обновления. Управление процессом обновления в версии ApplicationUpdaterUI (с интерфейсом пользователя)В версии ApplicationUpdaterUI (с интерфейсом пользователя) пользователь может отменить процесс с помощью кнопки «Отмена» в диалоговом окне интерфейса пользователя. Также процесс обновления можно отменить программно, вызвав метод cancelUpdate() объекта ApplicationUpdaterUI. Можно задать свойства объекта ApplicationUpdaterUI или определить элементы в файле конфигурации обновления, указав какие подтверждения в диалоговых окнах будут отображаться объектом updater. Дополнительные сведения см. в разделе «Настройка параметров обновления». Управление процессом обновления в версии ApplicationUpdater (без интерфейса пользователя)Можно вызвать метод preventDefault() объектов событий, созданных объектом ApplicationUpdater, чтобы отменить шаги процесса обновления (см. раздел «Процесс обновления»). Отмена заданного по умолчанию поведения позволяет приложению отобразить сообщение пользователю, запросив у него подтверждение выполнения. В следующих разделах описано, как продолжить процесс выполнения, если какой-либо шаг этого процесса был отменен. Загрузка и интерпретирование файла дескриптора обновленияОбъект ApplicationUpdater отправляет событие checkForUpdate перед началом процесса обновления, до того момента, как объект updater попытается загрузить файл дескриптора обновления. Если отменяется заданное по умолчанию поведение события checkForUpdate, то объект updater не загружает файл дескриптора обновления. Можно вызвать метод checkForUpdate(), чтобы возобновить процесс обновления: appUpdater.checkForUpdate(); Вызов метода checkForUpdate() заставляет объект updater загружать и интерпретировать файл дескриптора обновления в асинхронном режиме. В результате вызова метода checkForUpdate() объект updater может отправлять следующие события:
Загрузка AIR-файла обновленияОбъект ApplicationUpdater отправляет событие updateStatus после того, как объект updater успешно загрузит и интерпретирует файл дескриптора обновления. По умолчанию, если доступен файл обновления, должна запускаться его загрузка. Если поведение по умолчанию отменено, можно вызвать метод downloadUpdate(), чтобы возобновить процесс обновления. appUpdater.downloadUpdate(); Вызов этого метода заставляет объект updater асинхронно загружать обновленную версию AIR-файла. Метод downloadUpdate() может отправлять следующие события:
Обновление приложенияОбъект ApplicationUpdater отправляет событие downloadComplete после завершения загрузки файла обновления. Если поведение по умолчанию отменено, можно вызвать метод installUpdate(), чтобы возобновить процесс обновления: appUpdater.installUpdate(file); Вызов этого метода заставляет объект updater устанавливать обновленную версию AIR-файла. Этот метод включает один параметр, file, который является объектом File и содержит ссылку на AIR-файл, используемый для обновления. Объект ApplicationUpdater может отправлять событие beforeInstall в результате вызова метода installUpdate().
Установка из произвольно выбранного AIR-файлаМожно вызвать метод installFromAIRFile() для установки обновленной версии из AIR-файла на компьютере пользователя. appUpdater.installFromAIRFile(); Этот метод заставляет объект updater устанавливать обновленную версию приложения из указанного AIR-файла. Метод installFromAIRFile() может отправлять следующие события:
Отмена процесса обновленияМожно вызвать метод cancelUpdate(), чтобы отменить процесс обновления. appUpdater.cancelUpdate(); Этот метод отменяет любые незавершенные загрузки, удаляет любые незавершенные файлы загрузки и перезапускает таймер периодических проверок. Этот метод не выполняет никаких действий, если инициализирован объект updater. Локализация интерфейса ApplicationUpdaterUIКласс ApplicationUpdaterUI обеспечивает интерфейс для выполнения процесса обновления, предоставляемый пользователю по умолчанию. Этот интерфейс пользователя содержит диалоговые окна, позволяющие запускать и отменять процесс, а также выполнять связанные действия. Элемент description файла дескриптора обновления позволяет определить описание приложения на нескольких языках. Можно использовать несколько элементов text, определяющих атрибуты lang, как показано в следующем примере: <?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> Инфраструктура обновления использует описание, которое лучше соответствует цепочке языковых настроек пользователя. Дополнительные сведения см. в разделе «Определение файла дескриптора обновления и добавление файла AIR на веб-сервер». Разработчики Flex могут добавить поддержку нового языка непосредственно к пакету "ApplicationUpdaterDialogs". Разработчики JavaScript могут вызвать метод addResources() объекта updater. Этот метод динамически добавляет новый пакет ресурсов для языка. Этот пакет ресурсов определяет локализованные строки для языка. Эти строки используются в различных текстовых полях диалоговых окон. Разработчики JavaScript могут использовать свойство localeChain класса ApplicationUpdaterUI для определения цепочки локалей, используемой интерфейсом пользователя. Обычно разработчики JavaScript (HTML) используют это свойство. Разработчики Flex могут применять ResourceManager для управления цепочкой локалей. Например, в следующем коде JavaScript определяются пакеты ресурсов для румынского и венгерского языков: 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; Дополнительные сведения см. в описании метода addResources() класса ApplicationUpdaterUI в справочнике ActionScript® 3.0 для Adobe® Flash® Professional CS5. |
|