14

In-App Update API在应用程序中使用更新应用程序,而新版本在 Play 商店中可用。

模块等级

defaultConfig {
        applicationId "xxx.xxxxx"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode rootProject.ext.vCode
        versionName rootProject.ext.vName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

最后上传版本(在 Playstore 中直播)

vCode = 5
vName = "1.0.4"

项目 gradle(降级以进行测试)

vCode = 4
vName = "1.0.3"

降级此版本以获得可用或不可用的测试更新。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private var appUpdateManager: AppUpdateManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        appUpdateManager = AppUpdateManagerFactory.create(this)
    }

    override fun onResume() {
        super.onResume()
            checkForVersionUpdate()
    }


    private fun checkForVersionUpdate() {
            appUpdateManager?.appUpdateInfo?.addOnSuccessListener { appUpdateInfo ->
                if ((appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS)) {
                    // If an in-app update is already running, resume the update.
                    startUpdateFlow(appUpdateInfo)
                } else if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                        && appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)) {
                    startUpdateFlow(appUpdateInfo)
                }
            }
    }

    private fun startUpdateFlow(appUpdateInfo: AppUpdateInfo) {
        try {
            appUpdateManager?.startUpdateFlowForResult(
                    appUpdateInfo,
                    IMMEDIATE,
                    this,
                    123)
        } catch (e: InvocationTargetException) {
            e.printStackTrace()
        } catch (e: IntentSender.SendIntentException) {
            e.printStackTrace()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == 123) {
            if (resultCode != RESULT_OK) {
                Log.i("Update failed code:", resultCode.toString())
                // If the update is cancelled or fails,
                // you can request to start the update again.
            } else if(resultCode == RESULT_CANCELED)
                checkForVersionUpdate()
        }
    }
}

我上次使用 App Bundle(.aab) 和 Open Beta 在 Play 商店中上传构建。

尝试了以下方法。

  • 使用相同的包名签署 apk。
  • 清除 Playstore apk 缓存和存储。
  • 从 playstore 下载 apk 并从设备上卸载它。然后在降级版本代码并签署apk并将其安装在设备中。仍然没有显示更新应用程序对话框。
4

5 回答 5

5

与其他说测试构建必须处于发布模式或必须上传到 Play Console 测试轨道的答案相反——这都是错误的,文档中没有任何地方提到过任何这些。

如果您满足要求 API >= 21 && 有互联网连接并遇到此问题,请执行以下操作来解决:

  • 确认您的测试版本的代码版本低于生产版本的代码
  • 清除 PlayStore 应用程序的存储和缓存
  • 使用之前下载过该应用程序的帐户打开 Play 商店
  • 导航到您在 PlayStore 中的应用列表,并确认“更新”按钮正在显示。

这似乎是 PlayStore 的缓存问题,上面的步骤会刷新它。之后,即使在调试模式下,您也可以测试应用内更新。

于 2019-09-18T20:10:27.613 回答
4

在测试期间帮助我的是打开 Google Play 商店应用程序并从抽屉菜单中打开“我的应用程序和游戏”位置。

确保在“更新”选项卡上,您测试的应用程序出现在“待更新的更新”中。

我认为该库不会检查某些 google api 是否有可用的更新,但正在检查某种 google play store 应用程序缓存

希望它有助于为 Wojtek 欢呼

于 2020-06-02T13:43:37.270 回答
1

我也遇到了同样的问题,上述解决方案都没有奏效。我的理解是,如果versionCode在 build.gradle 中增加,那么它将被识别为更新。

我遵循以下顺序。

  • 假设您当前versionCode的 in build.gradleis10versionNameis1.10并且您的应用支持应用内更新(检查更新所需的代码)
  • 构建调试 apk
  • 上传到https://play.google.com/console/internal-app-sharing
  • 借助应用下载链接在测试设备中安装应用
  • 在测试设备中至少打开一次应用程序
  • 现在在应用程序中更改versionCode11versionName1.11build.gradle
  • 构建调试应用,上传到internal-app-sharing并获取应用下载链接
  • 在您的测试设备中打开第二个下载链接至少一次(只需打开 - 不要点击更新按钮)
  • 现在打开应用程序应用程序,它将显示应用程序更新对话框。
于 2020-10-28T14:59:04.607 回答
1

确保:

  1. 您安装 Signed Release 版本进行测试

  2. 具有与 Play 商店中相同的 applicationId(您的风味没有任何 applicationIdSuffix)

  3. 并且 versionCode 较低

  4. 并且您的应用程序已发布(作为测试人员,您可以下载它)

于 2019-08-08T10:02:45.797 回答
0

这是我测试应用内更新的方法,并且每次推出时都确认它对我有用。

我使用内部测试轨道和增量版本代码。

  1. 使用 Google Play 商店安装测试应用程序的版本(我使用内部测试轨道推出)

  2. 在 Play Console 上推出另一个版本代码更高的版本(相同的内部测试轨道)

  3. 关闭测试应用程序和 Google Play 商店(不仅仅是回到家,使用最近的密钥并刷掉它们)

  4. 打开 Google Play 商店并确保测试应用有可用的更新(您可以在“我的应用和游戏”> 已安装下查看)

  5. 现在打开测试应用程序并检查 UPDATE_AVAILABLE

这在推出后几乎立即对我有用

显示 UPDATE_NOT_AVAILABLE 的 Android 应用内更新 Api

于 2019-09-08T15:35:00.837 回答