在调试设备上进行测试时,Android应用内更新Api显示UPDATE_NOT_AVAILABLE

时间:2019-05-13 19:12:34

标签: android kotlin google-play

我正在尝试集成新的IN-App Update Api,但无法测试其实现。似乎我的代码很好,因此我阅读了Troubleshoots,但无法理解本文档中的2点

  

确保您要测试的应用使用与Google Play可用的签名密钥相同的签名密钥进行签名。

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

如果您正在测试的应用没有显示可用更新,   检查您是否已正确设置测试轨道。

  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")
    }
}

12 个答案:

答案 0 :(得分:2)

手动测试的基本要求

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

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

更新不可用错误

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

注意-对于IAU,App Bundle不是必需的。

答案 1 :(得分:1)

我从Google Play安装了我的应用。然后我删除了它,并用较低的versionCode安装了签名的apk。

  

“应用内更新仅适用于拥有该应用的用户帐户。   因此,请确保您使用的帐户已从以下位置下载了您的应用   使用该帐户测试应用内功能之前,请至少Google Play一次   更新。”   developer.android.com/guide/app-bundle/in-app-updates

答案 2 :(得分:1)

我遇到了类似的问题,即拥有UPDATE_NOT_AVAILABLE。经过数小时的研究,这是我的解决方法:

  1. 使用Google Play商店安装测试应用程序的一个版本(我使用内部测试轨道展示)

  2. 在Play控制台(相同的内部测试轨道)上推出具有更高版本代码的另一个版本

  3. 关闭测试应用和Google Play商店(不仅回到家中,使用最近的密钥并将其擦去)

  4. 打开Goog​​le Play商店并确保测试应用具有可用的更新(您可以在“我的应用和游戏”>“已安装”中进行检查)

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

这在推出后几乎立即对我有效

答案 3 :(得分:1)

最后通过从Play商店->我的应用和游戏->库中删除该应用程序解决了此问题。

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

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

答案 4 :(得分:0)

对于第一个问题,他们说您需要使用发布密钥库对应用程序进行发布构建。然后,您可以将生成的.apk文件附加到电子邮件中,然后通过电子邮件发送给自己。然后,在您的android设备上检查您的电子邮件,然后将.apk附件下载到您的下载文件中,然后在下载结束时,Android应询问您是否要安装.apk,请回答“是”(如果没有询问) ,然后单击您的下载文件夹中的文件,然后它应该询问。)

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

答案 5 :(得分:0)

还为此目的创建了FakeAppUpdateManager。 您可以使用它。

答案 6 :(得分:0)

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

  1. 您发布的版本代码高于将用于测试更新的版本代码,因为如果没有,则它将不会将其识别为更新。然后,让Google Play刷新缓存一段时间(以我为例,我已经等待了12个小时才能首次启用它)。
  2. 您已经用相同的签名对两个APK进行了签名。

如果您想拥有一个运行中的演示应用程序,我上传的git repository的版本代码比我的published in Google Play的版本代码低。

Working in-app updates UI

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我为同一问题苦苦挣扎了几天,然后才再次彻底阅读文档。阅读this section,了解应用内更新的官方文档。

该链接描述了正确的测试过程,如下所示:

  
      
  1. 在测试设备上,确保已安装满足以下要求的应用程序版本:

         
        
    • 该应用是使用内部应用共享网址安装的
    •   
    • 支持应用内更新
    •   
    • 使用的版本代码低于应用程序的更新版本
    •   
  2.   
  3. 按照Play控制台说明如何在内部共享您的应用。确保您上传的应用程序版本使用的版本代码高于测试设备上已安装的版本代码。

  4.   
  5. 在测试设备上,仅单击内部应用程序共享链接以获取应用程序的更新版本。单击链接后,请勿从显示的Google Play商店页面安装应用。
  6.   
  7. 从设备的应用程序抽屉或主屏幕中打开应用程序。现在,该更新应可用于您的应用程序,并且您可以测试应用程序内更新的实现。
  8.   

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

答案 9 :(得分:0)

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

内部应用程序共享在实际设备上不起作用。我进行了几个小时的测试,始终获得最新版本的内部测试,而不是我期望的内部应用程序共享之一。

解决方案是在Play商店中使用模拟器。

我将逐步介绍:

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

APK 1: versionCode and versionName: 100

APK 2: versionCode and versionName: 101

  1. 使用versionCode和versionName 100将APK 1上载到internalappsharing

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

  3. 使用仿真器Keep Notes应用程序中的链接安装带有versionCode 100的APK 1。
  4. 最重要的事情:检查已安装的应用程序的版本名称为100。
  5. 如果我们此时打开APK 1,则只有在上传较大版本的APK 2之前,无法进行任何更新。
  6. 将代码为101的APK 2上传到internalappsharing
  7. 将APK 2链接复制并粘贴到Keep Notes网络应用中。
  8. 请勿从链接安装APK 2。只需输入APK 2链接即可检查Play商店是否描述了更新。
  9. 使用APK 1打开模拟器上安装的应用,然后在应用内安装更新。

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

enter image description here


值得一提的是, Logcat 与内部应用程序共享兼容。

GL

Source

答案 10 :(得分:0)

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

如果您一步一步地执行以下步骤,则可以成功进行测试。

  1. 要测试该应用,测试人员必须首先在PlayStore中启用Internal-App-Sharing,然后点击此链接以获取相同的How to Enable Internal App Sharing for Android?
  2. 如果您足够勇于理解正式文档,只需点击此链接即可在设备https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing中设置in-app-update测试

在这里,我会用简单的文字写出来。

internal-app-sharing中设置Play-Store后,请确保必须将2个APK上传到Play-Console上的内部应用共享中,并因此生成2个链接。这两个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. 现在,您将上传的应用程序的链接复制到播放控制台上的内部应用程序共享中,并使用此链接在设备上安装该应用程序。

注意:在安装之前,请确保您在Play商店上使用的电子邮件ID已添加到Play控制台上内部应用共享的邮件列表中。

  1. 现在,使用链接安装应用程序后。现在,您需要再次使用更高的VersionCode(例如101)创建一个新的签名APK。并将此apk上传到内部应用共享。

  2. 现在,从内部应用共享中复制具有更高VersionCode的链接。单击设备上的此链接,它将带您进入播放存储,但是这一次,将启用update按钮,而不是install按钮,因为您的设备中已经安装了版本号较低的应用。< / p>

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

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

如果您对应用程序内更新的实施正常,则启动应用程序将显示PlayStore中的对话框以进行更新。

答案 11 :(得分:-1)

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

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

enter image description here

enter image description here

enter image description here

enter image description here