将Android Billing Library更新到最新的2.0后,应用程序无法正确连接到许可证服务

时间:2019-05-19 14:29:32

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

我已将Android Billing库更新为version 2.0(本月发布)。

除了较小的更改(此处无用报告)之外,我还编辑了以下行以支持新的库版本:

cl = BillingClient.newBuilder(mActivity).setListener(this).build();

以这种方式:

cl = BillingClient.newBuilder(mActivity).enablePendingPurchases().setListener(this).build();

因为需要发布说明中所述,enablePendingPurchases()(并且此应用不会崩溃)。

为了使所有Skus都能完成Sku硬编码方法的删除(老实说,我不认为删除它们会带来一些改善),我尝试使用此代码querySkuDetails()进行查询:< / p>

SkuDetailsParams.Builder spb = SkuDetailsParams.newBuilder();
cl.querySkuDetailsAsync(spb.build(), new SkuDetailsResponseListener() {
    @Override
    public void onSkuDetailsResponse(BillingResult br, List<SkuDetails> ls) {

    }
});

但是如果我将方法调用放在BillingResult中,则5 DEVELOPER_ERROR的响应代码始终为onBillingClientSetupFinished

以前的版本没有问题,我想知道是否缺少某些东西来正确支持新版本。

计费服务能够连接到其后端,但是由于某种原因该操作失败。看来错误是我使用querySkuDetails()的方式,因为尽管我进入onSkuDetailsResponse的状态代码是5 DEVELOPER ERROR,尽管onBillingSetupFinished总是返回代码OK

3 个答案:

答案 0 :(得分:0)

-1 SERVICE DISCONNECTED表示onBillingClientSetupFinished()尚未发生,.querySkuDetailsAsync()应该在onBillingClientSetupFinished()之后运行;如果返回5 DEVELOPER_ERROR,则包名称或公共密钥可能不匹配和/或无法以某种方式连接计费服务。

答案 1 :(得分:0)

可能是因为您的项目中已经有一个IInAppBillingService.aidl。 尝试将其删除并清理项目。

答案 2 :(得分:0)

根据使用querySkuDetailsAsync(...)时的文档:https://developer.android.com/google/play/billing/billing_library_overview#Query

您传入的SkuDetailsParam还应该具有SKU列表和SkuType(SkuType.INAPPSkuType.SUBS)。您提供的示例代码中缺少这两个字段。

文档中的示例代码:

val skuList = ArrayList<String>()
skuList.add("premium_upgrade")
skuList.add("gas")
val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList).setType(SkuType.INAPP)
billingClient.querySkuDetailsAsync(params.build(), { billingResult, skuDetailsList ->
    // Process the result.
})

此外,目前Google的GitHub示例项目尚未针对Billing v2进行更新,但是如果您想同时获得SkuType.INAPP和SkuType.SUBS,这仍然很有帮助:SUBS:https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive_v2/shared-module/src/main/java/com/example/billingmodule/billing/BillingManager.java