littlepad blog

AIR同士のアプリケーション間通信

AIRアプリ間の通信にはflash.net.LocalConnectionクラスを使用する。
送信側アプリで入力したテキストを受信側に送信するサンプルコード。

■送信側コードサンプル抜粋

private var _sendCon:LocalConnection;

private function setConnection():void {
    _sendCon = new LocalConnection();

    _sendCon.addEventListener(StatusEvent.STATUS,
        function(event:StatusEvent):void {
            switch (event.level) {
                // 正常に送信完了
                case "status":
                    debugTextField.text = "正常に送信完了";
                    break;
                // エラー
                case "error":
                    debugTextField.text = "送信エラーが発生しました。";
                    break;
            }
        });
}

public function conSend():void {
    _sendCon.send("app#jp.xxxx.dataReceive.B146A943FBD637B68C334022D304CEA226D129B4.1:myConnection", "onReceive", inputTextField.text);
}

sendメソッドに渡す引数は以下の通り。

_sendCon.send(“接続名”, “受信側のメソッド名”, 引数…)

接続名の前には送信先アプリケーションIDと発行者IDと接続名を以下の書式で追加して指定する。

「app#送信先アプリケーションID.発行者ID:接続名」

上記のサンプルコードでは各々以下のような設定となっている。
送信先アプリケーションID: jp.xxxx.dataReceive
発行者ID: B146A943FBD637B68C334022D304CEA226D129B4.1
接続名: myConnection

※発行者IDはAIRアプリがインストールされるディレクトリ内にある「META-INF/AIR/publisherid」に記述されている。

■受信側コードサンプル抜粋

private var _rcvCon:LocalConnection;

private function setConnection():void {
    _rcvCon = new LocalConnection();
    //_rcvCon.allowDomain("*");
    _rcvCon.allowDomain("app#jp.xxxx.dataSend.B146A943FBD637B68C334022D304CEA226D129B4.");
    _rcvCon.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
    _rcvCon.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
    _rcvCon.client = this;
    _rcvCon.connect("myConnection");
}

public function onReceive(str:String):void {
    receiveTextField.text = str;
}

allowDomainメソッドの引数には接続を許可するアプリケーションIDを以下の書式で設定する。

「app#送信先アプリケーションID.発行者ID」

上記のサンプルコードでは各々以下のような設定となっている。
送信元アプリケーションID: jp.xxxx.dataSend
発行者ID: B146A943FBD637B68C334022D304CEA226D129B4.1

ワイルドカードの指定の場合、全ての接続を許可する。
allowDomain(“*”)

上記サンプルは、送信側と受信側に分かれた一方通行な送信だが、
双方向通信を行う場合は、両方に送受信の設定をすればよい。
この場合、接続名は両方同じになる。

参考)

追記)
FLASH間の双方向通信を簡易にするクラスFlashLCSというものが出たらしい。
まだ未使用だが、便利そうなので機会があれば使ってみたい。
http://blog.alt-scape.com/archives/296

モバイルバージョンを終了