Ⅰ android 怎樣支持nfc
nfc需要硬體支持,選擇帶有nfc功能的android手機就可以了。
nfc這個技術由非接觸式射頻識別(RFID)演變而來,由飛利浦半導體(現恩智浦半導體公司)、諾基亞和索尼共同研製開發,其基礎是RFID及互連技術。近場通信(Near Field Communication,NFC)是一種短距高頻的無線電技術,在13.56MHz頻率運行於20厘米距離內。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。目前近場通信已通過成為ISO/IEC IS 18092國際標准、ECMA-340標准與ETSI TS 102 190標准。NFC採用主動和被動兩種讀取模式。
NFC近場通信技術是由非接觸式射頻識別(RFID)及互聯互通技術整合演變而來,在單一晶元上結合感應式讀卡器、感應式卡片和點對點的功能,能在短距離內與兼容設備進行識別和數據交換。工作頻率為13.56MHz.但是使用這種手機支付方案的用戶必須更換特製的手機。目前這項技術在日韓被廣泛應用。手機用戶憑著配置了支付功能的手機就可以行遍全國,用戶的手機可以用作機場登機驗證、大廈的門禁鑰匙、交通一卡通、信用卡、支付卡等等!
Ⅱ 安卓NFC有什麼用NFC功能有什麼玩法
安卓手機不能使用apple pay,但是支持銀聯的雲閃付,同時手機需要帶有NFC功能,那麼這個NFC是什麼呢?有什麼用呢?除了閃付功能還有什麼其他的用嗎?
不同於 iOS 用戶的 NFC 模塊只能用於支付,由於 Android 上 NFC 相關 API 是開放的,Android上也有許多 NFC 新的玩法,這也為 Android 的 NFC 帶來許多不同的可能性。
解鎖手機:是的你沒有看錯,Android 、帶有 Google Play 服務以及 NFC 模塊的設備都能夠使用 NFC 解鎖手機。在系統設置中選擇安全,並進入 SmartLock,選擇『信任的設備』並添加一個 NFC 解鎖設備。此處的『NFC 解鎖設備』並不僅局限於 NFC 標貼,你的門禁卡、公交卡、飯卡等等都可以作為解鎖手機的『鑰匙』。
查詢/充值公交卡:微信與支付寶在一年多以前就可以通過 NFC 服務為公交卡進行余額查詢和充值。將公交卡貼在手機背面,手機會自動跳轉至微信或支付寶,然後執行查詢或充值操作。支付寶的余額查詢功能可以查詢全國 各大城市通用標准公交卡中。充值功能根據不同的 app 有不同的政策與支持地區。
傳輸文件:這應該是 Android NFC 最為令人津津樂道的功能了。通過基於 NFC 的 Android Beam 功能,兩台兼容的 Android 設備可以互相進行數據傳輸。只需要將欲分享的內容打開,並將兩台手機背對背靠好,點擊屏幕就能完成分享。
甚至還可以自動完成任務。對於高玩來說,Android NFC 可以做到離線版 IFTTT,自動化進行某些操作。通過 Tasker app 以及其他支持 NFC 的自動化 app,用戶可以使用 NFC 標貼來作為 task trigger(任務觸發器),做到 Wi-Fi 網路切換、快速靜音、快速設定鬧鍾等等操作。
Ⅲ android的NFC
android安卓NFC 做了一個通過nfc讀取卡的app,只要nfc卡一刷就啟動activity。 但是想在我手動開啟主程序時才開啟NFC接收功能, 並在主程序關閉時結束NFC接收。 不知道如何實現, 現在我的思路是通過操作nfcadpter 或 開關nfc許可權(permission)。
Ⅳ android幾開始支持的nfc
2010年安卓系統開始支持NFC。2020年8月,微信安卓版開放全面開放NFC許可權,小程序(微信的5.0版本以上)應用可使用NFC功能。2020年12月開始內測,鴻蒙系統HarmonyOS元應用,使用NFC靠一靠,調起快應用(無需開啟app)。
Ⅳ NFC在Android中的應用
什麼是NFC?Google一大坨,網路一大坨爛激,我就不講了,這里我只討論技術細節。
首先我們先討論一下這樣的一個問題,當我們把NFC標簽靠近手機,並且手機感應後,我們通過什麼方式能得到NFC標簽信息呢?答案就是通過Intent的飢野襪方式來獲取。現在的需求是我想在啟動一個Activity後通過讀NFC的方式得到裡面的信息。下面我來介紹具體做法。
通過分析需求得知,我們需要前台調度系統機制,這種機制允許Activity攔截Intent對象。
1.獲取NfcAdapter
nfcAdapter= NfcAdapter.getDefaultAdapter(this);
2.構造PendingInent對象封裝NFC標簽信息
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
3.聲明Intent對象的過濾器脊慎
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) { throw new RuntimeException("fail", e); }
4建立一個處理NFC標簽技術的數組
5.這是最核心最重要的一步了,我們需要在Activity的onResume方法中調用nfcadapter的enableForegroundDispatch方法把上面的變數作為參數傳遞進來,
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,mTechLists);
一旦NFC標簽接觸到手機,這個方法就會被激活。
6.最後我們需要在onNewIntent方法中處理Intent回調給我們的信息。
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage mNdefMsg = (NdefMessage) rawArray[0];//得到NdefMessage NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];//得到NdefRecord
Ⅵ 談談目前常用的6種移動支付系統是哪些
Apple Pay:雷聲大,雨還遠
Apple Pay一經推出,在NFC領域中猶如「一石驚起千重浪」,整個行業簡直沸騰了。不過由於種種原因,Apple Pay進入中國似乎還比較遙遠,讓很多「果粉」哭訴無門,真有點雷聲大,而雨還遠的意境,而且目前僅在美國適用,未來將推廣到英國和韓國,至於何時中國用戶能用上Apple Pay還不得而知。
回顧筆者知道NFC一詞,應該還是在2010年的上海世博會期間,中國移動發布了手機錢包,揭開了我國手機錢包發展的序幕。同時也推出了世博會手機門票,客戶需更換具有手機錢包功能的SIM卡,不換手機和號碼,就能購買「世博手機票」,直接持手機進,入世博園區,並在世博園區內的合作商戶進行消費支付,也讓國人首次認識了手機支付。
但是,中國移動的手機錢包由於大環境的原因,面臨使用不便、特約商戶使用熱情不高的問題。有「中行小達人」之稱的陸金華表示:盡管中國的一些手機廠商們很早就涉足了NFC,但阻礙基於NFC標準的移動支付發展緩慢的原因,除了移動支付標准之爭外,恐怕更重要的是參與NFC產業的各方都畫地為牢,只想自己通吃整個產缺冊業鏈,拒絕與他人合作共同做大市場。即便現在一些以NFC為核心的企業還在探討NFC的前景,但似乎並沒有找到醫治頑疾的良方,倒是NFC越來越有邊緣化的趨勢。
ApplePay依託蘋果這個業界龍頭老大的背景強勢閃亮登場,讓NFC產業的參與者們頓時看到了一線生機,重新燃起了對NFC的期待。Apple Pay改變了之前產業鏈的生態環境,即與發卡銀行、信用卡組織簽訂達成協議,如果消費者使用Apple Pay付款,蘋果公司將從交易中抽取一定比例的分成,並且不向商戶收取費用,但是這種模式恐怕對其進入中國市場產生了一定的阻礙作用。
HCE:來得快,待觀察
2013年,Google發布Android 4.4 KitKat(奇巧)操作系統,使任何的Android NFC設備可在不需訪問安全元素的前提下進行移動支付和其他安全應用。
Android 4.4的NFC支付與移動運營商引入了一個新的開放式架構,讓應用程序在「雲中」管理用戶的付款信息,通過主機卡模擬(HCE)支持基於NFC的安全交易、付款及客戶忠誠度計劃,訪問卡、交通卡和其他定製服務。任何Android設備上的應用程序都可以效仿NFC智能卡,讓用戶在設備沒有設置安全元件(SE)的必要情況下點擊啟動與他們所選擇的應用程序。應用程序也可使用一個新的閱讀器作為讀者的HCE卡和其他基於NFC的交易模式。
就在與Apple Pay進行合作不久,VISA和萬事達卡又陸續宣布推出利用近場通信(NFC)提供新的姿迅移動支付方式——HCE。兩者的規范雖然存在著一些差異,但相信在不久的將來,雙方提出的HCE規范將會擇優綜合。
HCE的出現跡扮此讓更多的消費者特別是安卓系統的用戶,也可以像Apple Pay用戶一樣,只需用智能手機即可完成支付。
2015年5月5日,工行在北京與中國銀聯、VISA合作,推出亞洲地區首家HCE雲支付信用卡產品。工行此次通過率先利用這項「顛覆性創新」的技術,搭建覆蓋線下近場支付及線上遠場支付一體化的便捷體驗,有意站到移動支付的風口翩翩起舞。VISA的首張HCE應用的信用卡以與擁有「宇宙行」之稱的工商銀行合作,彰顯了其對HCE的的姿態,工行對這張HCE雲支付信用卡的目標劍指500萬張,更是顯出雄心勃勃。HCE來了,來得很快,但效果如何,還需要拭目以待。
銀聯閃付:起得早,醒的晚
中國銀聯在基於NFC方面的嘗試也非常早,在2011年銀聯就推出基於NFC的銀聯支付標准——閃付,這種金融IC卡的非接觸式支付也得到了大量POS機支持。據統計,支持銀聯閃付的POS終端已經佔了相當大的市場份額,中國銀聯對商戶POS方面擁有絕對的優勢,這也是其它幾種支付方式無可比擬的。可以說閃付的支付環境建設已經非常不錯。
但是,由於種種原因,中國銀聯對閃付功能的設備應用、市場宣傳,以及用戶習慣培養方面做的非常不夠,無論是持卡用戶,還是特約商戶,真正認識「閃付 QuickPass」標志和能順暢使用的並不多。剛剛結束的銀聯「6.2優惠」活動中,盡管對使用閃付支付有很非常大的優惠措施,但是卻有些「叫好不叫座」的感覺。閃付推出多年,也如同它的原型NFC一樣,並沒有培養起消費者使用閃付的習慣,很多標注「閃付QuickPass」標識的終端已經淪為擺設。
實際上從各種新興支付的測試情況來看,使用銀行卡的閃付功能是交易最為簡便,而且也是最安全的移動支付方式,一來無需使用任何設備作為輔助工具,第二,無需向其它設備綁卡,提供主卡片信息。從2015年中國銀聯的一些舉措來看,顯示出其強力推廣「閃付」的決心和勇氣,雖然銀聯對閃付有些「起得早醒的晚」,但總算是醒了,對閃付的普及我們拭目以待。
EMV:非接付,屬「老大」
1999年2月,當時的Europay(歐陸卡)、萬事達卡和Visa共同成立了EMVCo組織,共同發起制訂的銀行卡從磁條卡向智能IC卡轉移的技術標准,是基於IC卡的金融支付標准,已成為公認的全球統一標准。在EMV標準的基礎上,萬事達卡和VISA又推出了各自的非接觸式支付系統PayPass和PayWave。
EMV2000標準是國際上金融IC卡借記/貸記應用的基礎性技術標准,亦是公認的框架標准,目前的正式發布的版本有EMV96和EMV2000。中國銀聯於2013年5月20日正式加入這一標准體系。2014年3月,EMVCo組織發布了Tokenization標准,蘋果公司於同年9月發布Apple Pay,率先支持這一標准,之後VISA、萬事達、中國銀聯、谷歌等卡組織於第三方支付機構也紛紛開始支持這一標准,這將提高手機支付與在線支付的安全性和便利性。
支付寶:追時尚,搶市場
支付寶支付是二維碼支付的代表,二維碼支付是一種基於賬戶體系搭起來的新一代無線支付方案。韓國與日本是使用二維碼支付比較早的國家,韓日兩國的二維碼支付技術已經普及了95%以上。
支付寶由於缺乏線下POS機的優勢,單憑線下收單業務已經沒有「油水」。另外,支付寶意在打造自己的一套支付系統,才是其在2013年終止線下收單業務的根源。從這兩年支付寶的市場舉措來看,全力打造以二維碼支付為核心的支付生態系統業已逐漸成形。同時,二維碼支付的使用環境建設也已經成為熱點,一些廠商的POS機也已經兼容了二維碼支付流程。
二維碼支付手段在國內興起並不是偶然,形成背景主要與我國移動互聯網的興起、IT技術的快速發展,以及電子商務的快速推進息息相關。有了先進的移動終端設備的支持,更有了移動互聯網催生的移動消費中大量的支付需求,憑借時尚、便捷的客戶體驗,在支付領域得到了市場中年輕一代消費者的追捧,推動了二維碼支付已經成為了移動支付的主力軍。
2014年3月,央行從客戶支付安全的角度考慮,下發緊急文件叫停了條碼(二維碼)支付等面對面支付服務。但實際上支付寶二維碼支付並沒有真正停止過,二維碼支付的布局和優惠活動依舊緊鑼密鼓地開展。或許市場的選擇是最有力的結果,未來多種支付手段並存的局面即將到來。
微信支付:既生瑜,何生亮
微信支付與支付寶支付同出一轍,主打二維碼支付。從市場中實際看到的一些情況中,似乎微信支付沒有它的對手一般張揚,或許是忌憚央行的一紙禁令,而在悄悄地布局,但憑借在移動互聯網行業中的地位,得到移動支付領域的一席之地還是很輕松的。
盡管微信支付與支付寶支付很多相似之處,但是也各有特長。微信支付,是依託強大的微信圈為基礎,為直接的用戶支付提供應用場景的生態體系。支付寶支付更側重為支付工具。但是二者已經在很多地方越來越趨同了。也許深有「既生瑜何生亮」的感嘆。
Ⅶ 3.安卓NFC開發-解析數據(效果篇)
解析茄爛數據效果圖如下,把公交顫櫻漏卡靠近手機,彈出了NFC操作的可選列表,打開自己的應用NFCap,讀取到卡頌態號、卡名、余額、交易記錄,效果圖如下:
具體如何實現,後面專門解析。
Ⅷ 手機中的NFC功能,你會用么附使用方法與技巧
在現在看來,各廠商旗艦手機的標配之中就有NFC功能的縮影,NFC功能的大大普及,給我們的生活來帶極大的方便,擺脫了傳統攜帶公交卡、銀行卡的習慣,一個配置NFC功能的手機即可全部搞定。NFC功能為什麼有這么大的魔力呢,首慶棚虛先我們先來看看NFC功能如何出現的,NFC全稱Near Field Communication,定義為近距離無線通信,起初有成立泛歐聯盟,開發NFC的開放式架構,並推動在手機中的應用。
NFC(簡稱近場通信)是一種短距高頻的無線電技術,在13.56MHz頻率運行於10厘米距離內。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。目前近場通信已通過成為ISO/IEC IS 18092國際標准、ECMA-340標准與ETSI TS 102 190標准。NFC採用主動和被動兩種讀取模式。在現在看來,這項技術被廣泛的應用,在手機上可以充當公交卡、門禁鑰匙、移動支付、身份識別、傳輸數據等。
從其功能上不難看出,一塊小小的NFC晶元,可以實現這么多功能,也是其便利的和碧所在。今天筆者以小米手機 6作為當年的旗艦手機為例,介紹這個NFC功能的實用性和小技巧,希望能給讀者帶來方便。
使用NFC功能來進行傳輸文件用戶幾乎很少很少,不如藍牙來得快,且在傳輸速度上藍牙比NFC要快,理論是NFC傳輸速度在424Kbps,藍牙在1Mbps;傳輸距離上,NFC傳輸距離是0-10cm,藍牙是0-10m,NFC傳輸比較適用於一些敏感信息或個人數據的傳輸等,藍牙比較適合長距離的文件傳輸等;在安全性上,NFC具備優勢。筆者在測試NFC傳輸過程中必須兩台手機緊貼在一起,不然會導致數傳中斷,從而引起重復操作等,再者如果沒有手機支持NFC功能,相比還是藍牙來得快。
操作方法:打開NFC功能—再打開「Android Beam」功能—兩手機同時觸碰即可顯示傳輸文件的操作方法。
有了這個功能之後,大大節約的人們的出行效率,一個手機就能搞定,同時在不定期時間也會有開卡免費的活動。自帶公交卡功能這還是其中的一個方面,如果余額不足怎麼辦?手機支持充值公交卡,很方便也很實用。不過需要注意的是,刷公交必須打開NFC功能哦,總體來看,手機公交卡,具有其便捷性性優點,但如果手機被盜,也是一個雞肋。
操作方法:需要在手機上開通公交卡功能(最近開通嶺南通的公交卡免開發費哦)才能享有此功能。
1.微信充值
打開手機NFC功能(微信中NFC功能也需開啟),將公交卡緊貼手機,之後會彈出界面,選擇「微信」,選擇充值金額,然後支付,充值即可;當然你也可以直接在微信支付界面—生活繳費—公交卡充值進行操作。需要注意的是,在充值的過程中公交卡需要緊貼手機。不過目前來看,微信支持公交卡充值的城市有武漢(武漢通)、北京(北京一卡通)、廣州(羊城通/嶺南通)、深圳(深圳通)
2.手機QQ充值
手機QQ充值與微信的充值方式是差不多的,將公交卡緊貼手機,之後會彈出界面,選擇「QQ」,選擇充值金額,然後支付,充值即可。需要注意的是,在充值的過程中公交卡需要緊貼手機,以保證充值能成功。QQ充值的話,需要基於支持的手機,比如小米2A、小米3...我震驚了。。
3.嶺南通APP
嶺南通APP是由嶺南通公司自主開發的一款APP,具有查詢服務網點、記錄查詢、在線充值等功能,不僅可以對卡片進行NFC充值,卡片的余額、消費記錄查詢也更加便捷!有2種查詢方式可供選擇:NFC手機可以直接讀卡,其他手機可輸入卡號查詢。是你的手快還是手機讀卡速度更快?
4.支付寶充值
在手機上登錄支付寶, 選擇【城市一卡通】(也可以直接搜索),需要注意的是城市一卡通九宮格入口是安卓的用戶都能看到,ios的不支持;然後使用公交卡緊貼於手機,進行讀取和充值,如果付款完成之後,沒有將卡貼在手機背面,頁面會提示貼卡,在15秒內沒有貼卡,則提示是否繼續充值,按【取消】,充值金額會退回到用戶支付寶賬戶,譽燃點【確定】會重新進入15秒到計時貼卡頁面。需要注意的是,支付寶的公交卡充值適配不是很全,部分公交卡無法實現充值的,需要藉助於其他方法。
當然你也可以進行銀行手機端進行充值,在開啟NFC之後,需要將公交卡貼於手機NFC處,會有窗口彈出,用戶可以選擇需要進行充值的應用。除此之外,我們還可以使用「完美校園」,「微信」等APP對飯卡、燃氣卡等進行充值,充值不用再排長龍,卡片輕輕一貼,充值立馬完成。
門禁卡是現在社區一種安全管理的方式之一,出去進來都是需要刷門禁卡的,出去忘記攜帶是一個麻煩事,尤其是走訪親戚朋友,門衛又不認識你,本來想給朋友一個驚喜的,變成朋友給你一個「驚喜」。那麼NFC支持模擬門禁卡可謂是一個通行證了,外出你的手機肯定要隨著你,如果手機忘帶了,真沒辦法了。
1.錄入實體卡
打開小米錢包,選擇小米門卡,點擊右下角的添加,然後選擇門卡,再根據提示將門禁卡貼於感應區,後續根據提示完成即可,支持普通門卡、異形門禁卡,在換出公交卡的界面,是有門禁卡存在的,目前僅支持模擬市面上未經過加密且頻率為13.56MHZ的門卡,需要注意的是部分門禁卡是有加密功能,是無法進行復制模擬的,這就需要採用第2種辦法。
2.自定義空白卡
模擬門卡首個支持場景為自定義空白卡,用戶選擇後可向上直接發門卡到手機,該場景下用戶開卡後需要到線下(小區物業、學校或其他線下場景)由工作人員寫入數據開通許可權即可使用手機刷卡開門。用戶需要注意的是在線下開通門禁許可權需要小區業主提供相關的證明,不然一般的物業不會給你這個許可權的。
3.智能門鎖卡
用戶在小米手機中開通米家智能門鎖後,即可使用手機刷卡開門,開通完成之後,需要用戶打開米家APP,進入設備管理界面,激活門鎖為米家NFC卡,分配鑰匙後,即可使用手機刷卡開門。同時為了保證安全,刷卡時需要驗證指紋。但現在只支持米家門鎖,建議後期對第三方的門鎖採取同樣的支持。
第三方Mi Pay是小米錢包提供的手機支付功能,使用支持NFC的小米手機,通過帶有銀聯「雲閃付」標志的POS機即可支付交易。Mi Pay已支持中國銀行、中國工商銀行、等全國74家銀行,實現了對主流銀行的全覆蓋,並仍在不斷拓展。除支付外,Mi Pay還在不斷拓展其使用場景,如ODA、線上有卡支付、碰一碰支付等功能都在一定程度上簡化了支付流程,優化了使用體驗。使用之前需要綁定支持雲閃付的銀行卡即可(銀行卡上會有標識的,如Quick 閃付 Pass)。
總結:NFC功能已經在日常的生活中發揮著越來越重要的作用,比如有NFC模塊的POS機進行便捷支付、具備閃付功能的ATM機能夠支持無卡取款、共享單車支持NFC接觸解鎖等,具備NFC功能的手機越來越多,只有全面的認知和了解它,才能發揮它的巨大作用,不然你當它是擺設么?未來,相信廠家將持續對手機NFC做更多有益嘗試和 探索 ,為用戶帶來便利。NFC還具備哪些使用方法和技巧么,歡迎討論。
Ⅸ Android的各個版本分別對NFC有什麼支持
Android 2.1
主要特性:提升硬體速度 更多屏幕以及解析度選擇 大幅度的用戶界面改良支持 Exchange活動牆紙 大幅改進虛擬鍵盤 藍牙 2.1 Google 地圖
Android 2.2
相對於上一版本的 改變: 1、整體性能大幅度的提升 2、3G網路共享功能。 3、Flash的支持。 4、App2sd功能。 5、全新的軟體商店。 6、更多的Web應用API介面的開發。
Android 2.3
主要更新包括: 游戲:增加了新的垃圾回收和優化處理事件,以提高對游戲的支持能力。原生代碼可直接存取輸入和感應器事件、EGL/OpenGL ES、OpenSL ES。新的管理窗口和生命周期的框架。 多媒體:支持VP8和WebM視頻格式,提供AAC和AMR寬頻編碼,提供了新的音頻效果器,比如混響、均衡、虛擬耳機和低頻提升 通訊方式:支持前置攝像頭、SIP/VOIP和NFC(近場通訊) 站在用戶的角度看,這次更新的亮點主要有: 簡化界面、速度提升: 更快更直觀的文字輸入: 一鍵文字選擇和復制/粘帖: 改進的電源管理系統: 新的應用管理方式: 原生支持前置攝像頭、互聯網通話和NFC(近場通訊): 系統原生支持VoIP,可以在聯系人里加入它的SIP帳戶,然後直接通過系統來撥打VoIP電話。 增加下載管理器。
也就是說,在用戶自己使用方面,早期版本第三方軟體只能安裝在手機內存上,2.2,2.3就可以安裝在內存卡上了,手機硬體相應配置也有相當大的提高。
Ⅹ NFC開發(一)——HCE基於主機的卡模擬簡述
許多提供NFC功能的基於Android的設備已經支持NFC卡模擬。在大多數情況下,該卡由設備中的單獨晶元模擬,稱為 安全元件(Secure Element) 。無線運營商提供的許多SIM卡還包含安全元件(Secure Element)。
Android 4.4引入了另一種卡模擬方法,它不涉及SE,稱為 基於主機的租芹卡模擬 。這允許任何Android應用程序模擬卡並直接與NFC讀卡器通話。本文檔描述了基於主機的卡肢型裂模擬(HCE)如何在Android上工作,以及如何使用此技術開發模擬NFC卡的應用程序。
當使用安全元件(Secure Element)提供NFC卡模擬時,將通過Android應用程序將要模擬的卡提供到設備上的安全元件(Secure Element)中。然後,當用戶通過NFC終端握住設備時,設備中的NFC控制器將來自讀卡器(NFC Reader)的所有數據直接路由到安全元件(Secure Element)。圖1說明了這個概念。
安全元件(Secure Element)本身執行與NFC終端的通信,並且完全不涉及Android應用。交易完成後,Android應用程序可以直接查詢SE的交易狀態並通知用戶。
當使用基於主機的卡模擬來模擬NFC卡時,數據將被路由到直接運行Android應用程序的主機CPU,而不是將NFC協議幀路由到SE。圖2展示了基於主機的卡模擬如何工作。
NFC標准提供對許多不同協議的支持,並且可以模擬不同類型的卡。
Android 4.4支持當今市場上常見的幾種協議。許多現有的非接觸式卡已經基於這些協議,例如非接觸式支付卡。這些協議也得到了當今市場上眾多NFC讀卡器的支持,其中包括Android NFC設備可以自己作為讀卡器(請參見 IsoDep 課程)。這使您可以僅使用基於Android的設備在HCE周圍構建和部署端到端NFC解決方案。
具體而言,Android 4.4支持基於NFC-Forum ISO-DEP規范(基於ISO / IEC 14443-4)的模擬卡,並處理ISO / IEC 7816-4規范中定義的應用協議數據歷閉單元(APDU)。Android只強制在Nfc-A(ISO / IEC 14443-3 Type A)技術之上模擬ISO-DEP。支持Nfc-B(ISO / IEC 14443-4 Type B)技術是可選的。所有這些規格的分層如圖3所示。
Android中的HCE體系結構基於Android Service 組件(稱為「HCE服務」)。服務的一個關鍵優勢是它可以在沒有任何用戶界面的情況下在後台運行。這對於許多HCE應用程序來說非常合適,例如會員卡或公交卡,用戶不需要啟動應用程序即可使用它。相反,通過NFC讀卡器輕敲設備將啟動正確的服務(如果尚未運行)並在後台執行該事務。當然,如果有意義的話,您可以自由地從您的服務中啟動額外的UI(例如用戶通知)。
當用戶將設備連接到NFC讀取器時,Android系統需要知道NFC讀取器實際想要與哪個HCE服務通話。這就是ISO / IEC 7816-4規范的出處:它定義了一種選擇應用程序的方式,以應用程序ID(AID)為中心。一個AID最多由16個位元組組成。如果您正在模擬現有NFC讀卡器基礎架構的卡片,那麼這些讀卡器所尋找的AID通常是眾所周知的並且是公開注冊的(例如Visa和MasterCard等支付網路的AID)。
如果您想為自己的應用程序部署新的讀卡器基礎結構,則需要注冊您自己的AID。AID的注冊程序在ISO / IEC 7816-5規范中定義。如果您要為Android部署HCE應用程序,Google建議按照7816-5注冊AID,因為它可以避免與其他應用程序發生沖突。
在某些情況下,HCE服務可能需要注冊多個AID才能實現某個應用程序,並且需要確保它是所有這些AID的默認處理程序(而不是組中的某些AID轉到其他服務) 。
一個AID組是應該被OS視為一起歸屬的AID列表。對於AID組中的所有AID,Android會保證以下其中一項:
換句話說,沒有中間狀態,組中的一些AID可以路由到一個HCE服務,另一些AID可路由到另一個。
每個AID組都可以與一個類別關聯。這允許Android按類別將HCE服務組合在一起,並且反過來又允許用戶在類別的級別而不是AID級別設置默認值。通常,避免在應用程序的任何面向用戶的部分提及AID:它們對普通用戶沒有任何意義。
Android 4.4支持兩種類別: CATEGORY_PAYMENT (涵蓋行業標准支付應用程序)和 CATEGORY_OTHER (對於所有其他HCE應用程序)。
要使用基於主機的卡模擬來模擬NFC卡,您需要創建一個 Service 處理NFC事務的組件。
您的應用程序可以通過檢查 FEATURE_NFC_HOST_CARD_EMULATION 功能來檢查設備是否支持HCE 。您應該 <uses-feature> 在應用程序清單中使用該標記來聲明您的應用程序使用HCE功能,以及該應用程序是否需要運行。
Android 4.4帶有一個便利的 Service 類,可以作為實現HCE服務的基礎: HostApService 類。
因此,第一步要擴大 HostApService 。
HostApService 聲明了兩個需要重寫和實現的抽象方法。
processCommandAp() 只要NFC讀卡器將應用協議數據單元(APDU)發送到您的服務,就會調用它。APDU也在ISO / IEC 7816-4規范中定義。APDU是在NFC讀卡器和您的HCE服務之間交換的應用級數據包。該應用級協議是半雙工的:NFC讀卡器會向您發送命令APDU,並等待您發送響應APDU作為回報。
如前所述,Android使用AID來確定讀者想要與哪個HCE服務交談。通常,NFC讀卡器向您的設備發送的第一個APDU是「SELECT AID」APDU; 這個APDU包含讀卡器想與之交談的AID。Android從APDU中提取AID,將其解析為HCE服務,然後將該APDU轉發給已解析的服務。
您可以通過返回響應APDU的位元組來發送響應APDU [processCommandAp()]( https://developer.android.com/reference/android/nfc/cardemulation/HostApService.html#processCommandAp(byte[] , android.os.Bundle))。請注意,此方法將在應用程序的主線程中調用,該線程不應被阻止。所以如果你不能立即計算並返回一個響應APDU,那麼返回null。然後,您可以在另一個線程上完成必要的工作,並 sendResponseAp() 在完成後使用 HostApService 該類中定義的方法發送響應。
Android會繼續將新的APDU從讀取器轉發到您的服務,直到:
在這兩種情況下,你的類的 onDeactivated() 實現都是通過一個參數來調用的,這個參數指出了兩者中的哪一個發生了。
如果您正在使用現有的讀卡器基礎架構,則需要實現讀卡器在您的HCE服務中期望的現有應用程序級協議。
如果您正在部署您控制的新讀卡器基礎架構,則可以定義自己的協議和APDU序列。通常,嘗試限制APDU數量和需要交換的數據大小:這樣可以確保用戶只需將設備通過NFC讀取器持續一段時間即可。合理的上限約為1KB的數據,通常可以在 300ms 內交換。
您的服務必須像往常一樣在清單中聲明,但還必須在服務聲明中添加一些附加件。
首先,為了告訴平台它是一個實現 HostApService 介面的HCE服務 ,你的服務聲明必須包含一個 SERVICE_INTERFACE 動作的 Intent Filter 。
另外,為了告知平台哪個AIDs組被這個服務請求,一個 SERVICE_META_DATA <meta-data> 標簽必須包含在服務的聲明中,指向一個XML資源和關於HCE服務的附加信息。
最後,您必須將該 android:exported 屬性設置為true,並且 "android.permission.BIND_NFC_SERVICE" 在服務聲明中要求許可權。前者確保服務可以被外部應用程序綁定。後者然後強制只有擁有該 "android.permission.BIND_NFC_SERVICE" 許可權的外部應用程序 才能綁定到您的服務。既然 "android.permission.BIND_NFC_SERVICE" 是一個系統許可權,這有效地強制只有Android OS可以綁定到你的服務。
這是一個 HostApService 清單聲明的例子:
這個元數據標簽指向一個 apservice.xml 文件。下面顯示了具有包含兩個專有AID的單個AID組聲明的此類文件的示例:
該 <host-ap-service> 標簽需要包含一個 <android:description> 屬性,該屬性包含可能在UI中顯示的用戶友好的服務描述。該 requireDeviceUnlock 屬性可用於指定在調用此服務來處理APDU之前必須先解鎖設備。
在 <host-ap-service> 必須包含一個或多個 <aid-group> 標簽。每個 <aid-group> 標簽都需要:
最後,您的應用程序還需要擁有 NFC 可以注冊為HCE服務的 許可權。
多個 HostApService 組件可以安裝在單個設備上,並且可以由多個服務注冊相同的AID。Android平台根據AID屬於哪個類別來解決AID沖突。每個類別可能有不同的沖突解決策略。
例如,對於某些類別(如付款),用戶可能能夠在Android設置UI中選擇默認服務。對於其他類別,策略可能總是要求用戶在沖突情況下調用哪個服務。要查詢特定類別的沖突解決策略,請參閱 getSelectionModeForCategory() 。
應用程序可以使用[isDefaultServiceForCategory(ComponentName, String)]( https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation.html#isDefaultServiceForCategory(android.content.ComponentName , java.lang.String))API 檢查其HCE服務是否是某個類別的默認服務。
如果您的服務不是默認設置,則可以請求將其設置為默認設置。看 ACTION_CHANGE_DEFAULT 。
Android會將AID組為「payment」的類別,聲明的HCE服務視為支付應用程序。Android 4.4版本包含一個名為「tap&pay」的top-level設置菜單條目,它列舉了所有這些支付應用程序。在此設置菜單中,用戶可以選擇在點按付款終端時將調用的默認支付應用程序。
為了提供更具視覺吸引力的用戶體驗,HCE支付應用程序需要為其服務提供額外的resource:所謂的服務標記。
這個asset的大小應該是260x96 dp,並且可以在元數據(meta-data)XML文件中通過添加指向drawable resource android:apServiceBanner 的 <host-ap-service> 標簽的屬性來指定 。一個例子如下所示:
當設備的屏幕關閉時,當前的Android實施將NFC控制器和應用程序處理器完全關閉。因此,當屏幕關閉時,HCE服務將無法工作。
然而,HCE服務可以從鎖定屏幕中起作用:這由HCE服務標記中的 android:requireDeviceUnlock 屬性控制 <host-ap-service> 。默認情況下,不需要設備解鎖,即使設備被鎖定,您的服務也會被調用。
如果您將 android:requireDeviceUnlock HCE服務的屬性設置為「true」,Android會提示用戶在您靠近NFC讀卡器時解鎖設備,NFC讀卡器會選擇已解析為您的服務的AID。解鎖後,Android會顯示一個對話框,提示用戶再次點擊以完成交易。這是必要的,因為用戶可能已經將設備從NFC讀卡器移開以便解鎖它。
本部分對於已經部署依賴SE進行卡模擬的應用程序的開發人員很感興趣。Android的HCE實現旨在與其他實現卡模擬的方法並行工作,包括使用SE。
這種共存基於一種稱為「AID路由」的原則:NFC控制器保留一個由(有限)路由規則列表組成的路由表。每個路由規則都包含一個AID和一個目的地。目標可以是主機CPU(Android應用程序正在運行的地方),也可以是連接的SE。
當NFC讀卡器發送具有「SELECT AID」的APDU時,NFC控制器解析它並檢查AID是否與其路由表中的任何AID匹配。如果匹配,那麼APDU和其後的所有APDU將被發送到與AID相關聯的目的地,直到收到另一個「SELECT AID」 APDU或NFC鏈路斷開。
圖4說明了這種架構。
NFC控制器通常還包含APDU的默認路由。在路由表中找不到AID時,將使用默認路由。盡管此設置可能因設備而異,但Android設備需要確保您的應用注冊的AID已正確路由到主機。
實現HCE服務或使用SE的Android應用程序不必擔心配置路由表 - 這是由Android自動處理的。Android只需要知道哪些AID可以由HCE服務處理,哪些可以由SE處理。基於哪些服務已安裝,以及哪些用戶已配置為首選服務,路由表會自動配置。
我們已經介紹了如何聲明HCE服務的AID。以下部分說明如何為使用SE進行卡模擬的應用程序聲明AID。
使用SE進行卡模擬的應用程序可以在其清單中聲明所謂的「關閉主機服務」。這種服務的聲明幾乎與宣布HCE服務相同。以下情況例外:
相應 apservice.xml 文件注冊兩個AID 的示例:
該 android:requireDeviceUnlock 屬性不適用於脫離主機服務,因為主機CPU不參與事務,因此無法阻止SE在設備鎖定時執行事務。
該 android:apServiceBanner 屬性必須用於作為支付應用程序的關閉主機服務,以便作為默認支付應用程序進行選擇。
Android本身永遠不會啟動或綁定到聲明為「脫離主機」的服務。這是因為實際交易由SE執行,而不是由Android服務本身執行。服務聲明僅允許應用程序注冊安全元件(Secure Element)上存在的AID。
HCE體系結構本身提供了一個核心安全性:因為您的服務受到 BIND_NFC_SERVICE 系統許可權的保護,所以只有操作系統可以綁定到您的服務並與之通信。這可以確保您收到的任何APDU實際上都是OS從NFC控制器接收到的APDU,並且您發回的任何APDU只會發送到操作系統,而操作系統會直接將APDU轉發給NFC控制器。
剩下的核心部分就是您獲取應用程序發送給NFC讀卡器的數據的位置。這在HCE設計中有意解耦:它不關心數據來自何處,它只是確保將其安全地傳送到NFC控制器並傳送到NFC讀取器。
為了安全地存儲和檢索您希望從HCE服務發送的數據,例如,您可以依靠Android應用程序沙箱,將應用程序的數據與其他應用程序隔離。有關Android安全性的更多詳細信息,請閱讀 安全提示 。
這部分內容對於希望了解HCE設備在NFC協議的防沖突和激活階段使用何種協議參數的開發人員很感興趣。這允許構建與Android HCE設備兼容的讀卡器基礎結構。
作為Nfc-A協議激活的一部分,交換多個幀。
在交換的第一部分,HCE設備將呈現其UID; HCE設備應該被假定為具有隨機的UID。這意味著在每個抽頭中,呈現給讀卡器的UID將是隨機生成的UID。因此,NFC讀卡器不應依賴HCE設備的UID作為身份驗證或身份驗證的一種形式。
NFC讀取器可以隨後通過發送SEL_REQ命令來選擇HCE設備。HCE設備的SEL_RES響應將至少設置第6位(0x20),表示設備支持ISO-DEP。注意,SEL_RES中的其他位也可以被設置,表示例如對NFC-DEP(p2p)協議的支持。由於可以設置其他位,所以想要與HCE設備交互的讀者應該明確檢查第6位,並且<stront style="box-sizing: inherit;">不要將完整的SEL_RES與值0x20進行比較。</stront>
Nfc-A協議激活後,NFC讀取器啟動ISO-DEP協議激活。它發送一個「RATS」(請求選擇應答)命令。RATS響應(ATS)完全由NFC控制器生成,不能由HCE服務配置。然而,HCE實現需要滿足NFC論壇對ATS響應的要求,因此NFC讀卡器可以根據NFC論壇對任何HCE設備的要求設置這些參數。
以下部分提供了有關NFC控制器在HCE設備上提供的ATS響應的各個位元組的更多詳細信息:
請注意,許多HCE設備可能符合EMVCo聯合的支付網路在其「非接觸式通信協議」規范中指定的協議要求。尤其是:
如前所述,HCE實現僅支持單個邏輯通道。嘗試在不同的邏輯通道上選擇應用程序將不適用於HCE設備。
本文 翻譯自 谷歌開發者文檔,已由本人仔細校對。如有錯誤,請聯系我,以便修改。