AIR/FlashでEdyリーダーアプリケーション
~「SDK for FeliCa & Adobe AIR/Adobe Flash Standard版」リリース~
今月号の記事
ソニー株式会社 FeliCaデバイス事業部 相馬 功/竹村 航
2009年9月より無償配布をしているSDK for FeliCa & Adobe AIR/Adobe Flash Basicに加えて、2010年1月22日よりSDK for FeliCa & Adobe AIR/Adobe Flash Standard(以下、SDK Standard)のご提供を開始いたしました。
SDK Standardでは、交通乗車用カードや電子マネーとして世の中に広く出回っているFeliCaカードへのアクセス(暗号化通信以外)のほか、おサイフケータイへのWebサイト起動やメーラー起動などの機能があります。さらに、ビットワレット株式会社にご協力いただき、Edyの残高や利用履歴を確認できる機能を用意しているので、手近にあるEdyを使ってEdy用のFlash/AIRアプリケーションを開発することも可能です。
SDK Standardによって、FeliCaによる電子マネーカードのデータを読み書きするアプリケーションを開発したり、様々なFeliCa対応アプリケーションを販売したり、有償サービスとして提供することが可能になりますので、ぜひご活用ください。
今回の記事では、SDK Standardで可能になったEdyの利用履歴を読み込む機能について、SDK Standardに貼付されているEdy用サンプルアプリケーションのカスタマイズ方法をご紹介したいと思います。
※SDK for FeliCa & Adobe AIR/Adobe Flash Basicとの違いについては、the Edge newsletter 8月号記事をご参照ください。
Edyへのアクセスに必要なソフトウェア
SDK for FeliCa & Adobe AIR/Adobe Flash Standardが必要です。
これに加えて実行にはソニーから公開されている最新版のFeliCaポートソフトウェアが必要です。
■ SDK for FeliCa & Adobe AIR/Adobe Flash
http://www.sony.co.jp/Products/felica/business/
Standard版(ICS-DAF/S010J)とBasic版(ICS-DAF/B010J)があります。
※ Standard版については、こちらのページからのダウンロード販売となっております。ダウンロード販売以外のご提供方法については後日お知らせする予定です。
■ FeliCaポートソフトウェア
http://www.sony.co.jp/Products/felica/pcrw/fsc_dl.html
FeliCaポートソフトウェアの中に、SDK for FeliCa & Adobe AIR/Adobe Flash用のランタイムモジュール「FeliCa Proxy Service」が含まれています。
Edyとは
Edyはビットワレット株式会社が運営するプリペイド型電子マネーで、カード用のデバイスフォーマットとしてFeliCaが使用されています。提携しているクレジットカードやメンバーズカードなどに付属している場合もあります。また、専用のアプリケーションをダウンロードすることでおサイフケータイでも使用することができます。
詳しくは、Edyのホームページをご覧ください。
http://www.edy.jp/
LocalConnectionクラス
Edyの読み取り機能はSDK Standardに含まれるEdyCCL.swfというファイルに実装されています。これはクラスライブラリファイル(.swc)ではないのでアプリケーションにリンクすることはできません。アプリケーションとEdyCCL.swfはLocalConnectionクラスを利用してSWFファイル間の通信を行います。
LocalConnectionは複数の異なるSWF間の通信に使用することができます。LocalConnectionの基本例をおさらいします。
app1.swf (受信側)
var conn:LocalConnection = new LocalConnection();
conn.connect(“connectionName”);
function methodName():void
{
trace(“methodName() is called.”);
}
app2.swf (送信側)
var conn:LocalConnection = new LocalConnection(); conn.send(“connectionName”, “methodName”);
app2.swfが実行されると、app1.swf側でmethodName()が呼ばれます。SWFファイル間でLocalConnectionを使ってやりとりをする場合に必要なのは、「コネクション名」と「メソッド名」の2つだけです。app1.swfは最初にLocalConnection.connect()メソッドを呼びます。これにより、send()メソッド呼び出しによるコマンドが受信可能になります。一方送信側は、LocalConnection.send()メソッド呼び出しによりコマンドを送信します。第1引数はコネクション名の文字列で、これにより接続先を指定しています。第2引数はメソッド名の文字列を指定します。この例ではmethodNameというメソッドを指定しているため、app1.swf内の同名メソッドが呼び出されます。ドメインを超えるLocalConnectionにはセキュリティサンドボックスのポリシーが適用されるので注意してください。また、エラーイベントに対するイベントリスナーも登録した方が良いです。詳しくは「ActionScript 3.0 コンポーネントリファレンスガイド」などのドキュメントを参照してください。
作成手順
主な手順は、
- EdyCCL.swfをロードする
- EdyCCL.swfとのLocalConnectionを設定する
- LocalConnectionを通じて、Edy読み取りを要求する
- LocalConnectionを通じて、Edy読み取り結果を受信する
です。
以下はEdyCCL.swfをロードする処理の例です。
var request:URLRequest =
new URLRequest("./EdyCCL.swf?localconnection=true&pollingtimeout=10&licensekey=xxxxxx");
var swfLoader:Loader = new Loader();
swfLoader.load(request);
ここではEdyCCL.swfに引数がいくつか設定されています。LocalConnectionはEdyCCL.swfにLocalConnectionを設定するように要求します。必ずtrueを指定します。pollingTimeoutは読み取りを実行する時間を秒数で指定します。10を指定した場合、EdyCCL.swfは10秒間読み取りを実行し、その間にEdyが検知できなければエラーを返します。licensekeyにはSDK Standard版のライセンスキーを指定します。
LocalConnectionは2つ接続する必要があります。1つはアプリケーションからEdyの読み取り要求を送信するため、もう1つは読み取り結果を受信するためです。以下の図は、それぞれのLocalConnectionに必要なコネクション名とメソッド名を示したものです。

