我已将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
。1 >
答案 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.INAPP
或SkuType.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