在 Apple Developer 网站中,创建一个新的 App ID 并确保 NFC Tag Reading 已启用。
将以下行添加到您的 .plist 文件中:
<key>NFCReaderUsageDescription</key>
<string>NFC Tag!</string>
这些到权利文件:
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
在相应的文件中应该是这样的:
Core NFC 也可以通过 Xcode 中的 Capabilities 选项卡启用。
目标-c
导入CoreNFC
#import <CoreNFC/CoreNFC.h>
并设置委托:
@interface YourViewController : UIViewController <NFCNDEFReaderSessionDelegate>
在 viewDidLoad 中:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NFCNDEFReaderSession *session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT) invalidateAfterFirstRead:NO];
[session beginSession];
}
在委托回调中:
- (void) readerSession:(nonnull NFCNDEFReaderSession *)session didDetectNDEFs:(nonnull NSArray<NFCNDEFMessage *> *)messages {
for (NFCNDEFMessage *message in messages) {
for (NFCNDEFPayload *payload in message.records) {
NSLog(@"Payload data:%@",payload.payload);
}
}
}
您还必须添加 didInvalidateWithError 委托回调,否则您将不符合协议:
- (void)readerSession:(nonnull NFCNDEFReaderSession *)session didInvalidateWithError:(nonnull NSError *)error {
}
您可以通过以下方式阻止读者:
[session invalidateSession];
斯威夫特 3/4
导入CoreNFC
import CoreNFC
并设置委托:
class YourViewController: UIViewController, NFCNDEFReaderSessionDelegate
在 viewDidLoad 中:
override func viewDidLoad() {
super.viewDidLoad()
let session = NFCNDEFReaderSession(delegate: self,
queue: DispatchQueue(label: "queueName", attributes: .concurrent), invalidateAfterFirstRead: false)
session?.begin()
}
在委托回调中:
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
for message in messages {
for record in message.records {
print(record.payload)
}
}
}
您可以通过以下方式阻止读者:
session.invalidateSession
用法
启动视图后,您应该会立即看到 iOS NFC 阅读器对话框,如下所示:
出现此对话框后,您有大约一秒钟的时间将 iPhone 放在您要读取的 NFC 标签附近。否则,该字段将被停用(这似乎是 Apple 的错误)。我经常需要取消并重试以获得一致的读数。 More details here。