长时间伏案工作后,脖子和肩膀总有一种说不出的酸胀感,相信很多办公族都有同感。最近入手了一台米家智能肩颈仪,除了传统的多模式按摩和温感热敷之外,最吸引我的是它支持 NFC 一碰连功能:手机靠近设备,就能直接唤起米家 App 进入控制页面,不用再每次打开 App 去寻找设备、重新配对。作为一个平时写 IoT 和嵌入式相关文章的博主,我很快就对这条 NFC 链路产生了兴趣。这篇文章就来拆解一下, NFC 一碰连背后到底发生了什么,以及如何在手机上读取这类设备的 NFC 标签信息。
文章会从技术原理入手,覆盖 NFC 通信模式、NDEF 数据格式、米家 App 的绑定流程、按摩仪模式与热敷功能的实现思路,最后给出实际的 NFC 标签读取实验、常见问题排查和工程安全建议。无论你是刚入手这台设备的新手,还是正在做智能硬件 NFC 接入的开发者,都能在这篇文章里找到可以落地的内容。
1. 背景:智能肩颈仪与 NFC 一碰连能带来什么
1.1 米家智能肩颈仪是一款什么样的设备
米家智能肩颈仪本质上是一款便携式可穿戴按摩设备,面向办公、居家、差旅等场景,核心功能是用低频电脉冲模拟人手按摩,配合温感热敷来放松斜方肌和肩颈肌肉群。这类产品在硬件上通常包含电极片、加热膜、温度传感器、主控 MCU、锂电池以及无线通信模块。由于米家生态的关系,设备可以通过米家 App 完成联网绑定、模式切换、强度调节和固件升级。
从产品描述来看,它宣传了“9 种模式 + 温感热敷”的组合能力。所谓 9 种模式,并不是指 9 个完全独立的按摩种类,而是通过对电脉冲的频率、脉宽、占空比和输出波形做不同组合,模拟出揉捏、推拿、敲击、指压等不同手感。用户可以在米家 App 里直接选择模式,也可以通过设备机身上的按键快速切换,而 NFC 一碰连解决的则是“打开 App 到进入控制页”这个过程,它节省的是操作路径,而不是按摩本身。
1.2 NFC 一碰连解决了什么痛点
用过智能家居设备的人应该都有体会,传统配网流程往往是:打开 App → 手动添加设备 → 搜索附近设备 → 输入 Wi-Fi 密码 → 等待配网成功。对于一台肩颈按摩仪来说,这个流程在“第一次使用”之后,还会在每次需要控制时重复出现。尤其是家里有多人共用一台设备时,每个家庭成员都要在 App 里找到对应设备,再等待连接状态刷新,体验并不理想。
NFC 一碰连的出现,把整个操作压缩成了两步:手机 NFC 区域靠近设备上的标签区域,手机自动识别标签内容并唤起米家 App,App 直接定位到对应设备的控制面板。如果手机 NFC 功能未开启,或者设备标签区域没有对准,才需要退回手动方式。这个“近距离触碰触发”的交互模式,天然适合按摩仪这类需要被家庭成员频繁切换控制的设备,也符合智能家居追求的低门槛、快启动理念。
1.3 这篇文章适合谁
这篇文章适合三类读者。第一类是刚入手米家智能肩颈仪的普通用户,你可以通过文章了解设备绑定、NFC 一碰连的正确姿势,以及遇到连接失败时如何排查。第二类是智能硬件和 IoT 开发者,你可以在第 5 章看到读取 NFC 标签和解析 NDEF 记录的完整代码,理解一个米家设备是怎么通过 NFC 标签被手机识别出来的。第三类是对 NFC 安全性感兴趣的技术人员,第 7 章会讨论 NFC 标签被复制、中继攻击等风险,以及工程上如何规避这些风险。
2. NFC 技术基础:一碰连背后的工作原理
2.1 NFC 的三种工作模式
NFC(Near Field Communication,近距离无线通信)是一种基于 13.56MHz 频率的短距离通信技术,有效通信距离通常在 4 厘米以内。它在手机上的应用可以分成三种模式。
第一种是读卡器模式,手机主动发出射频场,读取附近 NFC 标签或卡片中的数据,这是 NFC 一碰连最核心的模式。第二种是卡模拟模式,手机本身模拟成一张 NFC 卡片,比如公交卡、门禁卡、支付卡,由外部读卡器来读取手机。第三种是点对点模式,两台 NFC 设备之间直接交换数据,比如早期的 Android Beam 文件传输。
米家智能肩颈仪的 NFC 一碰连,走的正是读卡器模式。设备内部放置了一个无源的 NFC 标签,标签自身不供电,依靠手机发出的射频能量激活。手机读取到标签里的 NDEF 消息后,会根据消息内容决定是打开 App 还是跳转网页。整个过程中,设备本身并不参与 NFC 通信,NFC 标签只是扮演了一个“身份名片”的角色。
2.2 NDEF 数据格式到底是什么
NFC 标签里存储的数据不是普通文本那么简单,它遵循 NFC Forum 定义的 NDEF(NFC Data Exchange Format)标准。一条 NDEF 消息由若干条 NDEF 记录组成,每条记录包含以下几部分:记录头(含 TNF 类型名格式、记录类型长度、负载长度等)、记录类型(如 URI、Text、MIME、App 数据)、以及最终的负载数据。
当手机读取到一条 URI 类型的 NDEF 记录时,系统会解析出其中的链接并交给浏览器或对应 App;当读取到 App 专属记录时,系统可以直接唤起指定 App 并传递参数。米家类设备常用的做法,是在出厂时往 NFC 标签写入一个指向米家服务域的链接,或者一个带设备标识的跳转协议。
以常见的 NTAG213 / NTAG215 标签为例,存储器按 4 字节一页划分,前几页是系统区,包含 UID、循环冗余校验字节 BCC0、内部字节以及能力容器 CC。理解这类标签的页结构,对后面“读取设备 NFC 信息”的实验会有帮助。
| 页地址 | 主要内容 | 说明 |
|---|---|---|
| 第 0 页 | UID0-UID3 | 标签唯一标识的前 4 字节 |
| 第 1 页 | UID4-UID7 + BCC0 | UID 剩余字节和校验字节 |
| 第 2 页 | 内部数据 | 厂商写入,通常只读 |
| 第 3 页 | CC 能力容器 | 表示标签类型与可用内存 |
| 第 4 页起 | 用户数据 | 存放 NDEF 消息、锁定位等 |
需要注意的是,不同型号标签的页数量、可用内存大小不同,但“前几页系统区 + 后续用户区”的结构是 NFC Type 2 标签的通用设计。这也是为什么在搜索 NFC 资料时,会经常看到 page0、page1、page2、page3 这类表达。
2.3 一次完整的“一碰连”过程
把手机靠近肩颈仪上印有 NFC 标识的区域,背后其实发生了一连串动作。
第一步,手机 NFC 控制器检测到标签并完成防碰撞流程,拿到标签 UID。第二步,手机根据标签支持的协议栈读取 NDEF 消息。第三步,系统解析 NDEF 记录:如果是 URI 记录,会尝试根据配置打开对应 App 或浏览器;如果是 App 专属记录,则直接唤起包名匹配的 App。第四步,米家 App 启动后,根据 NFC 消息中携带的设备标识,向云端查询设备信息,再通过蓝牙或局域网与设备建立数据通道。第五步,控制面板加载成功,用户可以切换模式、调节力度和热敷温度。
从这里可以看出,NFC 一碰连只是解决了“如何快速把手机带到正确的控制页”这个问题,真正的设备控制仍然依赖米家 App 与设备之间的蓝牙或网络连接。所以当你发现 NFC 能打开 App,但设备依然显示离线时,问题往往出在后半段连接链路上,而不是 NFC 标签本身。
3. 环境准备与米家 App 配置
3.1 需要准备什么
在使用 NFC 一碰连之前,需要确认以下几项条件:米家智能肩颈仪本体电量充足,设备已完成首次开机;一台支持 NFC 的手机,安卓端和 iPhone 端都可以,但要保证系统版本较新,iOS 14 之后的机型在快捷指令和后台标签读取方面体验更好;米家 App 已经安装并登录小米账号;手机系统设置里 NFC 功能已开启。
在 Android 设备上,建议同时检查“后台 NFC 读取”权限是否授予米家 App。部分国产 ROM 会默认禁止应用在后台读取 NFC 标签,导致“碰一下没反应”的假象。iPhone 用户则需要确保手机处于解锁状态,锁屏状态下虽然也能触发部分 NFC 功能,但竖式标签读取和 App 唤起策略在不同系统版本上表现不一致。
3.2 首次绑定设备
设备首次使用前,需要先完成米家 App 的绑定。典型的流程如下:先按下设备上的电源键开机,部分型号需要长按电源键进入配网模式,指示灯会变成闪烁状态;打开米家 App,点击右上角“+”号,选择“添加设备”,App 通常会自动搜索附近待配网的设备;如果搜索不到,可以在手动列表里查找“肩颈按摩仪”或者“米家智能肩颈仪”相关关键词。
点击设备后,App 会提示输入 Wi-Fi 密码或者完成蓝牙配对授权。这一步骤的本质是让手机与设备建立一条安全的本地通信链路,并为设备分配云端账号归属。绑定成功后,App 会进入设备控制页,此时可以修改设备名称、分配房间、检测固件版本。建议在完成绑定后进行一次固件升级,因为新版本的固件往往会优化 NFC 标签识别的稳定性和按摩模式的调度逻辑。
这里需要提醒的是,不同批次的设备在绑定流程上可能略有差异,建议以 App 内的实际提示为准。如果设备已经被其他小米账号绑定,需要先在原账号中删除设备,否则会提示“设备已被绑定”。
3.3 让手机能够“一碰连”
完成设备绑定后,NFC 一碰连功能通常默认开启,不需要在 App 内做额外配置。使用时要找到设备上的 NFC 感应区域,通常在按摩仪手柄外侧或机身内侧会印有一个 NFC 图标。将手机背面 NFC 天线区域对准这个图标,保持 1 到 2 秒,不要快速移开。
手机 NFC 天线的大致位置是在后置摄像头附近,不同机型的感应区略有不同。对准时如果手机壳过厚,或者手机壳材质是金属,会明显削弱 NFC 信号,导致识别失败。建议使用原装或塑料、硅胶材质的手机壳,避免金属框架遮挡。
如果使用正面屏幕区域去触碰标签,很多手机会无法识别,因为正面通常没有 NFC 天线。多试几次,找准触点位置后,一碰连的成功率会非常高。打开过程如果弹出浏览器而不是米家 App,通常说明 NFC 标签里的记录是网页 URL 而非 App 专属记录,这个问题会在第 6 章的排查清单里详细说明。
4. 9 种模式与温感热敷功能拆解
4.1 9 种模式背后的电脉冲原理
按摩仪宣传的“9 种模式”,核心硬件基础是 TENS(经皮神经电刺激)和 EMS(肌肉电刺激)技术。TENS 通过电流刺激感觉神经,缓解疼痛感;EMS 则直接作用于运动神经,让肌肉产生收缩和放松,从而改善僵硬状态。两种技术组合使用,就是我们在市面主流按摩仪上看到的各类“推拿”“敲击”“揉捏”手感。
不同模式之所以手感不同,是因为 MCU 输出的脉冲参数不一样:频率决定了每秒脉冲次数,频率低像“敲打”,频率高像“揉捏”;脉宽决定了单个脉冲的持续时间,影响刺激深度;占空比决定了脉冲间隔,影响节奏感。米家 App 里选择不同模式时,本质上就是切换一组预置的脉冲参数组合,同时连续调节强度档位。
对于普通用户来说,不需要记住每个模式的参数,只需要知道一个原则:刚开始使用时从最低强度开始,选择“轻柔”“放松”类模式,给身体一个适应过程;之后可以根据部位感受,逐步切换到强度更高的模式。如果某个模式在某个强度下出现明显的刺痛感,应立即降低强度或切换到其他模式,不要强行忍受。
4.2 温感热敷是如何控温的
温感热敷是这款设备的另一大卖点。要实现“温感”,必须解决两个问题:把温度提升到设定范围,以及把温度稳定在安全范围内。硬件实现上通常使用柔性加热膜与 NTC 温度传感器配合,NTC(Negative Temperature Coefficient)热敏电阻的阻值会随温度升高而下降,MCU 通过 ADC 采集阻值变化,推算出当前温度。
控制算法上,常见做法是简单的 PID 或开关控制:当温度低于目标值时,驱动电路给加热膜供电;接近目标值时降低 PWM 占空比;超过设定值后切断加热。为了防止传感器失效导致过热,产品会配置二级保护逻辑,例如硬件熔断器、软件看门狗、以及加热超时自动关闭等安全机制。
按摩仪的热敷温度一般在 38℃ 到 45℃ 之间,与人体体感舒适区间匹配。使用热敷时,建议先让皮肤接触电极片一定时间,让热量缓慢传递,避免一开始就开最高档。如果皮肤有破损、红肿或处于敏感期,建议暂停热敷功能,只使用纯按摩模式。
4.3 办公与居家场景下的模式选择
办公场景下,用户通常只有几分钟的休息时间,适合使用时间较短、强度不需要特别高的模式,优先选择“敲击”或“揉捏”类节奏感明显的模式,配合中等热敷档位,快速放松斜方肌。办公桌旁使用时,注意电极片要紧贴皮肤,不要让设备悬空,否则脉冲刺激会不均匀,体感也比较差。
居家场景下时间更充裕,可以使用“深度放松”或“综合”类模式,把热敷温度调高,按摩时间设定在 15 到 20 分钟左右。使用结束后,建议等待设备自然降温再收纳,避免加热部件与织物长时间接触。电池电量方面,电脉冲和加热都是耗电大户,如果连续使用热敷,建议保持设备电量充足,或者在 App 里关注剩余电量。
5. 实战:从 NFC 标签里读出设备的“身份信息”
5.1 准备读取工具
这一节要动手实验:把米家智能肩颈仪上的 NFC 标签当成一个普通 NFC 标签来读取,看看里面到底写了什么。最简单的工具就是手机上的 NFC 读取软件,Android 端可以用 NFC Tools,iOS 端可以用 NFC TagReader。这些 App 能读出标签的 UID、技术类型和 NDEF 消息内容。
如果你有 ACR122U 这类 USB NFC 读卡器,还可以在电脑上通过 libnfc 或 nfcpy 来读取。下面要展示的代码都是面向开发者的示例,需要提前说明:nfcpy 需要安装额外的 Python 库,并且读卡器驱动在 Windows、macOS、Linux 上配置不太一样,请根据你的硬件和系统环境调整。
5.2 用手机 App 读取 NDEF 内容
用 NFC Tools 读取时,把手机背面贴近设备 NFC 标签,App 会弹出标签信息。在“NDEF”选项卡里,你通常会看到一条 URI 记录,负载是一个以 https 开头的链接,或者是一条带 miot 标识的自定义记录。标签的 UID 则是设备出厂时写入的唯一标识,每台设备都不同。
看到这些信息后,不要急着关闭 App。试着观察几个关键点:标签技术类型是什么,一般是 NXP 的 NTAG21x 系列;NDEF 记录类型是什么,URI 和 Text 最常用;记录负载的域名是否属于小米官方域名。如果发现域名陌生,就要警惕标签内容是否被人篡改过,这个安全点会在后面章节展开。
5.3 代码解析 NDEF 记录
对于开发者来说,读取 NFC 标签并解析 NDEF 记录是很常见的需求。下面给出三种不同平台和层级的示例。
第一个示例使用 Python 的 nfcpy 库连接读卡器并读取标签。该代码需要电脑连接 USB NFC 读卡器,具体设备路径因系统而异。
import nfc def on_connect(tag): print("Tag ID:", tag.identifier.hex()) if tag.ndef is not None: for record in tag.ndef.records: print("Record Type:", record.type) print("Record Name:", record.name) print("Record Data:", record.data) else: print("该标签中没有 NDEF 消息") return True clf = nfc.ContactlessFrontend("usb") if clf is None: print("没有找到 NFC 读卡器") else: clf.connect(rdwr={"on-connect": on_connect}) clf.close()示例中的 on_connect 回调在标签进入射频场时被触发,tag.ndef.records 是已解析好的 NDEF 记录列表。如果你的标签写入的是 URI 消息,打印出的 record.type 通常是 urn:nfc:wkt:U,record.data 里就能看到完整的链接地址。
第二个示例使用纯 Python 的 ndef 库解析已经读取到的原始字节流,适合没有读卡器但手握十六进制数据的调试场景。
import ndef # 这里放置从读卡器读取到的 NDEF 消息原始字节,完整 NDEF 前面会有长度和开头标志 raw_bytes = bytes.fromhex("D1 01 0F 55 03 6D 69 6F 74 2E 63 6E 2F 64 65 76 69 63 65") records = list(ndef.message_decoder(raw_bytes)) for record in records: print("Type:", record.type) if isinstance(record, ndef.UriRecord): print("URI:", record.uri) if isinstance(record, ndef.TextRecord): print("Text:", record.text)在真实项目中,原始字节流的获取可能来自串口读卡器、Android 应用的 NFC 回调,或者日志里打印的 hex dump。重点在于 message_decoder 会按照 NDEF 规范把一条消息拆解成可读的记录,开发者不用手动解析每一段的 TLV 结构。
第三个示例是 Android 端最常见的 NDEF 读取写法。在 Activity 中通过 Intent 回调拿到 NFC Tag 对象,然后使用 Ndef 类读取。
// 文件路径:MainActivity.kt override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) val tag: Tag? = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) val ndef = tag?.let { Ndef.get(it) } if (ndef == null) { Log.i("NFC", "该标签不支持 NDEF") return } ndef.connect() val message = ndef.ndefMessage for (record in message.records) { Log.i("NFC", "TNF=${record.tnf}") Log.i("NFC", "Type=${String(record.type)}") Log.i("NFC", "Payload=${String(record.payload)}") } ndef.close() }这段代码要先在前台 Dispatch 相关配置里打开 NFC 检测,或者直接在 AndroidManifest 中给 Activity 配置 NDEF_DISCOVERED intent-filter。record.payload 中包含 NDEF 记录的实际负载数据,通常会带一个状态字节,解析时需要跳过第一个字节,具体偏移要看记录类型。
6. 常见问题与排查思路
6.1 一碰连没有反应
NFC 一碰连最常见的问题,是手机靠近设备后完全没有反应。首先检查手机系统和 App 的 NFC 开关是否开启,部分 Android 手机的控制中心 NFC 图标只是一个快捷开关,底层权限可能在设置里被限制。其次检查设备 NFC 标签位置是否对准,很多用户第一次使用时会习惯性用手机屏幕去贴标签,导致感应失败。最后检查手机壳,金属壳或者带有金属边框的保护壳会形成电磁屏蔽,这种情况需要取下手机壳再试。
如果以上都正常,可以先用 NFC Tools 读取同一位置的标签,确认标签本身是否损坏。如果 NFC Tools 能读出 UID 但读不出 NDEF,说明标签中的 NDEF 消息可能因为出厂写入异常而不完整,这种问题一般需要联系售后处理。
6.2 打开的是网页而不是米家 App
手机读取 NFC 标签后弹出的是浏览器页面,而不是米家 App 控制页。这个现象说明 NDEF 消息是一条普通的 URI 记录,而不是 App 专属记录。在 Android 12 之前,App 开发者可以通过自定义 URL Scheme 来实现“浏览器或 App 唤起”的降级逻辑;而在 Android 12 之后,系统加强了 App Links 的校验,非 HTTPS 的 scheme 唤起限制变多了,很多厂商选择直接用 HTTPS 链接加 App Links 配置。
作为用户,遇到这种情况可以尝试手动打开米家 App,确认设备已经绑定,再把手机贴近标签一次。Android 端如果反复弹出网页,可以在系统设置里找到“默认应用”或者“链接处理”,把米家 App 设为该链接的默认处理者。iOS 端则可以尝试在 Safari 中打开对应链接,使用“在米家中打开”按钮,系统会记住选择。
6.3 设备连接成功却无法控制
还有一种情况是 NFC 一碰连已经成功唤起米家 App,但控制页面一直显示“设备离线”或“连接失败”。这通常不是 NFC 的问题,而是设备与手机之间的蓝牙或网络链路有问题。检查设备是否开机、电量是否充足;检查手机蓝牙是否开启,米家 App 是否被授予蓝牙权限;如果设备需要连接 Wi-Fi,确认路由器和设备在同一局域网。
有时候手机连接过其他蓝牙设备,导致与按摩仪的蓝牙信道申请失败,可以在蓝牙设置里关闭一些不常用的设备再试。米家账号不一致也会造成设备离线,iPhone 和 Android 之间切换登录时,建议先退出旧账号,重新绑定设备。
下面这张表汇总了常见问题的排查思路。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 靠近设备无反应 | NFC 开关关闭、标签位置不准、手机壳金属遮挡 | 打开 NFC、对准标签、移除手机壳 |
| 弹出网页而非 App | NDEF 为普通 URI、系统默认链接策略未生效 | 手动打开米家、设置默认应用 |
| 提示标签已损坏 | 标签硬件故障、NDEF 写入异常 | 使用 NFC Tools 验证、联系售后 |
| App 唤起但设备离线 | 设备未开机、蓝牙权限未授予、网络不同网段 | 检查设备状态、授予权限、确保同一局域网 |
| 控制响应卡顿 | 蓝牙信号弱、周围 2.4G 干扰大 | 靠近设备、关闭非必要蓝牙外设 |
7. NFC 安全边界与工程实践建议
7.1 NFC 标签能被破解吗
很多读者看到近场通信相关的关键词,第一反应会想到“NFC 破解”。从技术角度说,像米家智能肩颈仪上使用的这类普通 NFC 标签,本身并没有复杂的加密能力,只要贴近读卡器就能被读取,也可以通过支持写功能的工具覆写。因此“被破解”并不是一件困难的事,困难的地方在于“破解了能干什么”。
对于这类用于快捷跳转的 NFC 标签,标签内容通常是设备标识或跳转链接,即使被读取,也拿不到米家账号、设备控制权等敏感信息。真正值得担心的是攻击者覆写标签内容,把原本指向米家 App 的链接改成钓鱼页面,诱导用户输入账号密码。这种攻击不需要高深的技术,只需要一台支持写标签的手机就能完成。
所以,NFC 标签的“破解风险”要分场景看:用于快捷唤起 App,风险中等,主要威胁是标签内容被篡改后的钓鱼攻击;用于门禁、支付、公交车卡,安全要求高得多,必须引入加密认证和安全芯片。消费者在公开场合使用 NFC 标签时,应养成先看链接域名、再点击跳转的习惯。
7.2 中继攻击是怎么发生的
中继攻击是 NFC 安全领域经常讨论的一类攻击方式。它的核心思路是,攻击者在合法读卡器和合法卡片之间建立一条“转播通道”:本来用户需要把手机贴近刷卡器才能完成支付,攻击者可以在远处放置一个转发设备,把读卡器的射频信号通过中继器传给卡片,伪装成近距离刷卡。
这类攻击对快捷支付和门禁系统的威胁相对较大,因为支付和门禁往往只通过距离判断使用者身份。对于肩颈仪这类消费级设备,中继攻击的实际意义非常有限:NFC 标签里没有动态加密令牌,攻击者即使远程转发了标签内容,拿到的也只是一个可复制的静态标识。
工程上抵御中继攻击的办法,是不要在 NFC 标签里存储可被单独用于认证的信息,而是让 NFC 只承担“快速唤起 App”的角色,真正的身份认证和鉴权放在云端或设备固件中,通过蓝牙或网络通道完成。这样一来,即使 NFC 标签内容被复制,攻击者也无法仅凭标签内容接管设备。
7.3 给 IoT 开发者的 NFC 接入建议
如果你计划在自己的智能硬件产品中加入 NFC 一碰连功能,下面几条建议值得参考。
第一,使用 HTTPS 域名而不是 IP 地址。NFC 标签内容建议是一段可控域名下的链接,例如 https://你的域名/device/x,这样域名到期或者证书更换时,你有权限在后端平滑迁移,不会让用户手里的标签失效。直接写 IP 地址在运维上几乎不可维护。
第二,不要往 NFC 标签里写敏感数据。设备序列号、Wi-Fi 密码、账号 Token、证书私钥,这些都不应该出现在 NFC 标签中。NFC 标签是只读性很强的静态介质,一旦离开工厂,你无法控制它被谁读取和复制,只能假设标签内容是完全公开的。
第三,写入后要锁定标签。带锁定位的 NTAG 系列标签,在写完 NDEF 消息后可以设置只读,防止被第三方覆写。出厂固件中要预留一个“锁标签”的工序,避免把已经写好但未锁定的标签流入市场。
第四,App 端要校验链接域名。即使标签内容被恶意篡改,App 也应通过白名单域名校验,决定是否继续跳转。域名不匹配时应该明确提示“该标签内容异常”,而不是直接打开浏览器加载页面。
第五,不要把 NFC 标签的 UID 当作安全凭据。UID 可以被克隆到另一个空白标签上,如果系统只根据 UID 判断设备身份,攻击者就能用一张空白标签冒充你的设备。正确做法是让 NFC 的 UID 只作为索引,云端再用设备密钥完成真实身份认证。
8. 总结:值得动手做的两件小事
这篇文章从米家智能肩颈仪的 NFC 一碰连功能出发,拆解了 NFC 通信模式、NDEF 数据结构、设备绑定流程,以及按摩仪背后 TENS、EMS 与温度控制的原理,也给出了读取设备 NFC 标签的完整代码示例。读完以后,你至少应该能回答三个问题:NFC 一碰连为什么可以这么快,设备标签里到底存了什么,以及这类标签的安全边界在哪里。
如果你手边正好有设备,我推荐你亲手做两件小事。第一件事,用手机 NFC Tools 软件仔细读一次设备标签,观察 UID、NDEF 记录类型和链接域名,这个动作会打破对“一碰连”的神秘感。第二件事,在高风险公共场合,比如演唱会门口、陌生摊位贴出的 NFC 贴纸,养成先看域名再点击的习惯,不要因为好奇而随意触碰来路不明的 NFC 标签。从技术学习到安全意识的养成,往往只是几次动手尝试之间的距离。