应用内更新重新启动过时版本而不是新安装的版本

in-app update restarting the obsolete version instead of the newly installed version

我想实现应用内更新。使用以下代码,它正确提示用户要求他同意更新,下载代码并安装。但随后系统会重新启动 先前安装的 版本的应用程序,并再次执行更新过程。以下代码有什么问题?

onCreate()方法中:

        appUpdateManager = AppUpdateManagerFactory.create(this);
        Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
        appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
            if (mPrefs == null) {
                mPrefs = getSharedPreferences("******" + appName, Context.MODE_PRIVATE);
            }
            int updateRequestCounter = mPrefs.getInt("updateRequestCounter", 0);

            if ((updateRequestCounter == 0) || (updateRequestCounter == 5) || (updateRequestCounter % 10 == 0)) {
                if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) {
                    switch (appUpdateInfo.installStatus()) {
                        case InstallStatus.FAILED: case InstallStatus.REQUIRES_UI_INTENT: case InstallStatus.UNKNOWN:
                            try {
                                appUpdateManager.startUpdateFlowForResult(
                                        appUpdateInfo,
                                        AppUpdateType.IMMEDIATE,
                                        this,
                                        MY_REQUEST_CODE);
                            } catch (IntentSender.SendIntentException e) {
                                e.printStackTrace();
                            }
                            break;
                        default:
                            break;
                    }
                }
                mPrefs.edit().putInt("updateRequestCounter", 0).apply();

            } else {
                mPrefs.edit().putInt("updateRequestCounter", ++updateRequestCounter).apply();
            }
    });

不知道这是否可能是原因:我使用这段代码不是 production 版本,而是 internal test 版本应用程序。

您缺少更新安装部分。 您需要致电 appUpdateManger.completeUpdate() 来安装更新。 AppUpdateManager 将为您重新启动应用程序。

在您的应用的发布版本中测试更新安装。