querySkuDetailsAsync返回带有BillingResult代码SERVICE_UNAVAILABLE的空列表

问题描述

将BillingClient升级到3.0.0后,我开始获得大约20%的用户查询应用内购买时看到SERVICE_UNAVAILABLE的信息。 skuDetailsList也为空。根据文档,SERVICE_UNAVAILABLE暗示网络已关闭,但是客户端如何通过OK返回startConnection并在尝试查询SKU详细信息后发送此消息?另外,我看到了几个ERROR,它们是代码6。我是否有一些错误的实现,还是只是向用户显示一些“发生错误。请稍后再试”消息?我也没有在Play控制台中看到针对任何国家/地区的任何警告,也没有任何可能引起这种情况的警告。

BillingClient billingClient = BillingClient.newBuilder(getContext())
            .enablePendingPurchases()
            .setListener((billingResult,list) -> {})
            .build();

    mBillingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                createSkus(mBillingClient);
            }
        }

        @Override
        public void onBillingServicedisconnected() {}
    });


private void createSkus(BillingClient billingClient) {
    List<String> skuList = new ArrayList<>();
    skuList.add("pro");
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
    billingClient.querySkuDetailsAsync(params.build(),(billingResult,skuDetailsList) -> {
                // skuDetailsList empty with BillingResult code 2 (SERVICE_UNAVAILABLE)

                BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                        .setSkuDetails(skuDetailsList.get(0))
                        .build();
                billingClient.launchBillingFlow(activity,billingFlowParams);
            });
}

解决方法

我遇到了类似的问题,BillingServiceDisconnected代码又回来了-不幸的是,我两次打电话给BillingClient.startConnection

还需要注意的一件事是,您需要使用新更新的库发布应用程序的AlphaBeta版本,如果您使用的是applicationSuffix,请先删除该版本您可以在调试版本中对其进行测试。