Как получить идентификатор тега в ядре NFC
Как я могу получить идентификатор тега NFC (не идентификатор полезной нагрузки сообщения), используя Core NFC?
Я ищу что-то похожее на эту функцию, которая существует в Android: https://developer.android.com/reference/android/nfc/Tag.html
2 ответа
Использование _foundTags приведет к отклонению:
1.2 Двоичные отклонены
Руководство 2.5.1 - Производительность - требования к программному обеспечению
Ваше приложение использует или ссылается на следующие непубличные API:
_foundTags
Использование закрытых API-интерфейсов в App Store запрещено, так как это может привести к ухудшению работы пользователей в случае изменения этих API.
Продолжение использования или сокрытие непубличных API в будущих представлениях этого приложения может привести к удалению вашей учетной записи Apple Developer, а также удалению всех связанных приложений из App Store.
Следующие шаги
Если вы используете сторонние библиотеки, пожалуйста, обновите их до последней версии. Если у вас нет доступа к исходному коду библиотек, вы можете найти скомпилированный двоичный файл с помощью инструментов командной строки "strings" или "otool". Инструмент "strings" может выводить список методов, которые вызывает библиотека, а "otool -ov" будет выводить структуры классов Objective-C и их определенные методы. Эти инструменты могут помочь вам определить, где находится проблемный код. Вы также можете использовать инструмент "nm", чтобы проверить, вызывают ли эти API какие-либо сторонние библиотеки.
Ресурсы
Для получения информации об инструменте "nm", пожалуйста, просмотрите страницу руководства Xcode "nm tool".
Если нет альтернативы для предоставления функциональности, требуемой вашему приложению, вы можете подать запрос на расширение.
Вот как вы можете этого достичь. Но имейте в виду, что он использует частную функцию, которая может быть удалена / изменена Apple в любое время и может вызвать отказ от AppStore.
Протестировано в моем приложении, пока работает с iOs 11.1
Источники:
https://github.com/hansemannn/iOS11-NFC-Example/issues/16
https://github.com/chariotsolutions/phonegap-nfc/pull/287/files
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;
}