iOS之NFC使用

CoreNFC沒有標志圖標,換上女神的

先了解幾個概念
什么是NFC?
NDEF指的是什么?
什么是CoreNFC?

什么是 NFC

NFC(Near Field Communication)即近距離無線通訊技術(shù)。該技術(shù)由飛利浦公司和索尼公司共同開發(fā),可以在移動設備、消費類電子產(chǎn)品、PC 和智能控件工具間進行近距離無線通信。NFC提供了一種簡單、觸控式的解決方案,可以讓消費者簡單直觀地交換信息、訪問內(nèi)容與服務。
NFC通信技術(shù),允許電子設備之間進行非接觸式點對點數(shù)據(jù)傳輸(在十厘米內(nèi))交換數(shù)據(jù)。這個技術(shù)由免接觸式射頻識別(RFID)演變而來,并向下兼容RFID,主要用于手機等手持設備中提供M2M(Machine to Machine)的通信。由于近場通訊具有天然的安全性。
NFC是一種短距高頻的無線電技術(shù),在13.56MHz頻率運行于10厘米距離內(nèi)。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。目前近場通信已通過成為ISO/IEC IS 18092國際標準、ECMA-340標準與ETSI TS 102 190標準。NFC采用主動和被動兩種讀取模式。
NFC的百度百科
NFC通信

模式圖

NDEF指的是什么?

NFC Data Exchange Format : NFC數(shù)據(jù)交換格式,NFC組織約定的NFC tag中的數(shù)據(jù)格式。
NDEF是輕量級的緊湊的二進制格式,可帶有URL、vCard和NFC定義的各種數(shù)據(jù)類型。
NDEF的由各種數(shù)據(jù)記錄組成,而各個記錄由報頭(Header)和有效載荷(Payload)組成,其中NDEF記錄的數(shù)據(jù)類型和大小由記錄載荷的報頭注明,這里的報頭包含3部分,分別為Length、Type和Identifier.。
NFC Data Exchange Format : NFC數(shù)據(jù)交換格式,NFC組織約定的NFC tag中的數(shù)據(jù)格式。NDEF修詳解

什么是CoreNFC?

CoreNFC是蘋果推出的支持NFC通訊的框架,僅支持裝有iOS 11的iPhone 7和iPhone 7Plus,Xcode 9 beta版。CoreNFC讀取的是NDEF標簽的數(shù)據(jù)。(吐槽下,為毛必須7以上的設備,這是又要換手機的節(jié)奏?。?/code>

iOS開發(fā)部分

首先

在你的開發(fā)者賬號里面添加上對NFC的支持:
(很簡單,只需要配置App ID支持NFC,更新Provisioning Profiles)

開發(fā)者賬號中設置
其次

在你的XCode中添加TARGETS->Capabilities中打開Near Field Communication Tag Reading選項,XCode會自動幫你添加其他步驟


Xcode.png
然后

在你Project的info.plist中添加:
Privacy - NFC Scan Usage Description
NFC usage description
com.apple.developer.nfc.readersession.formats
NDEF

<key>NFCReaderUsageDescription</key>
<string>NFC Test</string>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
      <string>NDEF</string>
</array>
info.png
最后

代碼上也很簡單

#import "SLViewController.h"
#import <CoreNFC/CoreNFC.h>

@interface SLViewController ()<NFCNDEFReaderSessionDelegate>
@property (strong, nonatomic) NFCNDEFReaderSession *session;
@end
//---------------------------
- (IBAction)NFCAction:(id)sender {
    [self coreNFCAlloc];
}
-(void)coreNFCAlloc{
    [self.session invalidateSession];//關(guān)閉以前的Session
    self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:self
                                                            queue:nil
                                         invalidateAfterFirstRead:NO];
    if (NFCNDEFReaderSession.readingAvailable) {
        self.session.alertMessage = @"把卡放到手機背面";
        [self.session beginSession];//啟動 Session
    } else {
        NSLog(@"此設備不支持NFC");
    }
}

#pragma mark - NFCNDEFReaderSessionDelegate
- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error{
    // 讀取失敗
    NSLog(@"%@",error);
    if (error.code == 201) {
        NSLog(@"掃描超時");
    }
    if (error.code == 200) {
        NSLog(@"取消掃描");
    }
}

- (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray*)messages
{
    // 讀取成功
    for (NFCNDEFMessage *msg in messages) {
        NSArray *ary = msg.records;
        for (NFCNDEFPayload *rec in ary) {
            
            NFCTypeNameFormat typeName = rec.typeNameFormat;
            NSData *payload = rec.payload;
            NSData *type = rec.type;
            NSData *identifier = rec.identifier;
            
            NSLog(@"TypeName : %d",typeName);
            NSLog(@"Payload : %@",payload);
            NSLog(@"Type : %@",type);
            NSLog(@"Identifier : %@",identifier);
        }
    }
}

注意:
1.開啟一個session,并且同時只能開啟一個
2.App完全在前臺模式,切入后臺失效
3.session最多掃存活60s,超時必須重啟新session

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文鏈接: http://fighting300.com... 大家可能聽過NFC這項功能,或者有可能你每天都在使...
    fighting300閱讀 4,761評論 10 8
  • NFC 基礎 本文檔介紹了在Android上的基本的NFC任務。它說明了如何發(fā)送和接收的NDEF消息(NDEF m...
    張云飛Vir閱讀 3,280評論 0 52
  • 本篇文章共分為三個部分,讀者可根據(jù)需要直接閱讀對應部分: 1. iOS 對NFC支持的現(xiàn)狀 2.NFC基本概念與相...
    Cstars閱讀 11,791評論 3 9
  • Guide to BluetoothSecurity原文 本出版物可免費從以下網(wǎng)址獲得:https://doi.o...
    公子小水閱讀 8,743評論 0 6

友情鏈接更多精彩內(nèi)容