有讀者反映冯遂,叫我寫點(diǎn)干貨蕊肥,其實(shí)我是不建議寫干貨的,至少你得自己想想蛤肌,那怕你自己在著急壁却。(也要把思路想清楚)。
NFC 功能寻定,使用話必須要是IOS 11 和xcode的9儒洛,xcode9是自帶Corenfc框架的, 狼速!官網(wǎng)上說的是7 和7plus 才支持琅锻,目前沒有測試其他的手機(jī)。
7plus 經(jīng)過測試 是可以用的向胡,7 也是可以用的恼蓬。。
1.首先在去自己的集團(tuán)賬戶里面建立僵芹,一個(gè)Bundle id处硬! 和自己的工程同步,打開NFC 功能拇派。(跟APP推送在一起那個(gè)選項(xiàng)荷辕。如果是公司的話,可以直接不管)
2.點(diǎn)擊targets ->Capabilties->開發(fā)(下圖)
發(fā)開app Groups 會(huì)出現(xiàn)一個(gè)這個(gè)件豌,這個(gè)是設(shè)置 讀取模式的疮方。在這個(gè)plist 里面填寫一個(gè)數(shù)組為Near Field Communication Tag Reader Session Formats,然后加一個(gè)item
在info.pilst填寫
上面報(bào)錯(cuò)茧彤,是因?yàn)槲覜]真機(jī)骡显,可以忽略。
下面我自己寫了一個(gè)Dome曾掂, 是本地HTML 加載 惫谤,通過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)用就好了富岳。我也嘗試寫了一個(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框架,開始使用蚁飒。
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),就可以使用了淮逻。是不是很簡單琼懊。
HTML的與OC的交互就不貼代碼了。????