🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
NFC

無線通信

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

4469閲覧

phonegap-nfcを使用したandroid用NFC読み取りアプリの作成

ysk19951022

総合スコア10

NFC

無線通信

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2019/10/20 12:09

ヘディングのテキスト### 前提・実現したいこと

cordovaでNFC読み取りアプリケーションを作成しようとしております。

発生している問題・エラーメッセージ

cordovaでNFCタグ読み取りアプリケーションを作成したのですが、NFCの読み取りがおこなわれません。
index.jsのnfc.addNdefListenerのsuccess時のalertメッセージ(Waiting for NDEF tag)は表示されております。
原因として考えられることはございますでしょうか?

該当のソースコード

cordovaバージョン 9.0.0

使用プラグイン
phonegap-nfcバージョン 1.0.4

使用端末
Xperia Z1バージョン 4.4.2

index.js
var app = {
// Application Constructor
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},

onDeviceReady: function() { app.receivedEvent('deviceready'); // NFC読み取り nfc.addNdefListener ( function (nfcEvent) { var tag = nfcEvent.tag, ndefMessage = tag.ndefMessage; alert(JSON.stringify(ndefMessage)); alert(nfc.bytesToString(ndefMessage[0].payload).substring(3)); }, function () { // success callback alert("Waiting for NDEF tag"); }, function (error) { // error callback alert("Error adding NDEF listener " + JSON.stringify(error)); } ); }, receivedEvent: function(id) { var parentElement = document.getElementById(id); var listeningElement = parentElement.querySelector('.listening'); var receivedElement = parentElement.querySelector('.received'); listeningElement.setAttribute('style', 'display:none;'); receivedElement.setAttribute('style', 'display:block;'); console.log('Received Event: ' + id); }

};

app.initialize();

試したこと

①cordova createにてアプリケーションを作成
②cordova platform add androidでプラットフォームを追加
③cordova plugin add PhoneGap-nfcでプラグイン追加
④アプリケーションフォルダのwww/js/index.jsを上記コードに編集
⑤cordova run androidで端末にアプリケーションをインストール

参考 https://github.com/chariotsolutions/phonegap-nfc/blob/master/doc/GettingStartedCLI.md

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

結論から書きますと、Cordova/PhoneGap NFC Pluginでは恐らく質問者さんの要望を叶えられません。
github上の PhoneGap NFC Plugin(1.0.4)のREADME.md には以下の記述があり、

send raw commands (ISO 14443-3A, ISO 14443-3A, ISO 14443-4, JIS 6319-4, ISO 15693) to NFC tags

FeliCaをNFCとして捉えた場合の仕様、NFC-Fに相当する JIS 6319-4 での通信コマンドはサポートしているように思います。ですがここで話は終わりません。

SONY FeliCa NFCの定義

非接触ICカードの国際標準規格ISO/IEC 14443に規定されるType-A, Type-Bの通信技術を、それぞれNFC-A, NFC-B、JIS X 6319-4にもとづくFeliCaの通信技術をNFC-F> と称し、NFCフォーラムでは、NFC-A, NFC-B, NFC-Fの3つの通信技術を等価に扱うグローバルな互換性を実現しうる仕様開発が行われています。

FeliCaですが、実際にはFeliCaにはFeliCa Standard(Suica、PASMO等の交通系ICカード)と、FeliCa Lite-S と言うFeliCaの言うなれば超軽量版があります。NFCでのFeliCaと言うと、一般的にこのFeliCa Lite-Sを指します。さらにややこしくなりますが、肝心のPhoneGap NFC Pluginで扱うデータフォーマットは、NFCフォーラムが仕様として策定した、NDEF(DataExchangeFormat))だけのようです。この場合、FeliCa Standard、たとえばSuicaカードを端末のICカードリーダーにかざしても反応しません。Suicaの課金データを保存したデータフォーマットはNDEFではないからです。

質問者さんの質問の文中には、試されたこととして、

index.jsのnfc.addNdefListenerのsuccess時のalertメッセージ(Waiting for NDEF tag)は表示されております。

とあります。これは「NDEFでデータが書き込まれたNFCタグをICカードリーダーにかざす(≒読み取る)と、反応できる状態になった」ことを示しています。ただのSuicaをAndroid端末のNFCリーダー部にかざしても、反応しません。

NFCについてはしばしば混乱した記事があり、読者の理解を妨げますが、NFC対応とは、ハードウェア(ICチップの仕様や、通信フォーマット等)とソフトウェア(データフォーマット、すなわちNDEF)のレベルでそれぞれ謳われます。アプリケーションレベルではデータがNDEFで書かれていることで、NFC対応と言えます。もし、質問者さんがSuicaやPASMOのデータを読み出したいのが要望であれば、SuicaのデータフォーマットはNFC対応ではないので、Cordova/PhoneGap NFC Pluginでは残念ですが要望を満たせないと考えられます。(ただ、もし本当にNDEFのデータが書かれたFeliCaのNFCタグが読めない、と言うのが問題であれば、また別のソフトウェア上の問題です)

Android端末に搭載されたNFCリーダー(チップ)によっては、ハードウェアレベル(通信レベル)でFeliCaを扱えます。FeliCaでは、FeliCa Standard/FeliCa Lite-S共に、IDmと言うカードID相当のデータがありますが、これをアプリケーションで扱うにも、NDEFではその取扱い範囲には無いので、ソフトを自作する必要があります。

投稿2019/10/25 14:28

dodox86

総合スコア9254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問