LocalConnectionの設定からEdy読み取り結果受信までの処理のコード例を見てみましょう。
// 二つのLocalConnectionを初期化。
var sendConnection:LocalConnection = new LocalConnection();
var recvConnection:LocalConnection = new LocalConnection();
// 受信用LocalConnectionを受信可能な状態にする。
this.recvConnection.connect("_edyOfflineBalanceResponse");
// 送信用LocalConnectionでEdy読み込みをEdyCCL.swfに要求する。
var params:Object = new Object();
params.action = "start";
this.sendConnection.send("_edyOfflineBalanceRequest", "onEdyOfflineBalanceReceive", params);
// EdyCCL.swfの処理が完了したら、呼び出されるメソッド
function onEdyOfflineBalanceReceive(param:Object): void
{
var edyNumber:String = param.edyNo as String; // Edy番号
var history:Array = param.history as Array; // Edy利用履歴
for (var i:uint = 0; i < history.length; i++)
{
var dealTime:String = date:param.history[i].dealTime as String; // 日時
var action:uint = param.history[i].action as uint; // 支払い、チャージなどの情報
var value:uint = param.history[i].value as uint; // 利用金額(単位:円)
var amount:uint = param.history[i].amount as uint; // 残高(単位:円)
}
}
できること、できないこと
Edyのカードから以下の情報を読み込むことができます。
- Edy番号
- 履歴情報
- 取引日時
- 取引通番
- チャージ、支払いなどの情報
- 利用金額
- 残高
残念ながら、利用した店や購入した商品などの情報はカードには記録されていないため、読み込むことはできません。アプリケーションを作成するときには注意してください。
サンプルアプリケーション
サンプルコードを以下のURLから利用できるようにしました。
http://blog.felicalauncher.com/sdk_for_air/?p=747
サンプルアプリケーションは、読み取った履歴を単純にDataGridクラスで表示させるだけのものです。

背景画像を変更するだけでも自分だけのEdy Viewerになりますし、読み取った履歴を使っておもしろい使い方が見つかるかもしれません。
もし自社ブランドのEdyカードを発行しているなら、自社オリジナルデザインのEdy履歴確認アプリにRSSニュースティッカーを入れたり、あるいは残高や履歴に応じた特典やゲーム機能を付加したり、などという使い方ができそうです。
FeliCa & Adobe AIR/Adobe Flashアプリケーションコンテスト
2010年2月15日まで、「FeliCa & Adobe AIR/Adobe Flashアプリケーションコンテスト」を開催中ですので、ぜひ手近にあるEdyカードでいろいろなアイデアのEdyアプリケーションにチャレンジいただければと思います。
今回ご紹介したSDK Standardは、このコンテストに参加される場合には貸し出しをさせていただきますので、この機会にぜひご利用ください(詳細はコンテストの応募要領をご覧ください)。
wonderflからもEdyが使える!
面白法人カヤック様のご協力により、「wonderfl build flash online」からもSDK Standardのご利用およびコンテストへのご応募ができます。
既にwonderfl上には、単純にカードを補足する、おサイフケータイにURLをPushする、歩数計の情報を読み取る、といったソースコードが公開されていますが、今回Edy対応のコードも追加いたしました。

みなさま、どしどしFORKいただき、いろいろな発想でのEdy対応Flashを作って、ぜひコンテストに応募してみてください。(もちろん、Edy以外のFeliCaアプリも大歓迎です。)
※ Adobe、Adobe AIR、ならびにAdobe Flashは、Adobe Systems Incorporated.(アドビ システムズ社)の米国ならびにその他の国における商標または登録商標です。
※ FeliCaは、ソニー株式会社の登録商標です。
※ FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。
※ Edyは、ビットワレット株式会社が管理するプリペイド型電子マネーサービスのブランドです。
※ おサイフケータイはNTTドコモの登録商標です。
※ その他本文中の会社名や商品名は、該当する各社の商標または登録商標です。



