当新版本在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上传了构建版本。
尝试以下方式。
答案 0 :(得分:1)
请确保:
您安装了Signed Release版本进行测试
具有与Play商店相同的applicationId(您的口味没有任何applicationIdSuffix)
,versionCode较低
,您的应用已发布(作为测试人员,您可以下载它)
答案 1 :(得分:1)
这是我测试应用程序内更新的方式,并且每次我确认它都对我有效。
我使用内部测试跟踪并递增版本代码。
使用Google Play商店安装测试应用程序的一个版本(我使用内部测试轨道展示)
在Play控制台(相同的内部测试轨道)上推出具有更高版本代码的另一个版本
关闭测试应用和Google Play商店(不仅回到家中,使用最近的密钥并将其擦去)
打开Google Play商店并确保测试应用具有可用的更新(您可以在“我的应用和游戏”>“已安装”中进行检查)
现在打开测试应用程序并检查UPDATE_AVAILABLE
这在推出后几乎立即对我有效
答案 2 :(得分:1)
与其他答案相反,该说法表明测试版本必须处于发布模式或必须上载到Play控制台测试轨道-完全错误,文档中没有任何提及。
如果您符合API> = 21的要求,并且&&可以连接互联网并且遇到此问题,请执行以下操作来解决:
似乎是PlayStore的缓存问题,上述步骤可以刷新它。之后,即使在调试模式下,您也可以在In App Updates中进行测试。
答案 3 :(得分:0)
在测试过程中对我有帮助的是打开Google Play商店应用并从抽屉菜单中打开“我的应用和游戏”位置。
确保在“更新”选项卡上,您经过测试的应用程序出现在“待更新的更新”中。
我认为该库不会检查某些Google api是否有可用的更新,但是正在检查某种类型的Google Play商店应用缓存
希望有帮助 干杯 Wojtek
答案 4 :(得分:0)
我也面临同样的问题,以上解决方案均无效。我的理解是,如果versionCode
在build.gradle中增加,那么它将标识为更新。
我遵循以下顺序。
versionCode
中当前的build.gradle
为10
,而versionName
为1.10
,并且您的应用支持应用内更新(需要代码以检查是否存在更新)versionCode
中将11
更改为versionName
,将1.11
更改为build.gradle