长时间伏案工作后脖子和肩膀总有一种说不出的酸胀感相信很多办公族都有同感。最近入手了一台米家智能肩颈仪除了传统的多模式按摩和温感热敷之外最吸引我的是它支持 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 区域靠近设备上的标签区域手机自动识别标签内容并唤起米家 AppApp 直接定位到对应设备的控制面板。如果手机 NFC 功能未开启或者设备标签区域没有对准才需要退回手动方式。这个“近距离触碰触发”的交互模式天然适合按摩仪这类需要被家庭成员频繁切换控制的设备也符合智能家居追求的低门槛、快启动理念。1.3 这篇文章适合谁这篇文章适合三类读者。第一类是刚入手米家智能肩颈仪的普通用户你可以通过文章了解设备绑定、NFC 一碰连的正确姿势以及遇到连接失败时如何排查。第二类是智能硬件和 IoT 开发者你可以在第 5 章看到读取 NFC 标签和解析 NDEF 记录的完整代码理解一个米家设备是怎么通过 NFC 标签被手机识别出来的。第三类是对 NFC 安全性感兴趣的技术人员第 7 章会讨论 NFC 标签被复制、中继攻击等风险以及工程上如何规避这些风险。2. NFC 技术基础一碰连背后的工作原理2.1 NFC 的三种工作模式NFCNear Field Communication近距离无线通信是一种基于 13.56MHz 频率的短距离通信技术有效通信距离通常在 4 厘米以内。它在手机上的应用可以分成三种模式。第一种是读卡器模式手机主动发出射频场读取附近 NFC 标签或卡片中的数据这是 NFC 一碰连最核心的模式。第二种是卡模拟模式手机本身模拟成一张 NFC 卡片比如公交卡、门禁卡、支付卡由外部读卡器来读取手机。第三种是点对点模式两台 NFC 设备之间直接交换数据比如早期的 Android Beam 文件传输。米家智能肩颈仪的 NFC 一碰连走的正是读卡器模式。设备内部放置了一个无源的 NFC 标签标签自身不供电依靠手机发出的射频能量激活。手机读取到标签里的 NDEF 消息后会根据消息内容决定是打开 App 还是跳转网页。整个过程中设备本身并不参与 NFC 通信NFC 标签只是扮演了一个“身份名片”的角色。2.2 NDEF 数据格式到底是什么NFC 标签里存储的数据不是普通文本那么简单它遵循 NFC Forum 定义的 NDEFNFC 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 BCC0UID 剩余字节和校验字节第 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 温度传感器配合NTCNegative Temperature Coefficient热敏电阻的阻值会随温度升高而下降MCU 通过 ADC 采集阻值变化推算出当前温度。控制算法上常见做法是简单的 PID 或开关控制当温度低于目标值时驱动电路给加热膜供电接近目标值时降低 PWM 占空比超过设定值后切断加热。为了防止传感器失效导致过热产品会配置二级保护逻辑例如硬件熔断器、软件看门狗、以及加热超时自动关闭等安全机制。按摩仪的热敷温度一般在 38℃ 到 45℃ 之间与人体体感舒适区间匹配。使用热敷时建议先让皮肤接触电极片一定时间让热量缓慢传递避免一开始就开最高档。如果皮肤有破损、红肿或处于敏感期建议暂停热敷功能只使用纯按摩模式。4.3 办公与居家场景下的模式选择办公场景下用户通常只有几分钟的休息时间适合使用时间较短、强度不需要特别高的模式优先选择“敲击”或“揉捏”类节奏感明显的模式配合中等热敷档位快速放松斜方肌。办公桌旁使用时注意电极片要紧贴皮肤不要让设备悬空否则脉冲刺激会不均匀体感也比较差。居家场景下时间更充裕可以使用“深度放松”或“综合”类模式把热敷温度调高按摩时间设定在 15 到 20 分钟左右。使用结束后建议等待设备自然降温再收纳避免加热部件与织物长时间接触。电池电量方面电脉冲和加热都是耗电大户如果连续使用热敷建议保持设备电量充足或者在 App 里关注剩余电量。5. 实战从 NFC 标签里读出设备的“身份信息”5.1 准备读取工具这一节要动手实验把米家智能肩颈仪上的 NFC 标签当成一个普通 NFC 标签来读取看看里面到底写了什么。最简单的工具就是手机上的 NFC 读取软件Android 端可以用 NFC ToolsiOS 端可以用 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:Urecord.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、对准标签、移除手机壳弹出网页而非 AppNDEF 为普通 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 标签。从技术学习到安全意识的养成往往只是几次动手尝试之间的距离。