Android Google 计费客户端 - onSkuDetailsResponse 始终为空列表

Posted

技术标签:

【中文标题】Android Google 计费客户端 - onSkuDetailsResponse 始终为空列表【英文标题】:Android Google Billing Client - onSkuDetailsResponse Always Empty List 【发布时间】:2020-11-02 00:27:11 【问题描述】:

我想知道你能帮忙吗?我按照https://developer.android.com/google/play/billing/integrate 的说明进行操作,但我似乎无法让购买流程正常工作。计费似乎设置正常,但是当我尝试查询我的应用内产品时,列表总是返回空。有人可以帮忙吗?

在我的应用级 build.gradle 文件中,我包含了 Google Billing SDK:

implementation 'com.android.billingclient:billing:3.0.0'

然后我创建了一个活动来测试代码。它首先初始化 BillingClient 并启动连接。连接似乎正确完成了设置。正确设置后,我会尝试在“商店状态”>“应用内产品”>“管理产品”下查询我在 Google Play 控制台中可用的产品

下面是 Activity 中应该启动进程并返回 SkuDetails 列表的代码,但不幸的是它返回为空。

private BillingClient billingClient;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_billing);

    this.billingClient = BillingClient.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this.purchaseUpdateListener)
            .build();
    this.billingClient.startConnection(billingClientStateListener);


private PurchasesUpdatedListener purchaseUpdateListener = new PurchasesUpdatedListener() 
    @Override
    public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> list) 
        Log.d("Billing", "onPurchasesUpdated - List Size: " + list.size());
    
;

private BillingClientStateListener billingClientStateListener = new BillingClientStateListener() 
    @Override
    public void onBillingSetupFinished(@NonNull BillingResult billingResult) 
        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) 
            Log.d("Billing", "onBillingSetupFinished - OK");
            queryProducts();
         else 
            Log.d("Billing", "onBillingSetupFinished - Something wrong response Code: " + billingResult.getResponseCode());
        
    

    @Override
    public void onBillingServiceDisconnected() 
        Log.d("Billing", "Service disconnected");
    
;

private void queryProducts() 
    List<String> productIdsList = new ArrayList<>();
    productIdsList.add("test.billing.001");

    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(productIdsList).setType(BillingClient.SkuType.INAPP);
    this.billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() 
        @Override
        public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List< SkuDetails > list) 
            Log.d("Billing", "onSkuDetailsResponse - List Size: " + list.size());
        
    );

【问题讨论】:

我陷入了一个陷阱,我将-debug 附加到应用程序ID 以进行调试构建。当我尝试执行测试购买时,它导致产品未找到,因为给定 ID 的产品显然不存在。可能值得检查。 在这里回复:***.com/a/46888790/96313 【参考方案1】:

因此,对于遇到类似问题的任何人来说,似乎(在我的情况下无论如何)我的应用需要成功发布,然后我才能从应用中检索应用内产品。我的应用发布后,我就可以查询和使用应用内商品了。

【讨论】:

您的意思是在生产中发布吗?那么,发布到 Alpha 或 Beta 版根本行不通?我的应用程序处于内部测试轨道和 alpha 轨道,并且总是空着。但计费文档指出,此类轨道可用于测试计费。所以,似乎有问题。 @API_1024 hhmmm.... 我知道在内部跟踪中它对我不起作用 - 我和你有同样的想法。但我确实认为,如果你升级到 Alpha 轨道,它应该可以工作。出于某种原因,内部轨道没有拾取它。尝试推广到 Alpha 轨道,让我知道它是否适合您。

以上是关于Android Google 计费客户端 - onSkuDetailsResponse 始终为空列表的主要内容,如果未能解决你的问题,请参考以下文章

google 的 Map SDK 计费如何适用于 Android 和 iOS 应用程序?

是否可以在 Android Studio 中本地调试 Google Play 的应用内计费?

购买完成后 UI 元素更新不起作用 - Google 计费客户端 4

Android/Google Play:我真的需要我的 OWN 服务器来管理应用内计费订阅吗?

Google Firebase Cloud Functions:Android应用程序调用`siteverify`的后端调用实际上需要使用计费帐户[重复]

更新后应用内计费不起作用 - Google 商店