3

如何使用 Core NFC 获取 NFC 标签的 ID(而不是消息有效负载的 ID)?

我正在寻找与 Android 中存在的此功能类似的东西:https://developer.android.com/reference/android/nfc/Tag.html#getId()

4

2 回答 2

2

使用 _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 手册页。

如果没有其他方法可以提供您的应用所需的功能,您可以提交增强请求。

于 2017-11-16T06:42:12.340 回答
0

这是实现它的方法。但请记住,它使用私有功能,Apple 可以随时删除/更改该功能,并可能导致 AppStore 拒绝。

在我的应用程序中测试,它现在适用于 iOs 11.1

消息来源:

https://github.com/hansemannn/iOS11-NFC-Example/issues/16

https://github.com/chariotsolutions/phonegap-nfc/pull/287/files#diff-84fad93feff6a327c30a08cac8f546dfR171

        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;
        }
于 2017-10-20T12:57:44.787 回答