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

Android Billing Client购买后无法授予SKU对应内容权限求助

Android内购交付权限问题解决方案

针对用户完成购买后无法获取对应内容权限的问题,结合代码中发现的4个潜在问题,给出以下修复方案:

1. 修复SKU匹配逻辑错误

handlePurchase方法中,purchase.getSkus()返回的是ArrayList<String>,直接与字符串执行equals比较会导致匹配失败,需修改为以下两种方式之一:

方式一:使用contains判断

// 原错误代码
if (purchase.getSkus().equals("10tl")) { ... }

// 修改后
if (purchase.getSkus().contains("10tl")) {
    grantAccessToDiamond559(userId);
}

方式二:取第一个SKU进行比较

String sku = purchase.getSkus().get(0);
if (sku.equals("10tl")) {
    grantAccessToDiamond559(userId);
}

2. 修正Firebase数据更新路径

grantAccessToDiamond559方法中,Firebase数据路径缺失用户profile层级,需补充完整路径:

// 原错误代码
databaseRef.child("credit").addListenerForSingleValueEvent(...);

// 修改后
databaseRef.child("profiles").child(userId).child("credit")
    .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            // 原有业务逻辑保留
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // 错误处理逻辑保留
        }
    });

3. 替换重复触发的事件监听器

grantAccessToDiamond300方法中,addValueEventListener会在数据变化时重复触发,导致多次更新,需替换为单次执行的监听器:

// 原错误代码
databaseRef.child("profiles").child(userId).child("credit")
    .addValueEventListener(new ValueEventListener() { ... });

// 修改后
databaseRef.child("profiles").child(userId).child("credit")
    .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            // 原有业务逻辑保留
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // 错误处理逻辑保留
        }
    });

4. 添加非空判断避免空指针异常

所有授予权限的方法中,需对credit值做非空校验,防止首次购买时credit为null引发崩溃:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    // 原错误代码
    int currentCredit = dataSnapshot.getValue(Integer.class);

    // 修改后
    Integer currentCredit = dataSnapshot.getValue(Integer.class);
    if (currentCredit == null) {
        currentCredit = 0;
    }
    // 后续累加与更新逻辑保留
    databaseRef.child("profiles").child(userId).child("credit").setValue(currentCredit + 559);
}

完成以上修复后,重新测试内购流程,即可确保用户购买后能正确获取对应内容权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:47:01