kotlin Android in app update返回缓存的应用更新信息

ctrmrzij  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(151)

在使用google的新功能应用程序更新时,我注意到它似乎返回了旧的(以前的)更新信息,而不是正确的最新信息。
Android前段时间推出了新的强制更新功能:https://developer.android.com/guide/app-bundle/in-app-updates调用应用内更新
使用它时,我注意到,当根据谷歌的教程获取应用程序更新信息时,返回的应用程序版本代码有时与商店中可用的应用程序版本代码不是最新的(有以前的更新信息)。它看起来很像我们在代码中请求的应用程序更新信息是从缓存中获取的,而不是真实的的Google Play商店服务。

val appUpdateManager = AppUpdateManagerFactory.create(context)
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
appUpdateInfoTask.addOnCompleteListener { task ->
   when {
      task.isSuccessful -> {
         val appUpdateInfo = task.result
         //the successful app update info may have old (previous) info 
         [...]
      }
      [...]
   }
}

当我们决定激活强制更新流应用程序将被更新到错误的版本,即使商店中有可用的更高版本的应用程序。
更深入地探索这个主题,我发现,当通过Google Play商店对任何其他应用执行更新时,我们的操作将触发缓存刷新,下次应用内更新流将返回正确的值和更新以正确的应用更新。
有没有人知道如何获得正确的(最新的)可用的应用程序版本代码通过应用程序内更新或强制刷新播放存储缓存编程?

更新:

我有一个变化,与谷歌开发人员谈论这个案件的一个会议.从他说,有没有办法触发编程Google Play的列表更新(有关可用更新的信息)-用户必须手动输入,然后列表更新.谷歌播放的缓存持续24小时,我被告知谷歌播放应该刷新它的列表,然后.

qgelzfjb

qgelzfjb1#

该高速缓存必须过期。它持续24小时,然后再次检查更新。
以编程方式清除Google Play Store缓存。

val packageManager = context.packageManager
val googlePlayStorePackageName = "com.android.vending"
try {
    packageManager.getPackageInfo(googlePlayStorePackageName, 0)
    // The Google Play Store is installed
    val googlePlayStoreAppInfo = ...
    val cacheDir = ...
    val cacheFiles = ...
    for (cacheFile in cacheFiles) {
        cacheFile.delete()
    }
} catch (e: PackageManager.NameNotFoundException) {
    // The Google Play Store is not installed
}

代码获取Google Play Store包信息并删除所有缓存。
以编程方式强制Google Play Store刷新。

val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("market://details?id=<your_app_package_name>")
startActivity(intent)

代码启动Google Play Store,触发应用程序刷新并更新信息。

此方法不适用,因为用户与Google Play Store有交互

使用Google Play Developer API并通过编程方法提供访问。您必须为API设置身份验证和授权。
实现缓存系统。您需要通过一种机制来管理缓存,以存储应用的更新信息。在此解决方案中,您必须管理该高速缓存。使用OkHttpRetrofit来实现缓存机制。
使用第三方库,如:In-App Update ManagerAppUpdaterUpdateChecker
库有一个简单的界面来管理应用程序,以避免缓存问题。

这些方法对我来说很有用。在部署到prod之前使用并测试它们。

相关问题