You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Google Play应用内更新点击更新按钮触发"user cancelled"错误求助

Unity中Google Play应用内更新点击更新按钮触发"user cancelled"错误求助

兄弟,我太懂你反复上传测试版本还卡在这里的崩溃感了!咱们来一步步揪出这个ErrorUserCancelled的问题根源,先从代码里的明显错误开始排查:

1. 核心逻辑错误:更新类型判断搞反了

看你CheckForUpdate方法里的这段代码:

if (appUpdateInfoResult.IsUpdateTypeAllowed(AppUpdateOptions.ImmediateAppUpdateOptions())) {
    StartCoroutine(StartFlexibleUpdate());
}

你明明要启动Flexible灵活更新,但判断的却是是否允许Immediate即时更新!这完全搞反了,会导致你在不符合Flexible更新条件的情况下强行启动,直接触发异常。

把这段代码改成:

if (appUpdateInfoResult.IsUpdateTypeAllowed(AppUpdateOptions.FlexibleAppUpdateOptions())) {
    StartCoroutine(StartFlexibleUpdate());
}

2. 缺失更新状态监听,无法定位错误环节

你的StartFlexibleUpdate方法只是单纯循环等待IsDone,完全没有监听更新流程中的状态变化,根本不知道是用户真的取消了,还是系统在某个环节抛出了假的取消错误。

建议给StartUpdate的请求添加状态监听器,这样能精准定位问题:

var startUpdateRequest = appUpdateManager.StartUpdate(appUpdateInfoResult, appUpdateOptions);
// 添加状态监听
startUpdateRequest.RegisterListener((operationState) => {
    if (operationState.Error != AppUpdateErrorCode.NoError) {
        Debug.LogError($"更新流程出错:{operationState.Error},状态:{operationState.Result?.AppUpdateStatus}");
        if (operationState.Error == AppUpdateErrorCode.ErrorUserCancelled) {
            // 这里可以进一步排查是用户主动取消,还是系统误判
        }
    }
});

// 保留原有的循环等待逻辑
while (!startUpdateRequest.IsDone) {
    yield return null;
}

3. Flexible更新的CompleteUpdate调用时机不对

Flexible更新的设计是后台下载完成后,需要用户确认再安装,你现在的代码是下载完成后自动调用CompleteUpdate,这不符合Google Play的交互流程,很可能被系统判定为用户取消操作。

修改这部分逻辑,先弹出UI提示用户确认,再触发安装:

if (updatedAppUpdateInfo.AppUpdateStatus == AppUpdateStatus.Downloaded) {
    // 假设你有一个确认按钮,先显示它
    Button confirmUpdateBtn = FindObjectOfType<Button>(); // 替换成你实际的按钮引用
    confirmUpdateBtn.gameObject.SetActive(true);
    confirmUpdateBtn.onClick.AddListener(() => {
        StartCoroutine(CompleteFlexibleUpdate());
        confirmUpdateBtn.gameObject.SetActive(false);
    });
    Debug.Log("更新已下载完成,请点击按钮安装");
}

4. 测试流程的潜在坑点

  • 确认新版本已同步到测试轨道:Google Play内部测试版本的生效需要时间(几分钟到几小时),刚上传就测试很可能更新信息还没同步到设备,导致异常。
  • 版本代码必须严格递增:确保你设备上安装的旧版本versionCode确实小于后台上传的新版本,版本号(versionName)不影响,但versionCode必须是整数且严格递增。
  • 确认设备在测试白名单内:虽然你说设备在测试邮箱里,但可以再检查Google Play后台的内部测试列表,确保账号和设备对应正确。

5. 残留的类缺失问题排查

之前你遇到过“class missing”错误,虽然通过修改main template解决了,但建议再确认:

  • Package Manager中Google Play App Update包的版本与Unity版本兼容
  • AndroidManifest.xml中是否添加了必要的权限(比如INTERNET,应用内更新依赖网络请求)
  • 项目中没有缺失Google Play相关的AAR文件

先把代码里的逻辑错误修正,再结合日志和测试流程排查,应该能解决这个ErrorUserCancelled的问题!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:34:31