Android Play Billing Library:onSkuDetailsResponse responseCode为0,但skuDetailsList的大小也为0

时间:2017-10-17 04:13:14

标签: android android-billing android-inapp-purchase play-billing-library

我现在正在使用新的播放结算库

基本上,我按照文档查询了要购买的商品

 SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(itemType);
            mBillingClient.querySkuDetailsAsync(params.build(),
                    new SkuDetailsResponseListener() {

                        @Override
                        public void onSkuDetailsResponse(int responseCode,
                                                         List<SkuDetails> skuDetailsList) {
                            listener.onSkuDetailsResponse(responseCode, skuDetailsList);
                        }

但是,responseCode为0且列表也为空。但我检查了BillingSetupFinished是否成功。提供给SkuDetailsParams.Builder的skuList不为空,skuList(sku_id)中的值也与Google Play控制台上指定的产品ID相同。

有谁知道原因?谢谢!

9 个答案:

答案 0 :(得分:9)

听起来您的Google Play Console设置存在问题。

请检查:

  • 您的应用已在Play控制台中发布(至PROD或您的@gmail帐户位于用户的alpha / beta群组中)
  • 具有正确的签名,测试应用的版本代码等于已发布的
  • 所有SKU也已发布
  • 您的Play商店应用在您正在测试的手机上正常运行(例如,允许您购买应用)

设置完成后等待一段时间。

答案 1 :(得分:2)

我也遇到了同样的问题,但是通过执行以下操作,我得到了SkuDetails。

  • 停止Google Play应用
  • 删除Google Play应用的缓存
  • 停止应用程序并启动它

答案 2 :(得分:2)

我花了几个小时解决这个问题,问题是我的调试版本/ CI版本具有applicationIdSuffix。因此,只有具有正确applicationID的生产版本才能检索产品。

答案 3 :(得分:1)

您不需要上传APK。

您应该会感到怀疑。即使在调试模式下测试BillingClient,它也应该可以正常工作。

确保产品或订阅处于活动状态。

花点时间。结算过程可能需要几个小时才能更新您的产品。

答案 4 :(得分:1)

如果应用程序中集成的产品是订阅,请确保设置 from rasa_core.events import ConversationPaused class ActionTalkToAgent(Action): def name(self): return "action_talk_to_agent" def run(self, dispatcher, tracker, domain): if tracker.get_slot("lang") == "bn": dispatcher.utter_template("utter_restart_bot_bn", tracker) else: dispatcher.utter_template("utter_restart_bot_en", tracker) return [ConversationPaused()] 而不是SkuType.SUBS

SkuType.INAPP

GL

Cloud Watch Logs SDK

答案 5 :(得分:0)

核心问题是Google缓存了您的SKU详细信息,并且存在多层缓存。

您手机上的本地Google Play商店应用会缓存SKU详细信息,而Google的服务器端也会对其进行缓存。 ("There are only two hard things in Computer Science: cache invalidation and naming things."

最终,如果您等待足够长的时间,缓存将过期,并且Google将开始显示正确的信息。但是谁有时间呢?

由于涉及时间因素,因此很难知道什么有帮助,什么无用,但这是对我有用的。

  1. 在内部测试或Alpha轨道上设置APK的版本。 (第一次执行此操作时,必须等待应用程序完成“待发布”。等待本身可以解决问题。)

    至少设置一名测试人员,获得选择加入链接(这需要等待您的应用完成“待发布”),然后选择加入。

  2. 使用“设置”应用的“应用”部分,强制停止并删除Google Play商店应用的缓存。单击“存储”以访问“清除缓存”按钮。

  3. 通过内部测试轨道下载该应用程序的版本。使用android.util.Log记录您的SKU详细信息,并使用Logcat验证您的SKU详细信息是否正确显示。

...但是不用担心,您不必每次都要进行测试。 Google Play商店缓存更新后,您应该可以使用Android Studio在调试版本中访问您的SKU。

如果在您的内部测试版本中不起作用

  1. 卸载该应用,强制停止Google Play商店应用,清除其缓存,然后再次下载内部测试版本。
  2. 仍然无法正常工作吗?您的Google Play开发者控制台出了点问题。也许您的产品尚未激活?也许您在SKU列表中拼错了SKU?

如果它可以在您的内部测试版本中使用,但不能在同一设备上的调试版本中使用

在这种情况下,Google Play商店缓存是正确的,但是您的调试版本与创建的内部测试版本有所不同。

  1. 验证您的调试版本使用与内部测试版本相同的程序包名称。 applicationIdSuffix是这里的常见罪魁祸首。
  2. 验证您的调试版本版本代码是否与您上传到内部测试的APK版本代码匹配。
  3. 尝试在不使用Google Play商店的情况下手动安装内部测试APK。如果有效,则您有两个APK,其中一个有效,而其中一个无效。检查它们是否存在差异。 (APK是zip文件;您可以在其中浏览。)

答案 6 :(得分:0)

除了先前的答案外,当您在没有Internet连接的情况下执行搜索时,SkuDetailsList可能为空。因此,您也必须在代码中管理这种情况。

答案 7 :(得分:-1)

对于无法进行应用内购买的国家(古巴,中国等)的用户,也可能发生这种情况

在播放控制台的Pricing & distribution部分中查看国家/地区状态

答案 8 :(得分:-1)

您的应用必须在Google Play商店中获得批准,这可能需要长达1周的时间