在 App Update API 中总是返回 1 (UPDATE_NOT_AVAILABLE)

Meh*_*ria 11 android android-app-bundle in-app-update

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

模块gradle

defaultConfig {
        applicationId "xxx.xxxxx"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode rootProject.ext.vCode
        versionName rootProject.ext.vName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)

上次上传版本(在 Playstore 中直播)

vCode = 5
vName = "1.0.4"
Run Code Online (Sandbox Code Playgroud)

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

vCode = 4
vName = "1.0.3"
Run Code Online (Sandbox Code Playgroud)

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

主活动.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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

尝试了以下方法。

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

Ale*_*erl 8

与其他答案相反,其他答案说测试版本必须处于发布模式或必须上传到 Play Console 测试轨道 - 这是完全错误的,文档中没有任何提及这一点。

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

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

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

  • 我安装了签名的 APK,并且 Play 商店向我显示了更新按钮,即使我收到的更新状态是 UPDATE_NOT_AVAILABLE=。 (7认同)

ild*_*lin 1

确保:

  1. 您安装签名发布版本进行测试

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

  3. 并且 versionCode 较低

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