在调试设备上测试时,应用内更新 API 显示 UPDATE_NOT_AVAILABLE

In-App Update API showing UPDATE_NOT_AVAILABLE while testing on debugging device

我正在尝试集成新的应用程序内更新 API,但我无法测试它的实施。似乎我的代码没问题,因此我阅读了 Troubleshoots 并且无法理解本文档中的 2 点

Make sure that the app that you are testing is signed with the same signing key as the one available from Google Play.

  1. 在连接的设备上安装 Apk 时,如何在调试模式下使用相同的签名密钥进行签名?

If the app you are testing doesn’t appear with an available update, check that you’ve properly set up your testing tracks.

  1. 是否必须在内测轨道发布App来测试实现?

无论如何,我只是想在我的设备上进行测试,我减少了 Play 商店版本的版本代码,但它总是显示 UPDATE_NOT_AVAILABLE

这是代码:-

val appUpdateInfo: Task<AppUpdateInfo> = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnSuccessListener {
    if (it.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && it.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
        appUpdateManager.startUpdateFlowForResult(it, AppUpdateType.FLEXIBLE, this, 2);
    }else{
        toast("Not Available")
    }
}

对于第一个问题,他们说您需要使用您的发布密钥库对应用程序进行发布构建。然后,您可以将生成的 .apk 文件附加到 e-mail 并将其 e-mail 附加到您自己。然后,检查 android 设备上的 e-mail 并将 .apk 附件下载到您的下载文件中,在下载结束时,Android 会询问您是否要安装 .apk ,说是(如果它不询问,则单击您的下载文件夹中的文件,然后它应该询问)。

对于第二个问题,我能想到的唯一方法是通过内部测试轨道进行测试,因为您必须与 Google Play 店面进行交互,但不会影响您的实时发布版本。

还有 FakeAppUpdateManager 就是为此目的而创建的。 你可以使用它。

首先,您必须将应用发布到 Google Play。确保:

  1. 您发布的版本代码高于您要用来测试更新的版本代码,因为如果不是这样,它就不会将其识别为更新。然后让 Google Play 刷新它的缓存一段时间(在我的例子中,我等了 12 个小时才让它第一次工作)。
  2. 您使用相同的签名签署了两个 apk。

如果您想要一个可用的演示应用程序,我已经上传了一个 git repository with a lower version code than the one that I've published in Google Play

我从 Google Play 安装了我的应用程序。然后我删除了它并安装了带有较低版本代码的签名apk。

"In-app updates are available only to user accounts that own the app. So, make sure the account you’re using has downloaded your app from Google Play at least once before using the account to test in-app updates." developer.android.com/guide/app-bundle/in-app-updates

发布后需要等待,需要 2 到 6 个小时。

我遇到了 UPDATE_NOT_AVAILABLE 的类似问题。经过几个小时的研究,我是这样解决的:

  1. 使用 Google Play 商店安装测试应用程序版本(我使用内部测试轨道推出)

  2. 在 Play 管理中心推出另一个版本代码更高的版本(相同的内部测试轨道)

  3. 关闭测试应用程序和 Google Play 商店(不只是回到家,使用最近使用的键并将它们滑动关闭)

  4. 打开 Google Play 商店并确保测试应用程序有可用的更新(您可以在 "My Apps & Game" > 已安装下查看)

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

推出后几乎立即对我有用

手动测试的基本要求

为了在测试设备上手动执行完整的更新流程,您应该至少有两个版本号不同的应用程序:源版本和目标版本。

  • 具有更高版本号的源版本应在 Google Play 上发布,这是 Google Play 将识别为可用更新的版本。您的设备上应安装具有较低版本号和集成 IAUs(应用内更新)功能的目标版本,这是将要更新的版本。问题是,当应用程序请求 Google Play 检查可用更新时,它会将已安装应用程序的版本号与最后一个可用内置 Google Play 的版本号进行比较。因此,仅当 Google Play 中的版本号高于设备上应用程序的实际版本时,才会触发 IAU 功能。
  • 源版本和目标版本都需要具有相同的包名称,并且应该使用相同的发行证书进行签名。
  • Android 5.0(API 21 级)或更高。
  • Play Core 库 1.5.0 或更高版本。

Update is Not Available ERROR

首先,请仔细检查上述要求。如果您按照所有要求成功完成上述列出的步骤但仍然出现错误,请注意以下技巧。 最可能的原因是 Google 由于内部缓存机制,Play 应用尚不知道更新。 为确保您在手动测试时拥有最新的缓存,您可以前往 Google Play 应用程序中的“我的应用程序和游戏”屏幕刷新缓存版本。另外,替代方法是,您可以在设置 中清除Google Play 应用程序的缓存。请注意,这只是一个测试问题,不会影响最终用户,因为缓存每天都会更新。

注意 - App Bundle 对于 IAU 不是强制性的。

