Download - FeliCa Night @Adobe
© 2009 Sony Corporation
X
SDK for FeliCa & Adobe® AIR ® /Adobe ® Flash ®
によるアプリケーション開発
2010/01/12
ソニー株式会社FeliCaデバイス事業部
竹村 航
© 2009 Sony Corporation
Content
FeliCaについて
FeliCa SDK for Adobe AIR/Adobe Flashを使った開発
携帯電話のブラウザ送信
Type3 Tag の読み書き
ACOS 歩数計の読み込み
© 2009 Sony Corporation
FeliCaとは
ソニーが開発した非接触通信技術。
読み取る側 = リーダ/ライタ
パソリ (PC向け、外付けUSB)
FeliCaポート(PC内蔵)
鉄道の改札
おサイフケータイ
読まれる側 = カード
カード形状 (Suica、Edyなど)
おサイフケータイ
その他の形状(トークン、シール)
歩数計
© 2009 Sony Corporation
FeliCaの動作原理
リーダ/ライタリーダ/ライタ
カードの電力は無線によってリーダ/ライタ側から供給(カード自身は電源を持たない)
搬送周波数13.56MHz
非接触・近接型(10cm程度)
212,424Kbps
ICチップICチップアンテナアンテナ
メモリ容量:200Byte~9KB
© 2009 Sony Corporation
FeliCaの特長
カード管理者
事業者1エリア
管理者エリア
事業者2エリア
ポイントデータ
電子マネー 乗車履歴
カード内のイメージ【実現例】
1枚のカードに複数のサービスを格納できる仕組みを実現
それぞれのサービスは鍵によってセキュリティー的に分離
サービスごとに鍵あり、鍵なしの設定が可能
必要に応じてサービス間の連携も可能
© 2009 Sony Corporation
ファイルシステム
「システムコード」はカードを検出するのに用いる「ラベル」
PCの「フォルダ」や「ファイル」のように「エリア」と「サービス」を階層化できる
「サービス」にはデータブロックへのポインタやアクセス方法を定義
6
データブロック2
エリア0000
エリア10
サービス1
システムコード
エリア20
サービス2 サービス3 サービス4 サービス5
データブロック1
(鍵なし) (鍵なし)
カード内のイメージ
© 2009 Sony Corporation
3種類のサービス
7
CPUの機能により、さまざまなデータの登録・演算が可能
任意のブロックをRead/Write
ブロック単位でサイクリックにRead/Write
Read/ Write
Read Only
Read/ Write
Read Only
ユーザブロック1
ユーザブロック2
ユーザブロック3
New
ユーザブロック
通常のRead/Write
新しいデータを最も古いデータに上書き
Write
Read
ランダムアクセス
(文字列等)
サイクリックアクセス
(履歴等)
パースアクセス(数値等)
数値のRead/Write/減算/加算
Read/ Write
Read/減算/ 加算
Read/減算
Read Only
パース
ユーザブロック
© 2009 Sony Corporation
SDK について
© 2009 Sony Corporation
今までの SDK for FeliCa
OperatingSystem
FeliCaDLLs
カード検知・通信
ネイティブ/.NET アプリケーション
インストールされたDLLからリーダ/ライターを制御
ネイティブ/.NETアプリケーションのみ実行可能
開発言語は 主にC, C++, Visual Basic, C#、開発環境はVisual Studio
B2B用途
© 2009 Sony Corporation
Flash
SDK for FeliCa & Adobe® AIR ® /Adobe ® Flash ®
構成概要
OperatingSystem
FeliCaDLLs
アプリ起動
通信(Socket & XML)
カード検知・通信
FeliCaProxyFeliCa
Launcher
ブラウザ
AIRアプリケーション
Flashライブラリライセンス
認証サーバ
ライセンス認証
リーダ/ライターをFlash/AIRアプリケーションから制御することが可能
Flex/ActionScriptを利用した開発
よりポータブルなアプリケーション (ただし、今のところWindowsのみです。)
© 2009 Sony Corporation
SDK for FeliCa & Adobe® AIR ® /Adobe ® Flash ®
機能概要
【Standard】
【Basic(無償版)】
カード検知
FeliCaカードの暗号化無しでのRead/Write (おサイフケータイ・フリー領域、NFC Type3タグ)
リーダ/ライタから携帯電話へのURL送信、アプリ起動
FeliCaカードの暗号化無しでのRead/Write (FeliCaカード全般)
Edyビューア機能(残高照会、利用履歴)
リーダ/ライタのオープンからクローズまでのFeliCaアクセスの一連の動作をまとめることでFlashコンテンツ及びAIRを開発する皆様が容易にFeliCaアクセスを行えます
© 2009 Sony Corporation
どのように実現しているのか
Flash/AIRアプリケーションからUSB接続されたリーダ/ライタへは直接制御できない
FeliCa Proxy Service という常駐プロセスを経由することで実現
あらかじめクライアントPCにインストールされている必要がある
FeliCa Port Software (ドライバ、ツールなどの基本的なソフトウェア一式)に含まれている
Flash/AIRアプリケーション
FeliCa ProxyService
リーダ/ライター
カード
localhost内でのSocket通信
USB
無線
© 2009 Sony Corporation
Flash/AIRとFeliCa Proxy Serviceとの通信
Flash/AIRアプリケーションから送信したリクエストはFeliCa Proxy Serivceに処理される。
処理結果のレスポンスは非同期にイベント通知される。
Flash/AIR アプリケーション
FeliCa Proxy Service
① 非同期イベントを待ち受けるリスナをaddEventListener()で登録する。
② リクエストを送信する。
③ リーダー/ライターやカードへコマンドを送信。コマンドの処理結果を受ける。
④ レスポンスを送信
⑤ あらかじめ指定したリスナーが呼び出されることで、結果を取得できる。
© 2009 Sony Corporation
アプリケーション開発の流れ
SDK for FeliCa & Adobe® AIR® / Adobe® Flash®の基本的な手順の理解する為に簡単なFlashアプリケーションとして、ボタンをクリックすると「FeliCa機能搭載の携帯電話のブラウザを起動させる」というFlashアプリケーションを作成します。
1. 初期化2. FeliCaProxyServiceと認証を行なう3. 「FeliCa機能搭載の携帯電話のブラウザを起動させる」APIの実行する4. FeliCaProxyServiceとの認証を切断する
© 2009 Sony Corporation
初期化
SDKで提供されているクラスをインポートします。
import com.sony.felica.*;
import com.sony.jp.felica.event.*;
FeliCaControlオブジェクトを作成します。
private var fc:FeliCaControl = new FeliCaControl();
© 2009 Sony Corporation
FeliCaProxyServiceとの認証
FeliCaAccessクラスのopenメソッドでソケット接続の要求を行います。
private function init():void{
fc.open(10250);
} 10250はポート番号ですが、必ずこの値を指定してください。
© 2009 Sony Corporation
FeliCaProxyServiceとの認証
openメソッド呼び出しの前に、open成功時に呼び出されるリスナを登録します。
private function init():void{
fc.addEventListener(OpenStatusEvent.OPEN_COMPLETE, onOpenComplete);
fc.open(10250);
}
private function onOpenComplete(evt:OpenStatusEvent):void
{
mx.controls.Alert.show(“open成功”);
}
openが成功したときに通知される非同期イベント。失敗したときに通知されるイベント(OPEN_FAILURE)もある。
© 2009 Sony Corporation
携帯電話のブラウザ起動
MobileFeliCaRequestを初期化し、FeliCa Proxy Service に送信します。
private function sendURL():void{
var request:MobileFeliCaRequest = new MobileFeliCaRequest();
request.type = MobileFeliCaRequest.WEBTO;
request.url = “http://www.google.co.jp/m”;
fc.access(request);
}
携帯電話内部の機能の起動を要求するためのリクエスト
「ブラウザの起動」の他には、「iアプリの起動」、「共通領域の読み込
み」がある
リクエストをFeliCa Proxy Serviceに送信
© 2009 Sony Corporation
携帯電話のブラウザ起動
open()と同様、access()呼び出しの前にリスナを登録します。
private function sendURL():void{
fc.addEventListener(FeliCaStatusEvent.FELICA_ACCESS_COMPLETE,
onAccessComplete);
var request:MobileFeliCaRequest = new MobileFeliCaRequest();
request.type = MobileFeliCaRequest.WEBTO;
request.url = “http://www.google.co.jp/m”;
fc.access(request);
}
private function onAccessComplete(evt:FeliCaStatusEvent):void{
mx.control.Alert.show(“完了”);
}
この他にエラー用のイベントが2種類ある
© 2009 Sony Corporation
FeliCaProxyServiceの切断
最後に、FeliCa Control クラスのclose()メソッドを呼び出します。
private function onAccessComplete(evt:FeliCaStatusEvent):void{
mx.control.Alert.show(“完了”);
fc.close();
}
© 2009 Sony Corporation
開発上の注意
エラー処理についてエラー時に発生するイベントに対するリスナを登録し、エラー時の処理を適切に行ってください。エラー要因としては以下のようなものがあります。
FeliCa Proxy Service が起動していない
リーダー/ライタが接続されていない、正しく認識されていない
必要なソフトウェアがインストールされていない (FeliCa Port Software)
カードがかざされていない
通信エラー
連続してリクエストを送信しない複数のリクエストを送信する場合には、
リクエストはキューされません
非同期イベントの到着を待って、次のリクエストを送信してください
© 2009 Sony Corporation
NFC Type3 Tag を利用した例
© 2009 Sony Corporation
NFC, Type3 Tag
NFCNFC Forumが定める近距離通信の国際規格です。FeliCaはNFCに対応しています。
Type3 TagNFCが定めるタグの一つ。
タグとは?
カードの一種
少メモリ、安価
様々な形状
© 2009 Sony Corporation
private function writeTag():void{
fc.addEventListener(FeliCaStatusEvent.FELICA_ACCESS_COMPLETE,
onWriteComplete);
var request:NFCType3TagRequest = new NFCType3TagRequest();
request.type = NFCType3TagRequest.WRITE;
request.data = “0123456789” // 16進数で表記
fc.access(request);
}
private function onWriteComplete(evt:FeliCaStatusEvent):void{
mx.control.Alert.show(“書き込み完了”);
}
Type3 Tag への書き込み、読み込み
基本的には、MobileFeliCaRequest()の例と同様です
© 2009 Sony Corporation
private function readTag():void{
fc.addEventListener(FeliCaStatusEvent.FELICA_ACCESS_COMPLETE,
onWriteComplete);
var request:NFCType3TagRequest = new NFCType3TagRequest();
request.type = NFCType3TagRequest.READ;
fc.access(request);
}
private function onReadComplete(evt:FeliCaStatusEvent):void{
var response:NFCType3TagResponse = evt.object as NFCType3TagResponse;
mx.control.Alert.show(response.data);
}
Type3 Tag への書き込み、読み込み
基本的には、MobileFeliCaRequest()の例と同様です
© 2009 Sony Corporation
Type3 Tag に書き込めるデータフォーマット
Type3 Tag 自体は書き込むデータフォーマットを定義しない
単なる208バイトのスクラッチパッドとしても扱える
NFC では複数の Record Type Definition (RTD) が定義されている
Smart Poster – URL情報などを記録し、かざした対象機器上でウェブサイトへ誘導
Smart Poster 形式を使えばFeliCa Launcherと連携してウェブサイトへの誘導ができる
© 2009 Sony Corporation
NFC Forum からダウンロード可能な資料
© 2009 Sony Corporation
FeliCa Plug を利用した例
© 2009 Sony Corporation
FeliCa Plug とは
機器に組み込み、リーダー/ライターとデータ転送をすることが可能
リーダー/ライターからはFeliCaカードと同様にアクセスすることが可能
FeliCa Plug 内蔵歩数計
アコーズ開発
過去15日分のデータをFeliCaで送信
© 2009 Sony Corporation