feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AIR アプリ自動アップデート機能の実装

AIR アプリ自動アップデート機能の実装

AIR アプリを作って、配布するとします。そのアプリのアップデータを配布したいときは、自動アップデート機能(正確には通知機能)をアプリに実装しておけばいいのですが、それを簡単に実装できる air.update.ApplicationUpdaterUI が便利です。

インターネット上にそのサンプルが幾つかあったり、Adobe にも比較的丁寧な解説があったのですが、ほとんどの記事がちょっと古いコードになっていた(自分のアプリのコードも古かった・・・)ので、最近気味なそのあたりのメモ。

AIR バージョンは 3.1 で確認しています。

まずアプリの ActionScript コード。

ApplicationUpdaterUI 実装例

package
{
     import air.update.ApplicationUpdaterUI;
     import air.update.events.UpdateEvent;
    
     import flash.display.Sprite;
     import flash.events.ErrorEvent;
     import flash.filesystem.File;
    
     [SWF(frameRate="60", width="940", height="640")]
     public class Main extends Sprite
     {
          private var _updater:ApplicationUpdaterUI
         
          public function Main()
          {
               _updater = new ApplicationUpdaterUI();
               _updater.configurationFile = new File("app:/configuration.xml");
               _updater.addEventListener(ErrorEvent.ERROR, _errorHandler);
               _updater.addEventListener(UpdateEvent.INITIALIZED, _initializedHandler);
               _updater.initialize();
          }
         
          private function _initializedHandler(event:UpdateEvent):void
          {
               _updater.checkNow();
          }
         
          private function _errorHandler(event:ErrorEvent):void
          {
              
          }
     }
}

ApplicationUpdaterUI という便利クラスが AIR 1.5 ぐらいから備わっています。
checkNow() で強制バージョンチェックします。
アプリに設定されている configuration データ (configuration.xml) をチェックするようにします。

app:/configuration.xml

configuration.xml というファイルを作って、アプリをビルドするときに組み込んでおきます。内容は次のようにします。
Flash Builder だったら ./src 直下に置いておけばアプリに問題なく組み込まれます。

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

ちなみに名前ですが、別に「configuration.xml」でなくても大丈夫です。自分は XML を書く場合混乱無いようにルートのタグとあわせるのをクセにしています。
<url> に「最新バージョンファイルのコンフィグレーション XML の URL」を記述します。

その URL に以下の内容のファイルを設置します。

update.xml

<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/2.5">
<versionNumber>1.0.0</versionNumber>
<url>http://feb19.jp/xxxxxxxxx/someapplication.air</url>
<description><![CDATA[New version includes:
* バグ修正。]]></description>
</update>

<url> には「最新バージョンのアプリの URL」を記述します。

引っかかりポイントとして、AIR 3.1 ターゲット(正確にはもう少し低いバージョンでもそう)で作っていたりすると、update.xml のネームスペースバージョンを2.5 以上にしていないといけなく、Adobe のサンプルでは /description/1.0 とかのままになっていたりするので、要注意です。

また、 <versionNumber> タグが、 <version> になっていたりするとアップデータが動きません。

<versionNumber> に入っているバージョン番号は、アプリのバージョン番号 (app.xml の <versionNumber>) より高くなければなりません。

update.xml も別に update.xml という名前である必要はありません。

正しく設置できれば、アプリを起動したとき、以下のようなアップデートを促すダイアログが出るようになります。

ApplicationUpdaterUI

----

イメージ画像はロイスダール 「 ドゥールステーデに近いウェイクの風車 」の一部です。


Tweet Share Bookmark

Navigation

prev: NSArray や NSUserDefaults など iOS Foundation Framework のクラスをざっくり解説
next: Flash Professional 追加機能セット "Linkage Name Utilities" を発売しました。

Recently Entries