Android4.4中的近場通訊(NFC)

chris發表於2014-06-17

FC代表近場通訊,其全方位的測量精度可以達到釐米。這項技術也促進了其它一些好玩的技術的成長,如把兩個手機碰到一起就可以啟動一個多人遊戲,把手機貼近NFC讀寫器就可以進行付款了。

在Android4.4之前,NFC支付過程需要通過藉助裝置上一個專有的安全部件(Secure Element,可以存在SIM卡中),使用本地儲存的方式,關聯裝置本身的某種支付方式。這樣的話其它的APP就很難通過NFC進行支付操作,因為這個過程是依靠部分硬體的,也就是Secure Element,現在的問題就是像Sprint通訊公司或者Verizon通訊公司的這個載體部件,應該讓APP可以使用這個硬體功能。

基於主機的卡模擬技術

基於主機的卡模擬(HCE)是Android4.4的一項新技術,可以讓app繞過Secure Element,然後使用雲端支付資訊或者其它方式儲存的支付資訊來模擬一個NFC卡。有了HCE,任何APP都可以模擬一個NFC卡,而且任意一臺Android裝置可以當做NFC讀寫器。

檢測HCE功能就需要看看 FEATURE_NFC_HOST_CARD_EMULATION

需要在AndroidManifest.xml中宣告應用程式需要使用HCE功能:

HCE需要實現為一個服務(service),Android中的服務可以執行在後臺,啟動後不用和使用者進行互動。此服務可以讓NFC在使用時不需要使用者首先開啟APP。在Android4.4中新增了 HostApduService,繼承它然後建立一個服務來處理近場通訊:

這個NfcHceService需要覆蓋兩個方法:processCommandApdu()和onDeactivated()。APDU(Application Protocol Data Unit)是NFC讀寫器傳送給NfcHceService的資料單元,然後processCommandApdu()方法回送一個響應APDU。在NFC讀寫器和另外一個HCE服務通訊或者裝置不在NFC讀寫器的範圍內時,onDeactivated()方法會被呼叫。

注意還要在AndroidManifest.xml中宣告服務:

這個hceService.xml資原始檔在meta-data標籤裡宣告,告訴Android系統到哪裡去尋找Application的ID組。

Application ID

Application ID (AID)可以讓NFC讀寫器識別出裝置需要讀哪一張模擬卡(在processCommandApdu()方法中需要得到一個響應)。AID是由ISO/IEC 7816-5(International Organization for Standardization and the International Electrotechnical Commission)制定的,Android裝置要想作為NFC讀寫器,必須註冊一個AID。

這裡在hceService.xml中定義了一個application的AID組,在此場景中,它就是一個用於支付的組(使用CardEmulation.CATEGORY而不是用其它的組CATEGORY_OTHER)。在這個支付組的AID的應用程式還需要有一個260*96dp的資源,為apduServiceBanner服務。

HCE簡化了開啟NFC功能,把它從載體部件中解脫出來(不用依賴Secure Element的載體了),解除了其它的裝置等相關的限制。

想要了解更多關於給予主機的卡模擬技術可以看看這裡 Host-based Card Emulation

本文是KitKat Developer’s Guide的第六篇,請持續關注更新或者在 twitter上關注我們

相關文章