在App Update API中,始终返回1(UPDATE_NOT_AVAILABLE)

时间:2019-07-03 05:28:19

标签: android android-app-bundle in-app-update

当新版本在Play商店中可用时,我正在更新应用程序中使用In-App Update API

模块gradle

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

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

尝试以下方式。

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

5 个答案:

答案 0 :(得分:1)

请确保:

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

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

  3. ,versionCode较低

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

答案 1 :(得分:1)

这是我测试应用程序内更新的方式,并且每次我确认它都对我有效。

我使用内部测试跟踪并递增版本代码。

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

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

  3. 关闭测试应用和Google Play商店(不仅回到家中,使用最近的密钥并将其擦去)

  4. 打开Goog​​le Play商店并确保测试应用具有可用的更新(您可以在“我的应用和游戏”>“已安装”中进行检查)

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

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

Android In-App Update Api showing UPDATE_NOT_AVAILABLE

答案 2 :(得分:1)

与其他答案相反,该说法表明测试版本必须处于发布模式或必须上载到Play控制台测试轨道-完全错误,文档中没有任何提及。

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

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

似乎是PlayStore的缓存问题,上述步骤可以刷新它。之后,即使在调试模式下,您也可以在In App Updates中进行测试。

答案 3 :(得分:0)

在测试过程中对我有帮助的是打开Goog​​le Play商店应用并从抽屉菜单中打开“我的应用和游戏”位置。

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

我认为该库不会检查某些Google api是否有可用的更新,但是正在检查某种类型的Google Play商店应用缓存

希望有帮助 干杯 Wojtek

答案 4 :(得分:0)

我也面临同样的问题,以上解决方案均无效。我的理解是,如果versionCode在build.gradle中增加,那么它将标识为更新。

我遵循以下顺序。

  • 假设您在versionCode中当前的build.gradle10,而versionName1.10,并且您的应用支持应用内更新(需要代码以检查是否存在更新)
  • 构建调试APK
  • 将其上传到https://play.google.com/console/internal-app-sharing
  • 借助应用下载链接将应用安装到测试设备中
  • 在测试设备中至少打开一次应用程序
  • 现在在应用程序versionCode中将11更改为versionName,将1.11更改为build.gradle
  • 构建调试应用,将其上传到内部应用共享中,并获取应用下载链接
  • 在测试设备中至少打开一次第二个下载链接(只需打开-请勿单击“更新”按钮)
  • 现在打开应用程序的应用程序,它将显示“应用程序更新”对话框。