当前位置:   article > 正文

20230717 uniapp离线打包后打开APP提示“未配置AppKey或配置错误“

未配置appkey或配置错误

前提

https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey.html#
根据上面的教程,都配置好了,发现打包之后还是出现"未配置AppKey或配置错误"。
想了很久才去想是不是离线AppKey错了。

解决办法

在uniapp 开发者后台把应用的 Android 应用签名SHA1值Android 应用签名MD5 两个值设置成一样,保存后获取新的 AppKey 重新打包就可以了

原因

专门问了一下claude2这个AI才知道,我电脑上的不同版本的jdk输出的证书文件(keystore文件)的SHA1和MD5值是不一样的,到底 uniapp 开发者后台用的是哪个为准我是不知道的,反正测几次

同一个keystore文件,使用不同版本的keytool去获取MD5和SHA1的值,可能会不一样。

这是因为keytool在不同版本之间算法实现存在差异所导致的。

具体来说,在Java 7之前,keytool使用的是MD5+SHA1的组合算法,计算过程是:

对证书内容计算MD5哈希
对上一步的MD5哈希再计算SHA1哈希
最终输出的是第二步的SHA1哈希值
而从Java 7开始,keytool切换到仅使用SHA1算法,直接对证书内容计算SHA1哈希值。

因此,Java 7之前的keytool版本获取到的SHA1值,实际上是证书MD5值的SHA1哈希;但Java 7+版本获取到的就是证书原始内容的SHA1哈希。

那么如何处理这个差异呢?

尽量使用Java 7以上版本的keytool,直接获取SHA1值
对比服务端需要的到底是SHA1还是MD5值
在不同keytool版本之间保持一致,不要混用
向服务端确认清楚需要使用的是哪个值
可以同时提供MD5和SHA1两个值
所以keytool的版本差异会导致签名哈希值可变是需要注意的,需要根据实际情况处理。

根据Keytool命令的变更历史,从Java 7版本(Java 7u6准确来说)开始,keytool在输出keystore信息时不再包含MD5值,仅输出SHA1值。

具体的变更点是:

Java 7u6之前 - 输出SHA1值(实际是证书MD5值的SHA1哈希)和MD5值
Java 7u6 到 Java 8 - 只输出SHA1值(证书内容的SHA1哈希)
Java 9 到 Java 11 - 输出SHA256值
Java 12之后 - 同时输出SHA256和SHA512值
所以可以总结如下:

Java 7u6之前 - 有MD5值
Java 7u6开始 - 没有MD5值
这是因为Java 7u6开始Keytool切换到了只使用SHA1算法,不再先计算MD5然后SHA1的方式。

所以从Java 7u6+的keytool版本开始,就不会再输出keystore证书内容的MD5值了。

如果必须要获取MD5值用来兼容某些老系统,可以使用Java 7u6之前的keytool版本,或者使用其他工具计算证书文件的MD5值。

所以准确来说,keytool不再出现MD5值的分界点是Java 7u6这个版本。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

最后发现用Java 8的Keytool拿到sha1值之后,把值填到Android 应用签名SHA1值Android 应用签名MD5 就行了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/772479
推荐阅读
相关标签
  

闽ICP备14008679号