正如 Arpit J. 所建议的测试应用程序的基本主要要求,如果您仍然无法成功测试该应用程序,我想再添加最后一步,以帮助您快速测试该应用程序。

如图所示,从设置中转到播放商店应用信息,并按照所附屏幕截图所示清除数据。转到播放商店应用信息的步骤可能因设备而异。

在再次彻底阅读文档之前,我为同样的问题苦苦挣扎了几天。阅读 this section 应用内更新的官方文档。

link描述正确的测试程序如下:

  1. On your test device, make sure you've already installed a version of your app that meets the following requirements:
  • 该应用是使用内部应用共享安装的 URL
  • 支持应用内更新
  • 使用的版本代码低于您应用的更新版本
  1. Follow the Play Console instructions on how to share your app internally. Make sure you upload a version of your app that uses a version code that's higher than the one you have already installed on the test device.
  2. On the test device, only click the internal app-sharing link for the updated version of your app. Do not install the app from the Google Play Store page you see after clicking the link.
  3. Open the app from the device's app drawer or home screen. The update should now be available to your app, and you can test your implementation of in-app updates.

这也非常有用,因为您不必等待应用发布,您可以立即开始测试。

最终通过从 Play 商店 -> 我的应用和游戏 -> 库中删除该应用解决了这个问题。

  • 您必须使用与先前版本相同的密钥库安装发布应用程序。

当您之前在您的设备上或在 Play 商店中共享相同 gmail 地址的任何设备上安装了具有更高版本代码的相同应用程序时,就会发生这种情况。 希望这有帮助。

当内部应用共享不起作用时

内部应用共享无法在真实设备上运行。我测试了几个小时,总是得到最新版本的 Internal Test 而不是我所期望的 Interal App Sharing

解决方案是使用带有 Play 商店的模拟器。

我一步步描述:

  1. 创建 Google Play 大于或等于 API Level 21 5.0.
  2. 的虚拟设备
  3. 打开模拟器并使用内部测试人员列表中的google帐户登录。
  4. 构建 2 个不同版本的 APK。每个具有相同 versionCode 和 versionName 的临时 在执行安装时去检查。例如:

APK 1: versionCode and versionName: 100

APK 2: versionCode and versionName: 101

  1. 将 APK 1 上传到 internalappsharing,versionCode 和 versionName 为 100

  2. 将 APK 1 的共享 link 复制并粘贴到 Keep Notes 网络应用中。

  3. 使用模拟器 Keep Notes 应用程序中的 link 安装版本代码为 100 的 APK 1。
  4. 最重要的事情:检查安装的应用程序的版本名称是否为 100。
  5. 如果我们此时打开 APK 1,则只有在我们上传更大版本的 APK 2 后才会有可用的更新。
  6. 将代码为 101 的 APK 2 上传到 internalappsharing
  7. 将 APK 2 link 复制并粘贴到 Keep Notes 网络应用中。
  8. 不要从 link 安装 APK 2。只需输入 APK 2 link 即可检查 Play 商店是否描述了更新。
  9. 使用 APK 1 打开安装在模拟器上的应用,并在应用内安装更新。

最后,每次他们输入一个 link,其版本代码大于上次从模拟器安装的版本代码时,他们将看到新更新的存在,该更新应该安装在应用程序中,而不是从Play 商店。


值得一提的是Logcat兼容内部应用分享。

GL

Source

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

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

  1. 要测试应用程序,测试人员必须首先在 PlayStore 中启用内部应用程序共享,然后按照此 link 进行相同操作,
  2. 如果你有足够的勇气看懂官方文档,那么只需按照这个link在你的设备中设置in-app-update测试,https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

在这里,我将用通俗易懂的语言写下同样的内容。

Play-Store 中完成设置 internal-app-sharing 后,请确保您必须将 2 个 apk 上传到 Play-Console 上的 internal-app-sharing 并因此生成 2 link秒。两个 apk 都将使用相同的 signing-key 进行签名(不需要与您用于生产签名的相同,任何虚拟签名密钥都可以)。

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

要了解如何将 apk 上传到 Play-Console 上的内部应用共享,请关注此列表,https://support.google.com/googleplay/android-developer/answer/9844679?visit_id=637437125318137239-1277036129&rd=1

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

  1. 现在,您将上传的应用程序 link 复制到 Play 控制台上的内部应用程序共享,然后使用此 link 在您的设备上安装该应用程序。

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

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

  2. 现在,从 internal-app-sharing 复制更高版本代码的 link。在您的设备上单击此 link,它将带您进入游戏商店,但这次,将启用 update 按钮而不是 install 按钮,因为您的设备中已经安装了应用程序降低版本代码。

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

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

如果您的应用内更新实现正常,则启动该应用会出现来自 PlayStore 的更新对话框。

Lastly, don't forget to upvote if it helps you in any way. Keep Coding!