程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> NFC 與 Windows Phone 的那點事兒,nfcphone

NFC 與 Windows Phone 的那點事兒,nfcphone

編輯:C#入門知識

NFC 與 Windows Phone 的那點事兒,nfcphone


說起NFC這個詞兒應該已經不陌生了,在我們的生活中有很多使用場景都是使用的這項技術,例如公交卡,門禁,還有銀聯的閃付卡等等。並且近些年在移動設備上使用的場景也越來越多,例如 對 NFC TAG 的讀寫,對 NFC+藍牙 耳機音響的支持,還有手機和手機之間的數據交換場景。

說起NFC這項技術其實也不算新奇了,許多手機都支持例如,Nokia、三星、SONY、HTC、小米都有機型硬件支持NFC的功能。在應用商店中搜索NFC也可以找到不少 NFC 相關的應用,但是目前來講使用率還是個問題,不管怎樣今天我還是想在這裡為大家 分享一下在 Windows Phone 平台中對NFC功能的技術支持情況。對不對的請大家參考一下,多多提些意見。

從NFC在手機上支持的場景上看大致分為三種模式(點對點模式,主動模式,被動模式)

首先說一下點對點模式,點對點模式實際上就是在兩台手機上都同時打開NFC後,將手機進行觸碰(實現 Touch and Connect就是一個典型場景),通過NFC的數據交換,可以引導不同設備進行連接,例如應用和應用間的 Socket,藍牙耳機、音響 (基於藍牙配對)。這部分內容請參考我之前的文章 近場通信 NFC / Bluetooth Proximity

 

主動模式 (讀/寫 卡模式) 就是在移動設備中NFC模塊產生射頻場從外部采用相同標准的NFC標簽中讀寫數據。這裡面有一個典型的使用場景就是在Android手機上使用支付寶為公交卡充值。

特需NXP PN547芯片 只要配置此種芯片的手機就可以實現 多種協議的NFC卡片交互例如:MIFARE Classic/Ultralight/DESfire 如果我沒記錯的話 公交卡是第一種。目前在Windows Phone 家族中使用此種芯片的設備有 (Lumia 830 & 73x)

這裡我列舉一個 Sample Code, 由於本人手上木有這新款設備暫時沒有上手測試過,不過憑直覺看上去問題不大。(如果有測試設備或者有開發過Android類似應用的大牛,還請幫忙測試一下,很願意和大家一起研究這部分功能)這裡還有一個CodePlex上的開源項目用於介紹這部分功能:NFC Smart Card Reader PC/SC Library

public async void TestNFC()
        {
            string selector = SmartCardReader.GetDeviceSelector();
            var deviceInfoCollection = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(selector, null);
 
            if (deviceInfoCollection.Count != 0)
            {
                var scReader = await Windows.Devices.SmartCards.SmartCardReader.FromIdAsync(deviceInfoCollection[0].Id);
 
                scReader.CardAdded += async (s, c) =>
                    {
                        SmartCard sc = c.SmartCard;
                        SmartCardStatus scStatus = await sc.GetStatusAsync();
                        if (scStatus == SmartCardStatus.Ready) // This Check is not needed.
                        { 
                            SmartCardConnection scConn = await c.SmartCard.ConnectAsync();
                            scConn.TransmitAsync(/*APDU command*/); // You can send the command and receive the response from Device
                        }
                    };
            }
        }

被動模式(卡模擬 - Card Emulation),顧名思義就是將具備NFC功能的手機模擬成一張消費/會員/銀行/等。卡片進行數據(花)交互(錢)。談到跟錢相關的交互不得不提的一個名詞就是 NFC- Secure Element 既: NFC–SE 這個SE我們可以簡單的理解成是我們在網上消費時使用網銀過程中讓我們插入電腦USB接口中的U盾。 這裡存有用戶支付相關的安全信息,需要由單獨的設備保存。目前在所有手機平台中做法分為三種:

第一種,獨立存儲芯片(全終端的解決方案 - Embedded),例如蘋果設備(iP6 用戶的指紋等安全信息是保存在獨立的芯片當中),提供最高安全級別的權限,並且會開發部分SDK給 MO,銀行,及開發者。

第二種,SWP(Single Wire Protocol - UICC)其中還有 eNFC、NFC-SIM 其實都是可以將安全信息寫在 SIM 卡中,例如 現在中國移動有一種NFC-SIM卡就是這種解決方案,實現了公交卡刷卡乘坐地鐵和公交的功能,其他三方應用需要和中國移動這樣的運營商合作才能使用這類的 SE 進行消費驗證。

第三種,NFC-SD 如果嚴格說NFC-SD 也是SWP的一種,為什麼把它單獨拿出來的原因是他與SIM的SE相比更為靈活。不會受到MO的制約,受到銀行的認可(因為每個銀行本來就是有自己的U盾麼),但是 NFC –SD 的短板也非常明顯,首先不是所有所有的手機都支持SD卡的SE,另外面對不同的消費的模擬需要更換不同的SD卡對於用戶來說還是太挑戰了,所以沒有廣泛的使用起來。

所以綜上所述,手機內獨立芯片的場景目前應該是 Apple 在嘗試走的路,SWP(NFC-SIM)使用較為多的一種在Windows Phone 中同樣也是支持的,對於NFC Emulation的開發內容就會牽扯到手機對UICC SE (Universal Integrated Circuit Card)的操作,這裡需要開發者如果要完整SE的支付是需要和 運營商(MO) 的開發者一同完成整個購買流程,另外如果是MO自己的應用有些操作內容是需要MO權限才可以例如:更新部分SE內容。(這部分內容我暫時也沒有試過,如果有MO開發者想做WP上的內容歡迎聯系,我們一起研究探討)微軟對於如何申請MO權限以及如何UICC SE內容也有一個指導書大家可以參考一下。總的來說還是要申請權限建立信任證書,然後根據MO的信任機制進行開發流程:

參考:App development guide for UICC based NFC card emulation for Windows Phone 8.1

image

從實現場景上看目前中國移動以及和多家進行了合作例如

北京市政公交一卡通

image

銀行的閃付

image

今天我在這裡只是為大家介紹了一下NFC支付相關內容,在 Windows Phone 8.1 也是具備 讀卡,刷卡,支付 等場景的,希望大家了解了這部分內容後可以結合自己好的想法做出更好的應用,相信今後是一定會迎來一個NFC時代的到來大家趕快行動起來吧:)

希望上的總結可以幫助到大家, 同時歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved