You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动ProxyBillingActivity时触发PendingIntent.getIntentSender()空指针异常求助

解决ProxyBillingActivity启动时的PendingIntent空指针异常

核心原因

这个异常是因为发起内购请求时,BillingClient返回的PendingIntent为空,导致启动ProxyBillingActivity时调用getIntentSender()触发空指针。以下是针对性的排查和解决步骤:


1. 确保BillingClient连接状态正常

  • 必须在BillingClient连接成功后再发起购买请求:
    BillingClient billingClient = BillingClient.newBuilder(context)
        .setListener(purchasesUpdatedListener)
        .enablePendingPurchases()
        .build();
    
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                // 连接成功后,再查询商品、发起购买
                querySkuDetails();
            }
        }
    
        @Override
        public void onBillingServiceDisconnected() {
            // 实现重新连接逻辑
        }
    });
    
  • 禁止在连接未完成或断开时调用launchBillingFlow,否则会返回空的PendingIntent。

2. 校验商品配置与应用信息一致性

  • 检查Google Play Console内的商品状态:必须是已发布状态(草稿/未发布商品无法生成购买意图),且商品ID与代码中使用的完全一致(大小写、拼写严格匹配)。
  • 确认应用的包名、签名证书与Play Console中注册的完全一致:签名不匹配会导致BillingClient无法获取商品数据,返回空PendingIntent。

3. 规范购买请求的调用逻辑

  • 发起购买前必须确保SkuDetails对象不为空:
    // 查询到有效SkuDetails后再发起购买
    if (skuDetails != null) {
        BillingFlowParams params = BillingFlowParams.newBuilder()
            .setSkuDetails(skuDetails)
            .build();
        BillingResult result = billingClient.launchBillingFlow(activity, params);
    }
    
  • 必须使用有效且未销毁的Activity上下文调用launchBillingFlow,禁止使用Application Context或已finish的Activity。

4. 升级BillingClient依赖版本

部分旧版本BillingClient存在特定系统下的PendingIntent空指针bug,建议升级到最新稳定版:

dependencies {
    implementation 'com.android.billingclient:billing:6.1.0' // 替换为当前最新稳定版
}

5. 排查测试环境问题

  • 确保测试设备使用的Google账号已添加到Play Console的测试账号列表中,未授权的账号无法发起测试购买。
  • 检查设备的Google Play服务是否为最新版本:旧版本Play服务可能导致BillingClient交互异常。

6. 增加防御性代码

在调用launchBillingFlow前主动检查PendingIntent是否为空(部分场景下即使连接正常也可能返回空):

// 针对旧版BillingClient的BuyIntent获取方式
PendingIntent buyIntent = skuDetails.getBuyIntent(BillingClient.SkuType.INAPP, "your_sku_id", "your_developer_payload");
if (buyIntent != null) {
    // 发起购买流程
} else {
    // 提示用户购买失败,或触发重试逻辑
}

内容的提问来源于stack exchange,提问作者user19896027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:10:29