2010年12月24日 星期五

網頁與AIR程式互動

如果需要在Browser上可以與AIR應用程式做互動,如安裝AIR App,或由網頁上的Click觸發啟動AIR App,以下是相關執行程序

一.準備工作
1.AIR程式端設定AIR程式允許透過Browser觸發
設定AIR發布用的application.xml的
 <application xmlns="http://ns.adobe.com/air/application/2.0">  
建議設定發布為AIR 1.53以上版本,因為如果AIR為1.53之前的版本,Browser要呼叫AIR,一定要知道AIR的PID值(在AIR內可以用NativeApplication.nativeApplication.publisherID取得)。若AIR為1.53後的版本,若Browser不知道AIR的PID,可以用""代即可。

加入
 <allowBrowserInvocation>true</allowBrowserInvocation>  
讓AIR允許被Browser啟動

2.Browser端Flash取得AIR Browser API
Browser端Flash要操作AIR所要用的API都放在http://airdownload.adobe.com/air/browserapi/air.swf內
透過loader載入這個檔案即可使用相關功能

public var airSWF:Object;
public var airSWFLoader:Loader = new Loader();
public var loaderContext:LoaderContext = new LoaderContext();
loaderContext.applicationDomain = ApplicationDomain.currentDomain; 
airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit); 
airSWFLoader.load(new URLRequest(" http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext);
private function onInit(e:Event):void { 
    airSWF = e.target.content;
    airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
}        

二.Browser檢查Client是否已經安裝AIR執行環境
var result:String=airSWF.getStatus();
取得回傳值
"available":可安裝但尚未安裝。
"unavailable":無法安裝
"installed":已安裝

三.Browser檢查Client端是否已經安裝AIR 應用程式
利用檢查AIR應用程式版本來確認程式是否已經安裝,執行後,若檢查完成
會呼叫執行所設定的versionDetectCallback函式,並在這callBack函式內
取得版本值,當版本值為null代表未安裝程式
airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
private function versionDetectCallback(version:String):void { }    

設定參數:
appID:應用程式ID,即AIR應用程式的application.xml內的id值,或在air內透過
    NativeApplication.nativeApplication.applicationID取得
pubID:發佈者ID,在air內透過
    NativeApplication.nativeApplication.publisherID取得

注意:要讓這功能有效可以使用,在使用air.swf一定要是載入http://airdownload.adobe.com/air/browserapi/air.swf
若將這air.swf複製到local端呼叫使用,則取得版本永遠會是null值

四.Browser安裝AIR App
airSWF.installApplication(installPath, runtimeVersion, arguments); 
設定參數:
installPath:String,要安裝的air檔案路徑
runtimeVersion:String,允許執行的AIR Runtime最低版本,例如"1.5"
arguments:Array,非必填項目,要傳遞給AIR的參數,這參數會被AIR內的
BrowserInvokeEvent.BROWSER_INVOKE事件所接收

五.Browser 啟動已安裝AIR APP
airSWF.launchApplication(appID, pubID, myArguments);

六.Browser傳遞參數給AIR App
airSWF.launchApplication(appID, pubID, myArguments);
只要將傳遞的參數放到myArguments陣列內即可

6 則留言:

hann 提到...

請問這個方法是可以把AIR2鑲嵌再網頁上嗎?
還是是下載後另外開啟呢?

ozzysun 提到...

AIR無法嵌在網頁上,這裡說的是,如果你已經有安裝好的AIR AP程式,你可以透過網頁去啟動執行他,若要啟動的AIR AP尚未安裝,會自動偵測安裝

hann 提到...

請問如果我要由HTML不經過FLASH去執行AIR可以嗎?

ozzysun 提到...

網頁與AIR互動的部份,Adobe把與Browser互動的API包裝成一個swf發布在網路上,就我的瞭解,都需透過Flash來與AIR互動,如果你希望在網頁上可以直接互動,可能需要透過JS呼叫swf上的API來達到你要的需求

hann 提到...

感謝您的回答,
目前已經做到可以由呼叫AIR的SWF傳輸資訊到AIR中,也算是完成的差不多了。
但是發現一個問題,
當我在沒有安裝過AIR的電腦中他會主動要求安裝AIR,
但是安裝後執行出現1009的錯訊,
並且在電腦中並無AIR已安裝的資訊,
例如:新增/移除程式中並無AIR可以移除,
請問要怎麼做才能讓第一次使用AIR的電腦也可以正常安裝AIR並執行呢?

ozzysun 提到...

browser API本身除了提供AIR APP是否安裝的檢查,也提供了檢查是否有AIR Runtime與Runtime版本的功能,你可以找看看~~