36

最近,谷歌在 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 ~ )

他正在使用模拟器进行操作。它看起来像调试模式。

我怎么能做同样的事情?

4

11 回答 11

73

使用内部应用共享进行测试

测试应用内更新的正确方法是使用内部应用共享(不要与内部测试轨道混淆)。

  1. 首先在这些说明的帮助下设置您的内部应用程序共享。与内部测试跟踪不同,内部应用程序共享使应用程序立即可用。所以没有等待时间。
  2. 选择加入 Google Play 应用签名。这将允许 google play 签署从您提供的应用程序包为设备生成的 apk。详情在这里
  3. 构建您的应用程序包。通过命令行,就是简单的./gradlew bundleReleaseor ./gradlew bundle<variant>
  4. 转到https://play.google.com/apps/publish/internalappsharing/aab并上传app/build/outputs/bundle/<variant>/. 给出一个包含版本代码的体面的名称。
  5. 这将提供一个复制链接。使用它将此捆绑包安装到您的设备。
  6. 在您的应用程序中添加版本代码build.gradle并构建另一个包。注意:版本代码是整数,这是要递增的。版本名称不同,这无关紧要。
  7. 同样,将此新捆绑包上传到内部应用程序共享。用版本代码命名。
  8. 这将提供另一个链接。打开链接,这将打开 google play,您应该会看到“更新”选项。不要点击更新!
  9. 打开您的应用,现在您应该会看到应用内更新提示。

如果您没有看到提示,并且您完全按照这些步骤操作,则很可能是您的代码存在问题。添加一些日志以查看代码中发生了什么。

在我们的测试中,以下内容无助于测试应用内更新(在其他地方建议):

  • 重新上传相同的包/apk,而不增加版本代码
  • 将版本代码减少到低于发布的版本

使用 Alpha 进行测试(封闭轨道)

一旦通过内部应用共享测试成功,我仍然发现通过发布版本测试应用内更新有些问题。经过一些试验,我能够成功通过 Alpha 轨道进行测试。我在此处添加步骤(我假设您熟悉 Google Play 控制台的 Alpha 封闭轨道并将您自己添加为 Alpha 测试人员列表):

  1. 通过 Google Play 安装当前版本的应用程序。这可以来自生产轨道或 alpha 或 beta 轨道。此版本应该已经实现了应用内更新功能,因为这是预计会显示应用内更新提示的版本。
  2. 确保仅为您的应用禁用自动更新。您可以通过 Google Play 应用上您的应用商店列表的菜单项来执行此操作。我们禁用自动更新是因为,我们真的想通过应用内更新来更新应用,而不是在您的设备充电时通过 Google Play 更新应用。
  3. 将新版本(版本代码递增,更改版本名称无关紧要)发布到 Alpha 轨道。
  4. 如今,发布的版本需要一段时间才能出现在 Google Play 中。您可能需要等待几个小时。
  5. 一旦它出现在 Google Play 商店中,您可能会急切地尝试打开您的应用程序。如果出现应用内更新提示,您会很幸运。很可能不会。即使您继续等待几个小时并不断重新启动您的应用程序,应用程序内更新也可能不会显示。按照剩下的步骤,我不必等待。
  6. 完全关闭您的应用程序。
  7. 完全关闭 Google Play 应用。
  8. 清除 Google Play 应用缓存。我发现不需要清除存储,只需清除缓存即可。
  9. 打开 Google Play 并从导航窗格转到我的应用程序和游戏。
  10. 现在 Google Play 将搜索更新。您的应用更新应该会显示出来。当然,不要在这里更新。
  11. 打开您的应用程序。应出现应用内更新提示。如果没有,请使用内部应用共享(上一节中的步骤)测试您的应用内更新,并确保您的实施没有问题。

我想类似的过程也应该适用于 Beta(开放轨道)和生产轨道。

即使在通过 Google Play 提供更新后,最终用户要看到应用内更新,我认为可能需要相当长的时间(几天!)。Google Play 有自己令人困惑的方式。祝你好运。

于 2019-12-10T12:02:31.070 回答
10

这为时已晚,但它可能会帮助其他开发人员。

截至今天,无法对调试版本进行应用内更新测试。您也不需要将您的 apk 放到 PlayStore 进行测试。最好的测试in-app-update方法是使用internal-app-sharing.

如果您一一按照以下步骤进行操作,您将能够成功测试。

  1. 要测试应用程序,测试人员必须首先在 PlayStore 中启用 Internal-App-Sharing,点击此链接相同,如何为 Android 启用内部应用程序共享?
  2. 如果你有足够的勇气看懂官方文档,那么只需点击这个链接in-app-update在你的设备中设置测试,https://developer.android.com/guide/playcore/in-app-updates#internal-app-分享

在这里,我将用简单的文字写下相同的内容。

完成设置后internal-app-sharingPlay-Store请确保您必须将 2 个 apk 上传到 internal-app-sharing on Play-Console,从而生成 2 个链接。两个 apk 将使用相同的签名signing-key(不必与您用于为生产签名的那个相同,任何虚拟签名密钥都可以使用)。

  1. 首先,您将具有较低版本代码(例如 100)的应用内更新实现的 apk 上传到播放控制台上的内部应用共享。

