如何使用 Core NFC 获取 NFC 标签的 ID(而不是消息有效负载的 ID)?
我正在寻找与 Android 中存在的此功能类似的东西:https://developer.android.com/reference/android/nfc/Tag.html#getId()
如何使用 Core NFC 获取 NFC 标签的 ID(而不是消息有效负载的 ID)?
我正在寻找与 Android 中存在的此功能类似的东西:https://developer.android.com/reference/android/nfc/Tag.html#getId()
使用 _foundTags会导致拒绝:
1.2 二进制拒绝
指南 2.5.1 - 性能 - 软件要求
您的应用使用或引用以下非公共 API:
_foundTags
App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。
在未来提交此应用程序时继续使用或隐藏非公开 API 可能会导致您的 Apple Developer 帐户被终止,以及从 App Store 中删除所有相关应用程序。
下一步
如果您使用第三方库,请更新到这些库的最新版本。如果您无权访问库的源代码,则可以使用“strings”或“otool”命令行工具搜索已编译的二进制文件。“strings”工具可以输出库调用的方法列表,“otool -ov”将输出Objective-C类结构及其定义的方法。这些工具可以帮助您缩小有问题的代码所在的位置。您还可以使用“nm”工具来验证是否有任何第三方库正在调用这些 API。
资源
有关“nm”工具的信息,请查看“nm 工具”Xcode 手册页。
如果没有其他方法可以提供您的应用所需的功能,您可以提交增强请求。
这是实现它的方法。但请记住,它使用私有功能,Apple 可以随时删除/更改该功能,并可能导致 AppStore 拒绝。
在我的应用程序中测试,它现在适用于 iOs 11.1
消息来源:
https://github.com/hansemannn/iOS11-NFC-Example/issues/16
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
let uid : String = getTagIdFromSession(session: session)
//Do what you want with the UID
}
func getTagIdFromSession(session : NFCNDEFReaderSession) -> String{
var uid: String = ""
if(session.value(forKey: "_foundTags") != nil) {
let foundTags : NSArray = session.value(forKey: "_foundTags") as! NSArray
if(foundTags.count > 0) {
let tag : NSObject = foundTags.firstObject as! NSObject;
if(tag.value(forKey: "_tagID") != nil) {
var uuidPadded : Data = tag.value(forKey: "_tagID") as! Data
//We reverse the order
for (i,_) in uuidPadded.enumerated() {
uuidPadded.insert(uuidPadded.remove(at:i),at:0)
}
for (_, element) in uuidPadded.enumerated() {
let tag : String = String(element, radix:16)
//We add the missing 0 in case the number is < 10. It can be done with bitwise operations too.
if(tag.length < 2) {
uid.append("0"+tag)
}
else {
uid.append(tag)
}
}
}
}
}
return uid;
}