Android 应用更新返回缓存的应用更新信息

Art*_*zak 12 android kotlin

使用谷歌的新功能应用内更新我注意到它似乎返回旧的(以前的)更新信息而不是正确的最新信息。

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 
         [...]
      }
      [...]
   }
}
Run Code Online (Sandbox Code Playgroud)

当我们决定激活强制更新流程时,即使商店中有可用的更高版本的应用程序,应用程序也会更新到错误的版本。

更深入地探索这个主题,我发现,当通过 Google Play 商店对任何其他应用程序执行更新时,我们的操作将触发缓存刷新,并且下次应用程序内更新流返回正确的值和更新以正确的应用程序更新。

有没有人知道如何通过应用内更新或以编程方式强制刷新 Play 商店缓存来获取正确(最新)的可用应用版本代码?

更新:

我在其中一次会议上与谷歌开发人员讨论了这个案例。根据他的说法,无法以编程方式触发 Google Play 的列表更新(有关可用更新的信息) - 用户必须手动输入它,然后更新列表。Google Play 的缓存持续 24 小时,我被告知 Google Play 应该刷新它的列表。

小智 1

缓存必须过期。持续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
}
Run Code Online (Sandbox Code Playgroud)

该代码获取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)
Run Code Online (Sandbox Code Playgroud)

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

这种方法不适合,因为用户与Google Play Store.


通过编程方法使用Google Play Developer API并提供访问。您必须设置身份验证和授权API


实现缓存系统。您需要通过一种机制来管理缓存来存储应用程序的更新信息。在此解决方案中,您必须管理缓存。使用OkHttporRetrofit来实现缓存机制。


使用第三方库,例如:In-App Update Manager, AppUpdater, UpdateChecker.

这些库有一个简单的界面来管理应用程序以避免缓存问题。


这些方法对我有用。在部署到产品之前使用并测试它们。