HarmonyOS鸿蒙Next中手机通过NFC功能模拟CPU门禁卡功能
HarmonyOS鸿蒙Next中手机通过NFC功能模拟CPU门禁卡功能 【问题描述】:鸿蒙手机通过NFC功能,模拟CPU门禁卡功能,请问有这方面的指导吗?就是HCE 服务,和APDU 指令
【背景知识】
- NFC功能主要用于实现近距离通信,通常用于设备与标签之间的数据交换。
- 电子设备通过NFC天线位置触碰NFC标签卡片,完成NFC标签卡片的读取或写入。
- NFC标签读写是实用工具类应用的高频使用场景之一,如用户记录网址、文本或应用信息等,以便NFC标签再次贴近手机时自动读取存储的信息并执行相应操作。可以参考:NFC标签读写。
- HCE(Host Card Emulation)是HarmonyOS提供的NFC卡模拟技术,允许应用模拟智能卡与读卡器进行通信。根据NFC标签读写开发指南,HCE服务可在前台和后台两种模式下工作,前台模式需要应用处于活跃状态,后台模式则通过系统服务实现无感刷卡。NFC通信基于APDU(Application Protocol Data Unit)协议,指令长度受标签类型限制,超长指令需要特殊处理。
【解决方案】
- 前台读取标签开发步骤:
- 在module.json5文件中声明NFC标签读取的权限,以及声明NFC标签特定的action。
- import需要的tag模块和其他相关的模块。
- 判断设备是否支持NFC能力。
- 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能。
- 获取特定技术类型的NFC标签对象。
- 执行读写接口完成标签数据的读取或写入数据到标签。
- 退出应用程序NFC标签页面时,调用tag模块退出前台优先功能。
- 后台读取标签开发步骤:
- 在module.json5文件中声明NFC标签读取的权限,声明NFC标签特定的action,以及声明本应用程序的能够处理的NFC标签技术类型。
- import需要的tag模块和其他相关的模块。
- 获取特定技术类型的NFC标签对象。
- 执行读写接口完成标签数据的读取或写入数据到标签。
【常见FAQ】
Q:遇到“UnsupportedTagException”时,如何定位问题并采取相应的解决方案? A:“UnsupportedTagException”异常通常发生在应用尝试处理一个不支持的NFC标签类型时,可以采取以下步骤处理:
- 捕获异常:在处理NFC标签时,通过try-catch结构捕获UnsupportedTagException。
- 检查标签类型:验证捕获到的异常是否为UnsupportedTagException,如果是,那么需要检查你当前的应用是否支持该标签的技术类型。
- 提供用户反馈:向用户明确显示该标签不被支持,并提供可能的解决方案,如需要特定的应用程序或设备设置。
Q:如何在app内创建模拟NFC卡? A:参考链接:HCE卡模拟开发指南。
Q:是否有NFC功能使用的参考demo? A:参考链接:NFC功能使用。
Q:通过往NFC标签写入包名,可被系统拉起对应的应用。那么对于已经售出存量设备中NFC标签里写的是其他平台的包名,HarmonyOS是否有办法兼容解析这种存量的只写了其他平台包名设备NFC标签,然后拉起相应的三方应用? A:HarmonyOS应用与其他平台应用的包名体系独立,不能共用同一包名。若NFC标签中仅包含其他平台包名,HarmonyOS无法直接通过包名拉起HarmonyOS应用。如果需要HarmonyOS通过读NFC标签来拉起特定的HarmonyOS应用,则需要NFC标签中增加对应的HarmonyOS应用的包名记录。
Q:在HCE卡模拟开发中,用户手机的设置为:手机设置-多设备协同-NFC-默认付款应用-钱包,这种场景下,当把手机放置在读卡器上的时候,通信的是钱包应用,而不是与app通信。 A:在HCE卡模拟开发指南,需要将module.json5中设置为Other类型的AID,并且需要在钱包里面不开通门禁卡,否则会校验SAK,导致会与钱包应用通信。
更多关于HarmonyOS鸿蒙Next中手机通过NFC功能模拟CPU门禁卡功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next中手机通过NFC模拟CPU门禁卡,需手机支持NFC且系统开放相关权限。该功能依赖鸿蒙系统的安全能力,通过NFC芯片模拟CPU卡的通信协议与安全交互。用户可在系统设置或“钱包”等应用中添加门禁卡,部分场景需物业配合发卡或写入数据。模拟成功后可实现手机刷卡开门。
在HarmonyOS Next中,通过NFC HCE(Host Card Emulation)功能模拟CPU门禁卡是可行的,核心在于实现一个HCE服务来处理APDU指令。以下是关键步骤和要点:
-
配置权限与NFC能力:
- 在
module.json5中声明ohos.permission.NFC_TAG权限和ohos.nfc.tag.hce能力。
- 在
-
创建HCE服务:
- 继承
CardEmulationService类,重写onApduReceived()方法以处理读卡器发送的APDU指令。 - 在
onDeactivated()中处理NFC链路断开事件。
- 继承
-
实现APDU指令处理:
- CPU卡模拟通常需响应ISO 7816-4标准的APDU,如选择应用(SELECT)、读取数据(READ BINARY)、外部认证(EXTERNAL AUTHENTICATE)等。
- 根据门禁系统的具体协议,可能需要实现自定义指令。回复的APDU数据需符合SW1-SW2状态字规范(如
0x9000表示成功)。
-
配置服务路由:
- 在
module.json5中注册服务,并声明ohos.nfc.tag.hce的"host"类型,设置AID(应用标识符)列表以匹配门禁卡应用。
- 在
-
测试与调试:
- 使用支持NFC的HarmonyOS设备,通过系统设置或代码激活HCE服务。
- 借助APDU调试工具或实际门禁读卡器验证指令交互。
注意事项:
- 部分门禁系统采用非标准加密或私有协议,需逆向分析原卡数据或与系统提供商协作。
- HarmonyOS Next的HCE API可能较封闭,需严格遵循官方文档(如
@ohos.nfc.cardEmulation模块)开发。
此方案适用于标准CPU卡协议,复杂门禁系统可能需要进一步适配。


