在Android In-App Update API中,appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)的目的是什么?

23

我一直在关注Android中的应用内更新API,但我无法找到以下行的任何相关信息:

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)

--

appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)

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


它是否也会在更新进行中返回true?这可能是原因吗? - Fred
嗨!你的请求有什么新消息吗? - anthony
@安东尼,你是什么意思? - Abhishek Luthra
5个回答

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)
                }
            }
        }
    }

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


1
更好、更简单、更清晰的方法是传递更新优先级。https://developer.android.com/guide/playcore/in-app-updates/kotlin-java#update-priority - HBB20
1
@HBB20 但是在哪里传递这个参数? - Shikhar
有没有内置的Android的requestUpdate()函数,可以像文档中展示的那样显示弹出窗口,并处理更新? - M. Usman Khan

8

我已经在Google问题跟踪器这里提出了这个问题,并且我收到了来自Google开发人员的回复:

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

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


1
实际上还有另一个歧义。让我用一个例子来解释一下。假设你推出了一个名为 A 的应用程序版本,其中有一些严重的安全漏洞。为了让用户免受这些漏洞的影响,你发布了一个修复所有错误的版本 B。现在在版本 B 中应该有一个选项告诉版本 A 存在严重问题,因此 In-App-Update UI 应该是立即的。但我在 Google Play Console 和 AppUpdateManager 中都找不到类似的选项。如果你找到了解决办法,请告诉我。 - Waqas Younis
来自谷歌的推测性文档?对我来说,在没有进行检查的情况下,它可以完美地工作,并根据语义版本控制来决定何时触发强制更新。在我看来,这个函数可能是为将来支持的某些功能而设计的,因此文档并不清楚其实用性。 - Max Cruz

6

当我的设备没有网络连接时,我会发现 appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) 返回 false,即使更新是可用的。


1

我遇到了一个情况,当isUpdateTypeAllowed返回false时。这是因为设备上没有足够的空间来更新应用程序。对于我来说,还剩下140MB的空间和60MB的应用程序更新。当我释放空间后,isUpdateTypeAllowed返回true。


-4

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

appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接