要了解如何在 Play-Console 上将 apk 上传到 internal-app-sharing,请遵循此 lisk,https://support.google.com/googleplay/android-developer/answer/9844679? visit_id=637437125318137239-1277036129&rd=1

注意:确保您已卸载设备中具有相同包名的任何预安装应用程序。

  1. 现在,您将上传的应用程序的链接复制到播放控制台上的 internal-app-sharing 并使用此链接在您的设备上安装该应用程序。

注意:在安装之前,请确保您在 play-store 上使用的电子邮件 ID 已添加到 play-console 上 internal-app-sharing 的邮件列表中。

  1. 现在,一旦您使用该链接安装了该应用程序。现在,您需要再次创建一个具有更高版本代码(例如 101)的新签名 apk。并将此 apk 上传到 internal-app-sharing。

  2. 现在,从 internal-app-sharing 复制具有更高 VersionCode 的链接。在您的设备上单击此链接,它将带您进入 Play-store,但这次,update按钮将被启用,而不是install按钮,因为您的设备中已经安装了较低版本代码的应用程序。

  3. 您不必单击 PlayStore 上的更新按钮。您只需单击链接,然后在 PlayStore 上打开屏幕。现在关闭 PlayStore 应用程序。

  4. 现在,您可以从您的设备启动已安装的应用程序。

如果您的应用内更新实现很好,启动应用程序将出现来自 PlayStore 的更新对话框。

最后,如果它对您有任何帮助,请不要忘记投票。继续编码!

于 2021-03-01T18:06:37.043 回答
7

或者,您可以将此类用作 UNIT 测试来模拟应用内更新

FakeAppUpdateManager

这有一些预定义的方法。

于 2019-07-16T09:24:32.823 回答
6

就我而言,我已经完成了以下步骤:

  1. 从设备上卸载原始应用程序。
  2. 从 Google Play 商店安装应用程序(我的应用程序已经在商店中,但如果你没有,你可以创建一个 alpha 或 beta 版本,而不用在商店中发布它)。
  3. 再次卸载应用程序。
  4. 使用新功能生成签名 apk,versionCode 低于 Google Play 版本
  5. 安装这个apk。

启动时,它会检查 Google Play 商店中的新版本,并显示助手进行更新。如果此解决方案在某个设备上有效,但在其他设备上无效,请尝试使用相同的 Google 帐户登录,然后在此设备上再次尝试 5 个步骤。然后您可以再次使用您的原始帐户。出于某种疯狂的原因,Google Play 似乎“激活”了版本控制,并返回该版本在其余设备中再次可用。

我不知道确切的行为...

于 2019-09-10T11:15:43.873 回答
6

查看FakeAppUpdateManager的文档

或尝试以下预定义的方法将帮助您测试应用程序更新是否可用。

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");
                }
            }
        });
于 2020-06-13T06:08:49.100 回答
4

嗯...我找到了解决方案。它与 Google I/O 2019 - Developer Keynotes 上的演示不同。

我将签名的发布 apk 发布到内部开发人员版本中。它工作正常。

或者您可以在“Alpha/Beta close test publish”上发布它。

于 2019-05-11T07:19:49.447 回答
3

我不知道此时你是否已经把它弄下来了,但经过一段时间的测试,我发现降低versionName是我需要做的才能正确测试它,然后我才测试只降低versionCode.. . 我认为 API 应该能够在versionNameorversionCode过时时处理,但显然它没有。

于 2019-07-03T18:14:45.307 回答
2

Google Play 控制台中的内部测试轨道是测试应用内更新时使用的出色工具。

于 2019-07-10T09:37:34.267 回答
1
  1. 生成一个较低版本的单独应用程序包,并将其从 Play 控制台上传到内部应用程序共享。
  2. 使用生成的链接在您的设备上安装应用程序。
  3. 再次生成一个版本代码和版本号比以前更高的应用程序包
  4. 上传到内部应用共享
  5. 打开新生成的链接,但不要从 Play 商店更新应用程序。
  6. 再次打开旧应用程序。
  7. 现在,您将成为应用程序,可以在旧安装的应用程序中看到更新弹出窗口。

注意 - 即使版本更高,使用内部应用共享安装的应用也无法更新为实时应用。

为了简单起见,我正在使用这个应用内更新

于 2021-04-06T07:17:20.943 回答
0

对我来说,文档中疑难解答部分的最后一步使它起作用了!

基本上,在您更改应用程序的版本(版本名称和代码)后,请执行以下操作:

确保帐户符合条件并且 Google Play 缓存是最新的。为此,在测试设备上登录 Google Play Store 帐户后,请执行以下操作:
确保完全关闭 Google Play Store 应用程序。
打开 Google Play 商店应用并转到我的应用和游戏选项卡。
如果您正在测试的应用程序没有出现可用更新,请检查您是否已正确设置测试轨道。

于 2019-10-04T22:51:35.310 回答
0

1.从设备上卸载原始应用程序。

2.从 Google Play 商店安装应用程序(我的应用程序已经在商店里了,但如果你没有,你可以搜索任何应用程序并复制包名并添加到你的测试应用程序包名两者都是相同的)。

3.再次卸载应用程序。

4.转到您的 gradle 并设置较低的版本代码,如 1。

5.同步

6.安装。

7.现在您将成为应用程序,可以在旧安装的应用程序中看到更新弹出窗口。

于 2021-08-21T09:20:52.440 回答