appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)在Android应用程序内更新API中有什么作用?

Abh*_*hra 8 android kotlin in-app-update google-play-core

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

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
Run Code Online (Sandbox Code Playgroud)

-

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)
Run Code Online (Sandbox Code Playgroud)

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

小智 8

当 Playstore 上有新更新并且设备上的当前应用程序版本低于 Playstore 上的应用程序版本时,这些方法将始终返回 true。要确定更新是灵活的还是立即的,我们需要在远程配置中为 FLEXIBLE 或 IMMEDIATE UPDATE 设置一个标志,例如 {"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)
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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


Abh*_*hra 8

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

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

我已经在 GoIbibo 移动应用程序中集成了应用内更新 api,现在运行一切正常。该文档有这样的含糊之处。因此,无论您想要灵活更新还是立即更新,您都应该编写自己的逻辑。


小智 7

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