You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

扩展文件与应用内购买签名验证失败技术咨询

解决扩展文件下载时的Signature verification failed错误

嘿,我来帮你排查这个签名验证失败的问题!你遇到的E/LicenseValidator: Signature verification failed错误,本质是Google Play的许可证验证器在校验扩展文件相关的许可证响应签名时出了问题,结合你已经发布到测试渠道的情况,我整理了几个关键排查方向:

1. 先检查测试账号的配置是否正确

  • 确保你在Google Play Console的测试渠道(封闭/开放测试)里添加了对应的测试账号,并且这些账号已经接受了测试邀请
  • 注意:开发者账号默认不能直接做测试,除非你在License测试设置里开启了「允许开发者账号测试」选项。

2. 确认扩展文件和主APK的签名一致

扩展文件必须和你发布到测试渠道的APK使用完全相同的签名密钥打包:

  • 如果你用Android Studio生成扩展文件,要确保打包时选择的keystore和发布测试APK的是同一个。
  • 可以用命令手动验证签名一致性:
    jarsigner -verify -verbose -certs your_expansion_file.obb
    
    把输出的证书信息和APK的签名证书对比,确保两者一致。

3. 检查你的License验证代码逻辑

从你给出的代码片段看,有// Skip signature check for unsuccessful requests的注释,但要注意:

  • 只有当请求失败(比如网络错误、未知响应码)时才能跳过签名检查;如果收到LICENSEDLICENSED_OLD_KEY这类成功响应,必须执行签名验证,不能跳过。
  • 给你一个正确的处理逻辑示例,供参考:
    @Override
    public void onLicenseResponse(int responseCode, ResponseData data) {
        Log.i(TAG, "verify responseCode : " + responseCode);
        switch (responseCode) {
            case LICENSED:
            case LICENSED_OLD_KEY:
                // 成功响应必须验证签名
                if (data != null && data.verify(YOUR_PUBLIC_KEY)) {
                    // 签名通过,开始下载扩展文件
                    startExpansionFileDownload();
                } else {
                    Log.e(TAG, "Signature verification failed for valid license response");
                    // 处理验证失败的情况,比如提示用户重试
                }
                break;
            case NOT_LICENSED:
                // 用户未授权,处理逻辑(比如提示购买)
                break;
            default:
                // 其他错误状态,比如网络问题,可以考虑重试
                retryLicenseCheck();
                break;
        }
    }
    

4. 确认测试渠道已经发布生效

有时候测试渠道的更新需要1-2小时才能完全同步到Google Play服务器,如果你刚发布测试版本,建议等一段时间再测试。另外,确保测试账号已经切换到对应的测试渠道(比如在Google Play商店里找到你的应用,确认显示的是测试版本)。

5. 检查扩展文件的命名和版本号

扩展文件的命名必须严格遵循规则:[main|patch].<versionCode>.<packageName>.obb,比如main.1001.com.your.app.obb。要确保代码中指定的扩展文件版本号和你上传到Google Play Console的完全一致。

如果以上步骤都排查过还是有问题,可以查看设备完整的Logcat日志,找更详细的错误信息,或者在Google Play Console的「许可证测试」板块查看相关日志。

内容的提问来源于stack exchange,提问作者Naveen Kumar

火山引擎 最新活动