HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?

HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决? 【问题描述】:hce应用前台刷卡 ,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?

【问题现象】:

C00301/com.mid…hce/Nfc_Core  com.midu.nfc.hce      E    

 [(IsDefaultService:72)]IsDefaultService: unsupported card type

【版本信息】:不涉及

【复现代码】:使用的是官方demo,参考链接:HCE卡模拟开发指南-NFC-Connectivity Kit(短距通信服务)-网络-系统 - 华为HarmonyOS开发者

【尝试解决方案】:配置了声明卡类型元数据cke_5054.png


更多关于HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

根据demo尝试复现,使用TagInfo读卡,未复现问题,HCE的交互是正常的。

请提供如下信息:

请与门禁供应商沟通,确认门禁卡与门禁之间是否存在交互逻辑。如存在交互逻辑,请提供具体交互信息方便接下来的分析。

更多关于HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


该错误表明HCE(主机卡模拟)应用无法识别当前NFC卡类型,导致前台刷卡事件无法正常接收。以下是完整排查方案:

  1. 检查卡类型兼容性

确认设备支持的卡类型

在 module.json5中检查 host_emulation配置是否包含当前卡类型(如 TECH_ISO_DEP):

{
  "extensionAbilities": [
    {
      "metadata": [
        {
          "name": "host_emulation",
          "value": {
            "capability": ["TECH_ISO_DEP"] // 确保包含实际卡类型
          }
        }
      ]
    }
  ]
}

常见支持类型: TECH_ISO_DEP(ISO 14443-4) TECH_NFC_A(NFC-A) TECH_NFC_B(NFC-B)

  1. 验证权限与声明

添加必备权限

在 module.json5中声明:

"requestPermissions": [
  {
    "name": "ohos.permission.NFC_CARD_EMULATION"
  }
]

配置前台服务

确保 HCE 服务声明为前台服务:

"abilities": [
  {
    "backgroundModes": ["nfc"]
  }
]
  1. 代码层排查

检查 HostCardEmulationService实现

确认 onHostApduReceived方法正确处理指令:

import hce from '@kit.ConnectivityKit';

class MyHceService extends hce.HostCardEmulationService {
  onHostApduReceived(apdu: number[]): number[] {
    console.log("Received APDU: " + apdu);
    return [0x90, 0x00]; // 返回成功响应
  }
}

注册服务到前台

在 onCreate中激活服务:

import Ability from '@ohos.app.ability.UIAbility';

export default class MainAbility extends Ability {
  onCreate() {
    // 启动前台服务
    this.context.startServiceExtensionAbility({
      bundleName: "your.bundle.name",
      abilityName: "MyHceService"
    });
  }
}
  1. 设备与卡片兼容性测试

测试不同卡类型

尝试刷写以下卡片验证兼容性: ISO 14443 Type A 卡(如 MIFARE Classic) ISO 14443 Type B 卡(如身份证)

检查设备 NFC 支持

在设备设置中确认: NFC 开关已开启 默认付款应用已选择当前 HCE 应用

  1. 高级调试步骤

抓取 NFC 通信日志

使用 hdc命令捕获底层通信:

hdc shell hilog | grep "Nfc_Core"

检查 AID 路由冲突

确保 aid_list未与其他应用冲突:

"metadata": {
  "host_emulation": {
    "aid_list": ["A000000333010101"] // 唯一应用标识
  }
}

最终验证完成上述步骤后: 重启设备 NFC 服务 重新激活 HCE 前台服务 使用兼容性卡片测试刷卡事件

该错误表明HCE应用无法识别当前刷卡卡类型。请检查以下配置:

  1. ohos.permission.NFC_TAG权限基础上,确保已声明ohos.permission.NFC_CARD_EMULATION权限。
  2. config.json中正确配置AID路由,确认AID列表与刷卡设备支持的卡类型匹配。
  3. 验证isDefaultServiceForCategory()方法返回正确值,确保应用被设为默认支付应用。
  4. 检查设备NFC功能是否已开启,并支持对应卡模拟协议。

若配置无误,可尝试重启NFC服务或设备。

该报错 IsDefaultService: unsupported card type 表明系统在判断是否为默认服务时,未能识别到支持的卡类型。这通常是由于HCE应用的元数据配置与实际的NFC刷卡类型不匹配导致的。

根据您提供的截图,您已配置了 aid_list。请重点检查以下配置项:

  1. 确认 nfc_card_emulation 配置正确:在 module.json5 文件的 abilities 标签下,确保 nfc_card_emulation 配置包含 aid_list 和正确的 type 属性。type 必须明确指定为 "payment""other"

    "abilities": [
      {
        ...
        "skills": [
          {
            "actions": [
              "ohos.want.action.nfc.card.emulation"
            ]
          }
        ],
        "metadata": [
          {
            "name": "nfc_card_emulation",
            "value": "{\"aid_list\":[\"F0010203040506\", \"A0000000041010\"], \"type\":\"payment\"}"
          }
        ]
      }
    ]
    
  2. 核对AID值:确保 aid_list 中的AID(应用标识符)与您刷卡设备(如POS机)所寻址的AID完全一致,包括字母大小写和长度。常见的支付AID如 "A0000000031010"。不匹配的AID会导致服务不被触发。

  3. 检查前台服务权限:HCE前台刷卡需要应用在运行时保持前台服务。请确保您的应用已正确申请并启动了前台服务,且服务类型声明为 nfc

    "module": {
      ...
      "requestPermissions": [
        {
          "name": "ohos.permission.NFC_CARD_EMULATION"
        }
      ]
    }
    
  4. 验证设备支持:确认您的HarmonyOS Next设备硬件支持NFC功能,并且系统设置中已开启NFC。

核心排查点在于元数据 nfc_card_emulationaid_listtype 配置是否准确、完整,并与刷卡终端匹配。

回到顶部