19

我已经在 Android 中关注应用内更新 API 已有一段时间了,但我找不到以下行的任何相关性:

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)

--

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)

isUpdateTypeAllowed()方法已在 Android 文档中的以下代码片段中使用:https ://developer.android.com/guide/app-bundle/in-app-updates#update_readiness 。此外,上述两个方法调用在所有情况下都返回 true,我无法找到上述两个方法调用中的任何一个返回 false 的情况。

4

4 回答 4

8

当 Playstore 上有新更新并且设备上的当前应用版本低于 Playstore 上的应用版本时,这些方法将始终返回 true。要确定更新是灵活的还是立即的,我们需要在远程配置中为灵活或立即更新设置一个标志,例如 {"upgradeType":0/1} 其中 0 = FLEXIBLE 和 1 = IMMEDIATE。目前我们在 Playstore 控制台中没有任何选项可以在发布构建时为 FLEXIBLE 或 IMMEDIATE 更新设置标志,因此现在我们可以使用远程配置设置标志并确定更新是 FLEXIBLE 还是 IMMEDIATE,可能在未来 Playstore 将提供设置标志以识别更新类型的选项。

代码:

val jsonObject=JSONObject(FirebaseConfig().getStringConfig(RemoteConfigConstants.KEY_APP_UPGRADE))
updateFlag = jsonObject.getInt(JsonConstants.UPGRADE_TYPE)

private fun checkForInAppUpdate() {
        appUpdateManager = AppUpdateManagerFactory.create(this)
        appUpdateManager.appUpdateInfo.addOnSuccessListener {
            if ((it.updateAvailability() === UpdateAvailability.UPDATE_AVAILABLE)) 
        {
                if (updateFlag == 0 && it.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                    requestUpdate(it)
                    appUpdateManager.registerListener(this@HomeActivity)
                } else if (it.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                    requestUpdate(it, AppUpdateType.IMMEDIATE)
                }
            }
        }
    }

这里的 updateFlag 值是我们从远程配置中获得的特定类型更新的值。

于 2019-06-28T12:09:42.137 回答
5

我已经在 Google 问题跟踪器中提出了这个问题我确实收到了 Google 开发人员的回复,如下所示:

由开发人员选择调用哪种类型的更新。模式由代码中的应用程序确定。请参阅https://developer.android.com/guide/app-bundle/in-app-updates#start_update

我已经在 GoIbibo 移动应用程序中集成了应用内更新 api,现在它运行得非常完美。文档有这种歧义。因此,无论您想要灵活更新还是立即更新,都应该编写自己的逻辑。

于 2019-07-16T09:35:50.180 回答
4

当我的设备上没有网络连接时,即使更新可用,我也遇到了 appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE) 或 appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) 返回 false。

于 2020-10-27T05:48:00.600 回答
-4

如果您的 UpdateAvailability 为 UPDATE_AIVALABLE,这些方法可能会返回 true。请首先确保这是真的:

appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE

于 2019-06-04T15:15:11.850 回答