如何使用Core NFC获取NFC标签的ID(而不是消息有效负载的ID)?
我正在寻找与Android中存在的此功能类似的内容:https://developer.android.com/reference/android/nfc/Tag.html#getId()
答案 0 :(得分:2)
使用_foundTags 将导致拒绝:
1.2二进制被拒绝
准则2.5.1 - 性能 - 软件要求
您的应用使用或引用了以下非公开API:
_foundTags
App Store上不允许使用非公共API,因为 如果这些API发生变化,它可能会导致糟糕的用户体验。
在未来的提交中继续使用或隐藏非公共API 此应用程序可能会导致Apple Developer终止 帐户,以及从App Store删除所有相关应用程序。
后续步骤
如果您使用的是第三方库,请尽快更新 这些库的最新版本。如果您没有访问权限 库'来源,您可以使用搜索已编译的二进制文件 "字符串"或" otool"命令行工具。 "字符串"工具可以 输出库调用的方法列表和" otool -ov" 将输出Objective-C类结构及其定义的结构 方法。这些工具可以帮助您缩小问题所在 代码驻留。您也可以使用" nm"用于验证是否有任何工具 第三方库正在调用这些API。
资源
有关" nm"的信息工具,请查看" nm工具" Xcode中 手册页。
如果没有提供应用功能的替代方案 要求,您可以提交增强请求。
答案 1 :(得分:0)
以下是如何实现它的方法。 但请记住,它使用的是私有函数,可以随时由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;
}