3 回答
TA贡献2003条经验 获得超2个赞
iPhone6 / 6s / 6 +不能读取无源NFC标签(也称为发现模式)。关于此主题的信息有很多,所以我想提供一些切实的信息供开发人员考虑。缺少NFC标签读取支持不是由于软件,而是由于硬件。要了解原因,您需要了解NFC的工作原理。NFC通过负载调制方式工作。这意味着询问器(PCD)发射出一个载波磁场,该磁场激励无源目标(PICC)。利用此载波场产生的电势,目标设备便能够解调来自询问器的数据,并通过在同一场上方调制数据来做出响应。这里的关键是目标永远不会创建自己的字段。
如果您查看iPhone6的拆解和零件清单,您会发现存在非常小的NFC环形天线以及AS3923升压器IC的使用。此设计旨在用于自定义microSD或SIM卡使旧手机可以付款。这是移动电话向高功率非接触式POS终端提供卡模拟凭据的应用程序的类型。POS终端充当读取器,借助AS3923芯片为iPhone6供电。AS3923框图清楚地显示了如何通过读取器设备提供的信号增强RX和TX调制。换句话说,iPhone6并不是要提供一个领域,而只是要对一个领域做出反应。这就是为什么它的设计仅用于NFC卡仿真以及Peer-2-Peer,但绝对不用于Discovery的原因。
AS3923升压器IC
使用HW配件通过iPhone6实现标签发现有多种选择。在这篇博客文章中,我将讨论这些集成以及开发人员如何设计解决方案。我们的低功耗阅读器设计为移动互动提供了有趣的机会,而很少有开发人员在考虑这些机会。
披露:我是TechStars公司Flomio,Inc.的创始人,该公司为从访问控制到付款的应用程序提供感应ID硬件,软件和服务。
更新:如果此传言属实,将为iPhone实际支持NFC标签发现模式提供可能性。全玻璃设计不会像当前iPhone的金属背面那样干扰NFC天线。我们已经在某些定制阅读器设计中尝试了这种设计方法(尽管使用了更便宜的材料),并获得了成功,因此我们期待这种改进。
更新:iOS11宣布支持iPhone7 / 7 +的“ NFC阅读器模式”。详细信息在这里。当应用程序在前台(无后台检测)时,API仅支持读取NDEF消息(无ISO7816 APDU)。由于将于2017年秋季发布...
TA贡献1946条经验 获得超4个赞
深入研究9月9日下午3:30之前可用的iOS 8文档,没有提到开发人员可以访问NFC控制器以执行任何NFC操作。其中包括读取标签,写入标签,配对,付款,标签仿真...借助NXP控制器,硬件具有执行这些功能的能力。他们确实提到了手表的第三方应用程序,该应用程序允许酒店住客使用NFC打开房间的门。这是NFC的经典用例,并表明NFC控制器将在某个时候向开发人员开放。请记住,该表不应该在2015年第一季度之前发布。因此,我现在说它已经关闭,但很快就会打开。鉴于“新”
披露:我是一家NFC公司GoToTags的首席执行官,该公司对苹果向开发人员开放NFC具有明显的既得利益。
-更正与更新-
酒店应用实际上使用蓝牙,而不是NFC。NFC仍然经常用于开门,只是在这一示例中不使用。如果手表的NFC控制器打开,则可以使用NFC。
我确实知道Apple意识到了所有这一切,并正在与其顶尖的开发人员和利益相关者进行讨论。由于缺乏对阅读标签的支持,已经出现了巨大的负面影响。与过去一样,我希望苹果最终向开发人员开放与非支付相关的功能(读取标签,配对)。我认为苹果不会允许其他钱包使用。文件共享也可能留给AirDrop。
经常有人要求我提供有关此主题的更新。随着Apple发布iPhone SE,许多人再次询问为什么Apple还不支持标签读取。总而言之,Apple目前比NFC的其他用例更关注成功的Apple Pay。苹果可以通过Apple Pay赚很多钱,而从NFC的其他用途中赚的钱更少。当苹果公司认为消费者对NFC和Apple Pay的信任和安全性不会给Apple Pay带来风险时,他们可能会开放NFC标签阅读功能。更多信息在这里。
希腊的一名开发人员入侵了iPhone 6s,使其能够通过NFC专用框架读取NFC标签。更多信息和视频。尽管这不是一个长期解决方案,但它为一个悬而未决的问题提供了一些指导:iPhone的NFC控制器中是否有足够的功率为NFC标签供电?看起来答案是肯定的。从最初的测试来看,范围是几厘米,还算不错。功率也可能是可调的。目前正在对此进行调查。这的意义是重大的。如果较旧型号的手机确实具有足够的射频功率用于标签读取/写入,那么当苹果确实打开SDK时,这意味着将有100M的iPhone可以读取NFC标签,而只有新的iPhone可以。
TA贡献1847条经验 获得超7个赞
读取NFC标签的功能已添加到iOS 11中,仅支持iPhone 7和7 plus
作为试驾,我做了这个回购
第一:我们需要启动NFCNDEFReaderSession类
var session: NFCNDEFReaderSession?
session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
然后,我们需要通过以下方式开始会话:
session?.begin()
并在完成后:
session?.invalidate()
委托(自己应实现)基本上具有两个功能:
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage])
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error)
这是我的参考苹果文档
- 3 回答
- 0 关注
- 702 浏览
添加回答
举报