NFC读者写入器
描述
NFC读者写入器支持通过iOS设备读取NFC芯片中的数据(iOS 11)、向NFC芯片写入数据(iOS 13)以及读取NFC标签信息(iOS 13)。适用于Swift和Objective-C。
安装
CocoaPods
pod 'NFCReaderWriter'
Carthage
github "janlionly/NFCReaderWriter"
Swift 包管理器
- iOS: 打开 Xcode,文件 -> Swift 包,搜索输入 https://github.com/janlionly/NFCReaderWriter.git,然后选择升级到下一个主要版本 1.1.3
- 或者在你的
Package.swift
中添加依赖项 - 或者在你的
.package(url: "https://github.com/janlionly/NFCReaderWriter.git", .upToNextMajor(from: "1.1.3")),
用法
-
将你的配置文件设置为支持 近距离通信标签读取;
-
打开你的项目目标,在 签名 & 能力 选项卡中,添加 近距离通信标签读取 能力;
-
请记住在你的 Info.plist 中添加 NFCReaderUsageDescription 键进行描述。
-
支持读取标签标识符(iOS 13),你应该将你的 NFC 标签类型描述添加到你的 Info.plist 中。
(例如:com.apple.developer.nfc.readersession.felica.systemcodes,com.apple.developer.nfc.readersession.iso7816.select-identifiers)
更多信息请运行上面的示例。
// Updated: add alertMessage property when detected NFC successfully
readerWriter.detectedMessage = "Your Read/Write NFC successful content."
/// ----------------------
/// 1. NFC Reader(iOS 11):
/// ----------------------
// every time read NFC chip's data, open a new session to detect
readerWriter.newReaderSession(with: self, invalidateAfterFirstRead: true, alertMessage: "Nearby NFC Card for read")
readerWriter.begin()
// implement NFCReaderDelegate to read NFC chip's data
func reader(_ session: NFCReader, didDetectNDEFs messages: [NFCNDEFMessage]) {
for message in messages {
for (i, record) in message.records.enumerated() {
print("Record \(i+1): \(String(data: record.payload, encoding: .ascii))")
// other record properties: typeNameFormat, type, identifier
}
}
readerWriter.end()
}
/// ----------------------
/// 2. NFC Writer(iOS 13):
/// ----------------------
// every time write data to NFC chip, open a new session to write
readerWriter.newWriterSession(with: self, isLegacy: true, invalidateAfterFirstRead: true, alertMessage: "Nearby NFC Card for write")
readerWriter.begin()
// implement NFCReaderDelegate to write data to NFC chip
func reader(_ session: NFCReader, didDetect tags: [NFCNDEFTag]) {
// here for write test data
var payloadData = Data([0x02])
let urls = ["apple.com", "google.com", "facebook.com"]
payloadData.append(urls[Int.random(in: 0..<urls.count)].data(using: .utf8)!)
let payload = NFCNDEFPayload.init(
format: NFCTypeNameFormat.nfcWellKnown,
type: "U".data(using: .utf8)!,
identifier: Data.init(count: 0),
payload: payloadData,
chunkSize: 0)
let message = NFCNDEFMessage(records: [payload])
readerWriter.write(message, to: tags.first!) { (error) in
if let err = error {
print("ERR:\(err)")
} else {
print("write success")
}
self.readerWriter.end()
}
}
/// -------------------------
/// 3. NFC Tag Reader(iOS 13)
/// -------------------------
readerWriter.newWriterSession(with: self, isLegacy: false, invalidateAfterFirstRead: true, alertMessage: "Nearby NFC card for read tag identifier")
readerWriter.begin()
// implement NFCReaderDelegate to read tag info from NFC chip
func reader(_ session: NFCReader, didDetect tag: __NFCTag, didDetectNDEF message: NFCNDEFMessage) {
let tagId = readerWriter.tagIdentifier(with: tag)
let content = contentsForMessages([message])
DispatchQueue.main.async {
self.tagIdLabel.text = "Read Tag Identifier:\(tagId.hexadecimal)"
self.tagInfoTextView.text = "TagInfo:\n\(tagInfosDetail)\nNFCNDEFMessage:\n\(content)"
}
self.readerWriter.end()
}
/// --------------------------------
/// other NFCReaderDelegate methods:
/// --------------------------------
func readerDidBecomeActive(_ session: NFCReader) {
print("Reader did become")
}
func reader(_ session: NFCReader, didInvalidateWithError error: Error) {
print("ERROR:\(error)")
}
要求
- iOS 11.0+
- Swift 4.2 到 5.2
作者
访问我的 GitHub: janlionly
通过电子邮件与我联系: [email protected]
贡献
我非常希望你能为 NFCReaderWriter 贡献。
许可证
NFCReaderWriter 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。