Android Google 结算客户端 - onSkuDetailsResponse 始终为空列表

Gra*_*son 5 android billingclient

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

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

implementation 'com.android.billingclient:billing:3.0.0'
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个活动来测试代码。它首先初始化 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());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

Gra*_*son 3

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

  • 我正在使用 billing-lib-5.0.0 并且也遇到了同样的问题 - queryProductDetails() 在我的发布版本中始终为空,更不用说调试版本了。实际上,我已将所有测试 Gmail 电子邮件添加到封闭测试的测试人员列表中,并且还获得了所有这些电子邮件的许可。没有效果。最终,我发现 Play Console 封闭测试跟踪页面上未生成指向我的测试应用程序的链接。我重新创建了该曲目,这次是为了内部测试,并且链接已经出现。然后我登录到我的每个 gmail,并从该链接接受成为测试员。完成此操作后,IDE 中的产品开始出现 (3认同)