gpt4 book ai didi

ios - 如何在 iOS 中格式化空 (NDEFFormatable) NFC 标签

转载 作者:行者123 更新时间:2023-11-29 05:15:19 30 4
gpt4 key购买 nike

我目前正在使用一些 NFC 标签和 iOS 13。

一个问题是,我的一些 NFC 标签以 NDEFFormatable 形式提供。我知道我必须先格式化标签才能使用 NDEF。我可以使用第三方 Android 应用程序来做到这一点。但我怎样才能用我自己的 iOS 应用程序做到这一点呢?目前该标签被识别为“ISO15693”标签,queryNDEFStatus 方法的结果为 .notSupported

我还尝试向该 NFC 标签写入一条空消息,但 iOS 响应错误“NDEF 标签为只读”

据我所知,您喜欢在此处添加一些代码,其中重要部分为:

session = NFCTagReaderSession(pollingOption: [.iso14443, .iso15693], delegate: self)
session?.alertMessage = "Bitte halten Sie das Gerät an den zu scannenden NFC Tag"
session?.begin()

...

func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {

if tags.count > 1 {
// Restart polling in 500ms
let retryInterval = DispatchTimeInterval.milliseconds(500)
session.alertMessage = "Mehr als 1 NFC Tag gefunden. Bitte scannen Sie jeden Tag einzeln."
DispatchQueue.global().asyncAfter(deadline: .now() + retryInterval, execute: {
session.restartPolling()
})
return
}

let tag = tags.first!

// Connect to the found tag and perform NDEF message reading
session.connect(to: tag) { (error: Error?) in

if nil != error {
session.invalidate(errorMessage: "NFC Tag konnte nicht gelesen werden")
return
}

if case let NFCTag.iso15693(iso15693Tag) = tag{

iso15693Tag.queryNDEFStatus(completionHandler: { (ndefStatus: NFCNDEFStatus, capacity: Int, error: Error?) in

guard error == nil else {
session.invalidate(errorMessage: "Status des Tags konnte nicht gelesen werden")
return
}

switch ndefStatus {
case .notSupported:

//NDFEFFormatable tag is handled here !!!!

session.alertMessage = "Der Tag unterstützt das NFC Data Exchange Format (NDEF) nicht!"
session.invalidate()
case .readOnly:
//read tag
case .readWrite:
//read or write tag
@unknown default:
session.alertMessage = "Unbekannter Status"
session.invalidate()
}
})
} else if case let NFCTag.miFare(miFareTag) = tag { //check if we have a MiFare Tag
//other type of tags

} else {
session.invalidate(errorMessage: "Dieser Tag wird aktuell leider nicht unterstützt")
return
}
}
}

最佳答案

一些消息来源称 iOS 只能使用已经格式化的卡

https://help.gototags.com/article/nfc-tag-encoding-iphone/

但是您也许可以使用低级命令来编写正确的 block 来自己格式化卡。

您没有指定卡的类型,因此假设它是类型 2 http://apps4android.org/nfc-specifications/NFCForum-TS-Type-2-Tag_1.1.pdf (如果不是,其他规范位于 http://apps4android.org/nfc-specifications/ )

但可能更像是 Type 5 卡,我无法访问其规范,但可以将 Type 5 作为 Type 2 执行类似的操作(您可以使用各种 Android 应用程序,例如 NXP 的 Taginfo 应用程序来比较格式化的NDEF V 型标签和未格式化的标签,看看它是否也是 V 型卡上的 block 3 和 4)

但对于类型 2

第 6.4.1 节显示了它如何检测它是 NDEF 格式的卡。

对于 Type 2 卡,Block 03 必须具有 4 字节的 NDEF 能力容器,很多卡在出厂时都有此预设,如果没有,则需要将 4 字节能力容器写入 block 03。

容器格式在规范中,但下面是摘要:-

字节 0 = E1h 表示 NDEF 数据存在于标签内

字节 1 = 10h 表示支持映射文档的版本 1.0(主编号 1h,次编号 0h)(即本规范的版本)。 - 1.0 版是我认为的最新版本。

字节 2 = 数据区域的大小,因此卡特定值,但该值是数据区域大小除以 8 并以十六进制表示。例如128字节数据存储指示值等于10h

字节 3 = 关于安全性,值 0h 表示授予写入访问权限,但没有任何安全性


然后你需要格式化卡,用一个空白的TLV消息来 block 4来格式化卡。

block 4 中的空白 TLV 消息是

字节 0 = 03h

字节 1 = 00h

字节 2 = FEh

这基本上等同于开始 NDEF 消息、消息大小为零、结束 NDEF 消息。


我没有在 iOS 上做过任何这些,但似乎 iOS 确实提供了 ISO15693 标签的低级读写访问

https://developer.apple.com/documentation/corenfc/nfciso15693tag/3043817-writesingleblock

关于ios - 如何在 iOS 中格式化空 (NDEFFormatable) NFC 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59247414/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com