使用Billing Library v6.0.1时BillingClient无法连接Play Services求助
问题分析与解决方案
核心错误点
你现在的逻辑完全搞反了:刚通过build()创建完BillingClient,还没发起任何连接请求,isReady()必然返回false,这是该类的正常状态。你不该用这个判断来决定是否调用establishConnection(),而是应该直接调用establishConnection()去发起连接,连接成功后isReady()才会变为true。
修正后的代码实现
初始化并发起连接
// 初始化BillingClient billingClient = BillingClient.newBuilder(MainActivity.this) .setListener(purchasesUpdatedListener) .enablePendingPurchases() .build(); // 直接发起连接,不需要提前判断isReady() establishConnection();
优化后的establishConnection()方法
private void establishConnection() { billingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { // 建议用日志输出响应码,Toast显示数字不够直观 Log.d("BillingDebug", "连接响应码: " + billingResult.getResponseCode()); if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // 连接成功,此时isReady()会返回true,可执行后续操作 Toast.makeText(MainActivity.this,"Billing client连接成功",Toast.LENGTH_SHORT).show(); // showProducts(); // 在这里调用商品查询等业务逻辑 } else { Toast.makeText(MainActivity.this,"Billing client连接失败,响应码: " + billingResult.getResponseCode(),Toast.LENGTH_SHORT).show(); } } @Override public void onBillingServiceDisconnected() { Toast.makeText(MainActivity.this,"Billing连接断开,正在重连",Toast.LENGTH_SHORT).show(); // 断开后自动重连,提升用户体验 establishConnection(); } }); }
额外排查要点
如果修正逻辑后仍无法连接,检查以下几点:
- 确认Gradle中已正确引入依赖:
com.android.billingclient:billing:6.0.1 - 测试设备安装了最新版Google Play服务,且已登录有效Google账号
- 调试/发布版应用的签名与Google Play控制台配置的签名一致
- 已在Google Play控制台创建应用并配置至少一个应用内商品(含测试商品)
- 若使用测试商品,需将测试账号添加到Google Play控制台的许可测试列表中
内容的提问来源于stack exchange,提问作者Dilazak
相关产品推荐
相关产品推荐

