有讀者反映,叫我寫(xiě)點(diǎn)干貨,其實(shí)我是不建議寫(xiě)干貨的,至少你得自己想想,那怕你自己在著急。(也要把思路想清楚)。
NFC 功能,使用話必須要是IOS 11 和xcode的9,xcode9是自帶Corenfc框架的, !官網(wǎng)上說(shuō)的是7 和7plus 才支持,目前沒(méi)有測(cè)試其他的手機(jī)。
7plus 經(jīng)過(guò)測(cè)試 是可以用的,7 也是可以用的。。

1.首先在去自己的集團(tuán)賬戶(hù)里面建立,一個(gè)Bundle id! 和自己的工程同步,打開(kāi)NFC 功能。(跟APP推送在一起那個(gè)選項(xiàng)。如果是公司的話,可以直接不管)
2.點(diǎn)擊targets ->Capabilties->開(kāi)發(fā)(下圖)


發(fā)開(kāi)app Groups 會(huì)出現(xiàn)一個(gè)這個(gè),這個(gè)是設(shè)置 讀取模式的。在這個(gè)plist 里面填寫(xiě)一個(gè)數(shù)組為Near Field Communication Tag Reader Session Formats,然后加一個(gè)item


在info.pilst填寫(xiě)

上面報(bào)錯(cuò),是因?yàn)槲覜](méi)真機(jī),可以忽略。
下面我自己寫(xiě)了一個(gè)Dome, 是本地HTML 加載 ,通過(guò)HTML 與IOS交互,整塊都是在一個(gè)webview上實(shí)現(xiàn)的, 效果 APP讀取一個(gè)網(wǎng)址,HTML調(diào)用IOS NFC,然后讀取nfc鏈接跳轉(zhuǎn)循環(huán)。
這個(gè)我把NFC的功能封裝到一個(gè)NFCMangage 里面,只管調(diào)用就好了。我也嘗試寫(xiě)了一個(gè)swfit版本的! 也能夠使用!
NFCMangage.h文件
@interface NFCMangage : NSObject
@property (nonatomic,copy) void(^blcokNFC)(NSString *);
- (void)NFCReadText;
@property (nonatomic,copy) NSString *packNFC;
@end
NFCMangage.m文件
導(dǎo)入nfc框架,開(kāi)始使用。
import <CoreNFC/CoreNFC.h>
@interface NFCMangage()<NFCNDEFReaderSessionDelegate, NFCReaderSessionDelegate>
@property (strong, nonatomic) NFCNDEFReaderSession *session;
@property (strong, nonatomic) NSMutableArray *dataAry;
@end
@implementation NFCMangage
-
( void)NFCReadText{
[self.session invalidateSession];self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:self
queue:nil
invalidateAfterFirstRead:NO];
//判斷是否支持NFC
[self.session beginSession];
}
pragma mark - NFCReaderSessionDelegate
(void)readerSessionDidBecomeActive:(NFCReaderSession *)session
{
NSLog(@"NFC會(huì)話已激活");
if (session.isReady) {
NSLog(@"NFC已準(zhǔn)備好");
} else {
}
}(void)readerSession:(NFCReaderSession *)session
didDetectTags:(NSArray<__kindof id<NFCTag>> *)tags
{
NSLog(@"掃描到TAG數(shù)據(jù)");
}
pragma mark - NFCNDEFReaderSessionDelegate
-
(void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error
{
// 讀取失敗
NSLog(@"error=%@",error);
if (error.code == 201) {
NSLog(@"掃描超時(shí)");}
if (error.code == 200) {
NSLog(@"取消掃描");}
if (error.code == 204) {
NSLog(@"204錯(cuò)誤");
}
} -
(void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages
{
// 讀取成功
NSString *stringNFC;
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); stringNFC = [[NSString alloc] initWithData:payload encoding:NSUTF8StringEncoding]; }}
self.packNFC = stringNFC;
}
manage.m文件全部代碼,就這么點(diǎn),就可以使用了。是不是很簡(jiǎn)單。
HTML的與OC的交互就不貼代碼了。????