スポンサーサイト

--.--.--.--.--:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NFCタグを使ってアプリを起動する(CustomURI編)

2012.11.14.Wed.23:50
前回、とりあえずDeviceArrivedとかでNFCタグをなんとなく認識していることは確認できたので、今回はCustomURIを使ってアプリを起動するNFCタグを作ってみたいと思います。

1.CustomURIで起動できるようにする
何はともあれ、CustomURIでアプリを起動できるようにしておきます。

Association launching sample(MSDN)
CustomURIについてはこのサンプルが参考になります。

まず、マニフェストにアプリを起動するためのスキームを宣言します。

今回は名前を nfcapp にしました。
CustomURI


次に、CustomURIで起動したときの処理をApp.xaml.csに追記します。
とりあえず、起動できればいいので必要最小限しか書きません。

protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
var rootFrame = new Frame();
rootFrame.Navigate(typeof(MainPage));
Window.Current.Content = rootFrame;
}

Window.Current.Activate();
}


これで、nfcappでアプリが起動するようになるはずです。
エクスプローラーのアドレス欄に「nfcapp:」と入力してEnterキーを押下するとちゃんとアプリが起動しました。

2.CustomURIをタグに書き込む

こんな関数を作って、先ほど動作確認した「nfcapp:」をタグに書き込みます。

private void writeCustomUri()
{
var dataWriter = new DataWriter
{
UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE
};
dataWriter.WriteString("nfcapp:");
device.PublishBinaryMessage("WindowsUri:WriteTag",dataWriter.DetachBuffer());
}


アプリ内にボタンを置いて、押下したときにこの関数を実行するようにしておきます。
ボタン押下後、NFCタグをリーダーライターにかざすと書き込み完了です。

一度アプリを終了し、先ほど書き込んだNFCタグをリーダーライターに再度かざすと、こんなトーストが表示されます。
toast

このトーストをクリックすると、アプリが起動しました!



アプリを起動するために、タグをかざした後、トーストをクリックしないといけないため、あまりスマートではないのが気に入らないのですが、ひとまずタグをかざしてアプリを起動するという目的は達成されました。
次回は、まだうまくいっていないLaunchAppタグで、アプリを直接起動する方法にチャレンジします。
スポンサーサイト

NFC使ってみた

2012.11.10.Sat.01:22
Windows8ではOS標準でNFCをサポートしていて、WinRTのAPIもあるので使ってみました。

ProximityAPIのサンプル (MSDN)
Proximity API (MSDN)

私の知る限り、日本国内で一般的に手に入れられるProximity API対応のNFCリーダーライターは、SonyのRC-S380だけです。NFC CertifiedなNFC機器は他にもありますが、外付け対応なのは、RC-S380とDragonと評価キットくらいしか見つかりませんでした。

あと、NFCタグも必要です。
Mifare UltraLight(Type2)
Felica light(Type3)

まず、マニフェストにNFCを使うことを宣言します。
ProximityAPI使用時のマニフェスト設定


次にリーダーライターを取得します。

ProximityDevice _device = ProximityDevice.GetDefault();


もし、対応リーダーが接続されていなければ、_deviceがnullになります。

次に、NFC機器がタッチされたとき、離れた時のハンドラーを登録します。

_device.DeviceArrived += ProximityDeviceArrived;
_device.DeviceDeparted += ProximityDeviceDeparted;


これで、NFCのタグや、NFC搭載のスマホなどをリーダーにタッチすると、イベントが発生します。


次にNFCのタグからデータを読み込んでみます。
…の前に、タグにデータを書き込まないといけません。

NDEF Writerを使用して、NFCタグ(Felica lightやMifare UltraLight等)にデータを書き込みます。

さて、NDEFメッセージを読み込んでみましょう。

_device.SubscribeForMessage("NDEF", messageReceivedHandler);


となるはずです。
というのも、この書き方をしているサンプルコードはいくつか見かけたのですが、RC-S380ではFileNotFoundExceptionが発生します。対応していないのか、コードが悪いのか…。今のところ原因はわかっていません。

あと、最初のうちしばらくはDeviceArrivedとか全く反応せず頭を抱えていたのですが、突然反応するようになったりで、謎です。細かい動きを見るにはもう少し時間がかかりそうです。
続きを読む "NFC使ってみた"

docomoからWP8端末が出ない理由を考えてみた

2012.11.08.Thu.20:30
先日、WindowsPhone8がリリースされたにもかかわらず、日本ではどのキャリアからも端末が発表されなかった。そのため、私の心は既にお葬式状態である。


一部の熱狂的なWindowsPhone愛好者は、技適マークのない端末を海外から輸入したり、意味もなくえたりするので問題ないと思う。でも、メイン端末のAndroidのカオスっぷりに嫌気がさし、iPhoneに乗り換えたら負けかなと思っている私にはショックが大きかった。


SoftBankはiPhone一筋なので、まぁいいとして…
AUはIS12Tを出していたので少し期待してたけど、iPhoneの台数稼がないといけないんだろうなー。

しかし、なんでdocomoが出さないのか。
ITmediaによればいろんな事情で遅れる」らしい。

じゃぁ、どんな事情があるのよ?ってことで、いろいろ調べているうちに一つ気が付いた。


NFCのセキュアエレメントのせい?

WindowsPhone8ではNFCに対応していて、ほかの端末とデータをやり取りしたり、決済に使えるようになっている。NFCで決済システムを使う場合には当然暗号化が必要で、その役割をセキュアエレメントが担っている。

Felicaが使えるAndroid端末等では、通常、端末内にこのセキュアエレメントが内蔵されている。一方、WP8端末では、このセキュアエレメントをSIMカード内に持つようになっているらしい。そのため、セキュアエレメントが内蔵されたSIMカード(以下セキュアSIM)がないと、決済システムが使えないのである。

で、docomoで現在使われているSIMカードはセキュアSIMではないないらしく、今後NFC端末でFelica等をサポートするため、2013年2月頃セキュアSIMカードが提供されるらしい

このあたりの移行計画については、ケータイWatchに記事がある。


というわけで、日本でWP8端末がリリースされるのは、セキュアSIMが提供され始めてから、(予定通りにいけば)来年の春モデルくらいで出てくるんじゃないかなーと、個人的には予想している次第です。
 | HOME | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。