HarmonyOS鸿蒙Next中应用市场下载的APK包SHA256与本地编译打包生成的APK不一致

HarmonyOS鸿蒙Next中应用市场下载的APK包SHA256与本地编译打包生成的APK不一致 本地编译打包生成 APK 文件后上传至应用市场,审核上架完成,用户从应用商店下载安装该应用后,出现应用 SHA256 校验值不一致问题,进而造成设备令牌(deviceToken)获取异常,消息推送功能失效

获取token时报错:com.huawei.hms.common.ApiException: 6003: certificate fingerprint error

5 回复

这个证书指纹校验:签名证书指纹错误。

  1. 检查申请相关服务时是否配置了正确的证书指纹。
    安卓:打开应用的APK,将其中“META-INF”文件夹解压出来,得到其中的“CERT.RSA”文件,通过
    keytool -printcert -file META-INF/CERT.RSA命令打印签名证书信息。

  2. 登录AppGallery Connect,单击“开发与服务”,选择需要操作项目,进入项目页面后选择应用,然后在“项目设置 > 常规”中检查“SHA256证书指纹”配置的信息是否与步骤1的指纹一致。

参考:《HMS Core SDK框架错误码》

更多关于HarmonyOS鸿蒙Next中应用市场下载的APK包SHA256与本地编译打包生成的APK不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


按照以下思路进行排查看看:

  1. 确认签名证书是否一致:

    保证本地用于生成上架包的签名证书,和最终上传应用市场的签名证书是同一个 p12。

  2. 不要拿调试包指纹去配推送:

    上架应用必须看上架包对应的签名信息,不是本地 debug 包。

  3. 获取上架包真实签名信息再核对:

    应用市场安装后,用 bm 工具查看

    hdc shell bm dump -n {bundlename} | grep appId
    

    或应用内调用 bundleManager.getBundleInfoForSelf,读取 signatureInfo.appId。

  4. 由 appId 反推 SHA256:

    先拿到 appId,格式类似:包名_签名信息

    去掉前面的包名,只保留签名信息保存为 sign.txt

    #Windows
    certutil -hashfile sign.txt SHA256
    
    #Mac
    shasum -a 256 sign.txt
    
  5. 更新 AGC 指纹后注意生效时间:

    公钥指纹配置成功后,大约 25 小时 生效。

    如果想加快生效,10 分钟后可修改工程里的 app.json5 中 versionCode

相关文档:【HarmonyOS应用上架包签名信息获取】

如果还不能解决的话,建议提交工单进行反馈:在线提单

这个问题本质上是:

应用市场重新签名了 APK,导致最终安装包的证书指纹(SHA256)和你本地打包的不一致。

而 HMS Push(华为推送)获取 token 时,会校验:

包名 + 签名证书指纹

所以就出现:

6003: certificate fingerprint error

重点先说结论:

如果你上传到应用市场后:

“应用市场分发包的签名”

“你本地配置到 AGC/HMS 的签名”

不是同一个,

就一定会出现:

获取 deviceToken 失败
Push 不工作
6003 fingerprint error

最常见原因(HarmonyOS / Android 都一样)

1、开启了“应用市场托管签名”

也叫:

App Signing
应用签名托管

开启后:

你上传的是:

“上传证书”

最终用户下载的是:

“华为重新签名后的正式证书”

因此:

本地SHA256 ≠ 商店安装SHA256

这是正常现象。

2、AGC 配置的 SHA256 还是本地调试证书

比如:

你在:

AGC → 项目设置 → App信息 → SHA256证书指纹

配置的是:

debug.keystore

或者:

本地 release.p12

但用户安装的是:

AppGallery重新签名后的证书

那 Push 一定报:

6003

正确解决方案(重点)

你需要:

把“应用市场最终分发证书”的 SHA256

配置到 AGC。

不是本地打包证书。

如何获取应用市场最终SHA256

方法1(推荐)

去:

AppGallery Connect
→ 应用
→ 应用信息
→ 应用签名证书

查看:

SHA256证书指纹

这个才是:

用户最终安装包真实证书。

然后:

复制这个 SHA256

配置到:

AGC
→ 项目设置
→ SHA256证书指纹

方法2

从应用市场下载安装正式版 APK:

keytool -printcert -jarfile xxx.apk

查看真实签名。

再强调一次关键点:

Push Token 校验的是:

最终安装包证书

不是:

你本地编译时的证书

另外还有一个坑:

HarmonyOS 5 现在:

HAP / APP / APK

签名体系可能混用。

如果:

Debug包

Release包

应用市场包

签名不一致,

也会导致:

有时候能获取token
有时候获取失败

建议:

统一:

正式环境:
只使用应用市场正式签名SHA256

开发环境:

单独配置Debug SHA256

不要混。

一句话总结:

这是典型的“应用市场重新签名”导致的证书指纹不一致问题。获取 Push Token 时校验的是“最终安装包”的 SHA256,不是本地编译证书。需要把 AppGallery 最终分发证书的 SHA256 配置到 AGC,否则就会报 6003 certificate fingerprint error。

应用市场下载的APK经过华为官方重新签名、渠道打包及可能的安全加固,这些操作会修改APK文件内容,导致SHA256哈希值与本地编译的原生APK不一致。此外,不同构建环境、签名证书或编译参数也会导致差异,属于正常现象。

应用市场会对上架APK进行重签名,用华为发布证书替换本地签名,因此下载后的SHA256指纹必然与本地构建包不同。报错 6003 正是由于获取推送 token 时校验签名指纹不匹配所致。解决方法:登录 AppGallery Connect,在“我的应用”->“项目设置”->“应用签名”中查看发布证书的SHA256指纹,将此指纹配置到推送初始化或验签逻辑中即可。

回到顶部