在Android Billing Library 4.0.0版本中,当使用querySkuDetailsAsync()方法查询商品时,可能会出现没有购买结果返回的问题。
解决此问题的方法是使用querySkuDetails()方法替换querySkuDetailsAsync()方法,并在主线程中执行查询操作。
以下是使用querySkuDetails()方法的示例代码:
BillingClient billingClient = BillingClient.newBuilder(context).build();
// 建立连接
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// 查询商品
List skuList = Arrays.asList("product_id_1", "product_id_2");
SkuDetailsParams.Builder paramsBuilder = SkuDetailsParams.newBuilder();
paramsBuilder.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
List skuDetailsList = billingClient.querySkuDetails(paramsBuilder.build()).getSkuDetailsList();
// 处理查询结果
for (SkuDetails skuDetails : skuDetailsList) {
Log.d(TAG, "skuDetails: " + skuDetails);
}
}
}
@Override
public void onBillingServiceDisconnected() {
// 关闭连接
billingClient.endConnection();
}
});
在此示例代码中,我们首先通过建立连接的方式初始化BillingClient,并在连接建立后使用querySkuDetails()方法查询商品信息。在查询结果返回后,我们可以对结果进行相应的处理。
需要注意的是,querySkuDetails()方法是一个同步方法,并且会在主线程中执行,因此如果查询操作比较耗时,可能会导致UI卡顿。如果需要进行大量的查询操作,建议使用异步方式执行查询而不是在主线程中执行。
上一篇:androidbilling3to5-PurchasesResult,queryPurchases,getPurchasesList,getSku
下一篇:AndroidBilling4.0.0的实现导致ReactNativeInAppPurchase(RNIAP)停止工作。