我现在正在使用新的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相同。
有人知道原因吗?谢谢
我也遇到了同样的问题,但通过执行以下操作,我得到了SkuDetails。
- 停止Google Play应用程序
- 删除Google Play应用程序的缓存
- 停止并启动应用程序
我花了几个小时处理这个问题,问题是我的调试构建/CI构建有applicationIdSuffix
。因此,只有具有适当applicationId的生产构建才能检索产品。
听起来你的Google Play控制台设置有问题。
请检查:
- 您的应用程序在Play控制台中发布(到PROD或您的@gmail帐户在用户的alpha/beta组中)
- 我还建议将您的test@gmail帐户添加到许可证测试人员列表中,以避免收费和许可证问题
- 具有正确的签名,测试应用程序的版本代码与发布的版本代码相同
- 您的所有SKU也已发布
- 你的Play Store应用程序在你测试的手机上正常工作(例如,允许你购买应用程序)
安装完成后等待一段时间。
核心问题是Google缓存您的SKU详细信息,并且存在多层缓存。
你手机上的本地Google Play Store应用程序会缓存SKU详细信息,谷歌的服务器端也会缓存这些信息。("在计算机科学中只有两件困难的事情:缓存失效和命名。")
最终,如果你等待足够长的时间,缓存将过期,谷歌将开始显示正确的信息。但是谁有时间呢?
由于涉及到时间因素,很难知道什么有帮助,什么没有帮助,但以下是对我有效的方法
-
在内部测试轨道上设置您的APK版本。(第一次这样做时,你必须等待你的应用程序完成"待发布"。等待本身可能会解决问题。)
至少设置一个测试人员,获取选择加入链接(这需要等待您的应用程序完成"待定发布"),然后选择加入。
-
强制停止并删除Google Play Store应用程序的缓存;"应用程序";设置应用程序的部分。点击";存储";以访问";清除缓存";按钮
-
通过内部测试轨道下载应用程序的版本。使用
android.util.Log
记录SKU详细信息,并使用Logcat验证SKU详细信息是否正确显示。
…但别担心,你不必每次都这样测试。一旦Google Play Store缓存是最新的,您应该能够使用Android Studio在调试构建中访问SKU。
如果它在您的内部测试构建中不起作用
- 卸载应用程序,强制停止Google Play Store应用程序,清除其缓存,然后再次下载内部测试版本
- 还是没用?您的Google Play开发者控制台出现问题。也许你的产品还没有激活?也许您拼错了SKU列表中的SKU
如果它在内部测试构建中有效,但在同一设备上的调试构建中无效
在这种情况下,Google Play Store缓存是正确的,但与您创建的内部测试版本相比,您的调试版本有所不同。
- 验证您的调试生成是否使用与内部测试生成相同的包名称。
applicationIdSuffix
是常见的罪魁祸首 - 验证您的调试内部版本代码是否与上载到内部测试的APK版本代码匹配
- 尝试在不使用Google Play商店的情况下手动安装您的内部测试APK。如果有效的话,你有两个APK,其中一个有效,另一个无效。检查它们是否存在差异。(APK是zip文件;你可以在里面随便找。)
如果应用程序中集成的产品是订阅,请确保设置SkuType.SUBS
而不是SkuType.INAPP
val skuDetailsParams = SkuDetailsParams.newBuilder()
...
.setType(SkuType.SUBS)
.build()
GL-
源
您不需要上传您的apk。
你应该得到sku。即使在调试模式下进行测试,BillingClient也应该可以工作。
请确保产品或订阅处于活动状态。
给它一些时间。更新您的产品可能需要几个小时的计费过程。
您的应用程序必须在Google Play商店中获得批准,这可能需要长达1周的
除了之前的答案外,当您在没有Internet连接的情况下执行搜索时,SkuDetailsList可能为空。因此,您也必须在代码中管理这种情况。
应用内购买不可用的国家(古巴、中国等)的用户也可能发生这种情况
从播放控制台检查Pricing & distribution
部分的国家/地区状态
对于后来的谷歌用户,我的问题是我使用了一个无法支付测试应用程序费用的帐户。当我在测试设备上切换我的谷歌账户时,所有信息都如预期的那样出现了。要想快速的如果账户有支付能力,请尝试开通"最高支付";图表在谷歌播放商店,如果列表是空的,这个帐户肯定不会工作,不管怎样。
花了几天时间来查找这个问题。