最近,Google在Google I / O 2019中引入了“应用内更新”。
所以我正在尝试使用它。
val appUpdateManager = AppUpdateManagerFactory.create(this)
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnCompleteListener {
val result = it.result
if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& result.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
info("should show update")
appUpdateManager.startUpdateFlowForResult(
result,
AppUpdateType.FLEXIBLE,
this,
1)
} else {
info("This is already latest version: ${result.updateAvailability()}")
}
}
但是“ result.updateAvailability()”始终为“ UpdateAvailability.UPDATE_NOT_AVAILABLE”。
为此,我制作了一个带有先前版本代码的签名发行版APK。 但这不起作用......
根据Developer Keynote (16:40 ~ )上的演示
他正在用模拟器来做。 看起来像调试模式。
我该怎么做?
答案 0 :(得分:5)
对于我来说,我已经完成了以下步骤:
启动时,它会在Google Play商店中检查新版本,并显示助手进行更新。 如果此解决方案只能在某台设备上使用,而不能在另一台设备上使用,请尝试使用相同的Google帐户登录,然后在该设备上再次尝试5个步骤。然后,您可以再次使用原始帐户。出于某种疯狂的原因,Google Play似乎“激活”了版本控制,并返回了在其他设备上再次可用的版本。
我不知道具体的行为...
答案 1 :(得分:4)
这为时已晚,但它可能会帮助其他开发者。
截至今天,无法对调试版本进行应用内更新测试。您也不需要将您的 apk 放到 PlayStore 进行测试。测试 in-app-update
的最佳方法是使用 internal-app-sharing
。
如果您一一按照以下步骤进行操作,您将能够成功测试。
in-app-update
测试,https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing在这里,我会用简单的词来写同样的内容。
在 internal-app-sharing
中完成 Play-Store
设置后,请确保您必须在 Play-Console
上将 2 个 apk 上传到内部应用共享,从而生成 2 个链接。两个 apk 都将使用相同的 signing-key
进行签名(不必与您用于为生产签名的相同,任何虚拟签名密钥都可以使用)。
要知道如何将 apk 上传到 Play-Console 上的内部应用共享,请按照此 lisk,https://support.google.com/googleplay/android-developer/answer/9844679?visit_id=637437125318137239-1277036129&rd=1
注意:确保您已经卸载了设备中所有具有相同软件包名称的预装应用。
注意:安装前,请确保您在 play-store 上使用的电子邮件 ID 已添加到 play-console 上 internal-app-sharing 的邮件列表中。
现在,一旦您使用链接安装了应用程序。现在,您需要再次创建一个具有更高版本代码(例如 101)的新签名 apk。并将这个apk上传到internal-app-sharing。
现在,从 internal-app-sharing 复制具有更高版本代码的链接。在您的设备上单击此链接,它将带您进入游戏商店,但这次将启用 update
按钮而不是 install
按钮,因为您的设备中已经安装了具有较低版本代码的应用程序。< /p>
您不必点击 PlayStore 上的更新按钮。您只需单击该链接,即可在 PlayStore 上打开屏幕。现在关闭 PlayStore 应用。
现在,您可以从您的设备启动已安装的应用。
如果您对应用内更新的实现没有问题,启动应用时会出现 PlayStore 中的更新对话框。
<块引用>最后,如果它对您有任何帮助,请不要忘记点赞。保持 编码!
答案 2 :(得分:3)
或尝试以下预定义方法将帮助您测试应用程序更新是否可用。
FakeAppUpdateManager fakeAppUpdateManager = new FakeAppUpdateManager(this);
fakeAppUpdateManager.setUpdateAvailable(1); // add app version code greater than current version.
fakeAppUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
@Override
public void onSuccess(AppUpdateInfo appUpdateInfo) {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
System.out.println("checkForAppUpdateAvailability");
}
}
});
答案 3 :(得分:2)
嗯... 我找到了解决方案。 它与Google I / O 2019上的演示-开发人员主题演讲不同。
我将签名的发行版APK发布到内部开发人员版本中。 而且效果很好。
或者您可以将其发布在“ Alpha / Beta关闭测试发布”上。
答案 4 :(得分:2)
测试应用内更新的正确方法是使用内部应用共享(不要与内部测试跟踪相混淆)。
./gradlew bundleRelease
或./gradlew bundle<variant>
。aab
文件,该文件位于app/build/outputs/bundle/<variant>/
下。给一个体面的名字,其中包括版本代码。build.gradle
中添加版本代码并构建另一个捆绑。如果您没有看到提示符 ,并且您没有完全按照以下步骤操作,则很可能是代码有问题。添加一些日志记录以查看代码中发生了什么。
在我们的测试中,以下内容无助于测试应用内更新(在其他地方建议):
答案 5 :(得分:0)
我不知道这次您是否已经掌握了它,但是经过一段时间的测试,我发现降低versionName
是我需要做的,以便能够正确测试它测试仅减少versionCode
...
我认为只要versionName
或versionCode
过时,API都应该能够处理,但显然不是。
答案 6 :(得分:0)
在测试应用内更新时,Google Play控制台中的内部测试跟踪是一个出色的工具。
答案 7 :(得分:0)
答案 8 :(得分:0)
对我来说,docs中“疑难解答”部分的最后一步使它起作用了!
基本上,在更改应用程序的版本(版本名称和代码)后,请执行以下操作:
确保该帐户符合条件,并且Google Play缓存最多 日期。为此,在登录Google Play商店帐户后, 测试设备,请执行以下操作:
确保完全关闭 Google Play商店应用。
打开Google Play商店应用,然后转到 我的应用和游戏标签。
如果您正在测试的应用没有出现 可用的更新,请检查您是否已正确设置测试 轨道。
答案 9 :(得分:0)
注意 - 安装有内部应用共享的应用无法更新为实时应用,即使版本更高。
为了简单起见,我使用此应用内更新 library。