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

三星In app Purchase(IAP)商品添加位置及购买实现咨询

Iap6Helper 消耗型商品接入操作指南

商品信息配置位置

  • 你计划接入的两个消耗型商品SKU,直接在ItemDefine.java中定义即可,这是Iap6Helper官方Sample约定的商品常量管理类,不需要额外新建配置类。
  • 配置时注意SKU字符串必须和你在应用后台(如Google Play Console)创建的商品ID完全一致,参考配置代码:
public class ItemDefine {
    // 替换为你自己后台配置的真实商品ID
    public static final String SKU_ITEM_A = "item_a_sku_id";
    public static final String SKU_ITEM_B = "item_b_sku_id";
    // 统一维护消耗型商品列表,初始化SDK时直接传入即可
    public static final List<String> CONSUMABLE_SKUS = Arrays.asList(SKU_ITEM_A, SKU_ITEM_B);
}

导完依赖后的必做初始化步骤

你当前导入模块、添加完依赖后,需要先完成SDK初始化才能触发购买逻辑,按顺序执行以下操作:

  1. 在主Activity或自定义Application的onCreate生命周期中初始化IAP连接,传入当前上下文、之前定义的SKU列表、连接状态回调:
// 初始化IAP服务连接
Iap6Helper.getInstance().init(this, ItemDefine.CONSUMABLE_SKUS, new IapConnectCallback() {
    @Override
    public void onConnectSuccess() {
        // 服务连接成功后才可调用购买、查询接口
    }

    @Override
    public void onConnectFailed(int code, String msg) {
        // 可在此处做重连逻辑或给用户提示
    }
});
  1. 注册全局购买结果监听,处理支付成功、失败、取消的回调,注意消耗型商品支付完成、权益发放后必须调用消耗接口,否则用户无法重复购买:
Iap6Helper.getInstance().setPurchaseListener(new PurchaseCallback() {
    @Override
    public void onPurchaseSuccess(Purchase purchase) {
        // 建议先将订单信息传到自有服务端做合法性校验,避免恶意破解
        String sku = purchase.getSku();
        if (ItemDefine.SKU_ITEM_A.equals(sku)) {
            // 发放item a对应权益,如虚拟货币、道具
        } else if (ItemDefine.SKU_ITEM_B.equals(sku)) {
            // 发放item b对应权益
        }
        // 校验通过、权益发放完成后,调用消耗接口完结订单
        Iap6Helper.getInstance().consumeAsync(purchase, new ConsumeCallback() {
            @Override
            public void onConsumeSuccess(String sku) {
                // 消耗成功,流程结束
            }
            @Override
            public void onConsumeFailed(String sku, int code, String msg) {
                // 消耗失败可做重试,避免用户已付款未到账
            }
        });
    }

    @Override
    public void onPurchaseFailed(int code, String msg) {
        // 支付失败,给用户弹出对应提示即可
    }

    @Override
    public void onPurchaseCancel() {
        // 用户主动取消支付,无需特殊处理
    }
});
  1. 在承载购买逻辑的Activity的onDestroy生命周期中释放SDK连接,避免内存泄漏:
@Override
protected void onDestroy() {
    super.onDestroy();
    Iap6Helper.getInstance().release();
}

点击触发购买流程的实现

给两个商品对应的购买控件(按钮、商品卡片)绑定点击事件,点击时先判断IAP服务是否连接成功,再传入对应SKU调用购买方法即可:

// item a购买按钮点击逻辑
findViewById(R.id.btn_buy_item_a).setOnClickListener(v -> {
    if (!Iap6Helper.getInstance().isConnected()) {
        Toast.makeText(this, "支付服务加载中,请稍后重试", Toast.LENGTH_SHORT).show();
        return;
    }
    Iap6Helper.getInstance().launchPurchase(ItemDefine.SKU_ITEM_A);
});

// item b购买按钮点击逻辑
findViewById(R.id.btn_buy_item_b).setOnClickListener(v -> {
    if (!Iap6Helper.getInstance().isConnected()) {
        Toast.makeText(this, "支付服务加载中,请稍后重试", Toast.LENGTH_SHORT).show();
        return;
    }
    Iap6Helper.getInstance().launchPurchase(ItemDefine.SKU_ITEM_B);
});

注意事项

  • 测试支付前需要将测试账号加入后台的许可证测试名单,否则会出现支付报错
  • 不要在IAP服务未连接状态下调用购买接口,会直接触发失败
  • 订单校验建议放在服务端完成,不要在客户端本地做签名校验,容易被破解
  • 如果出现消耗失败的情况,下次SDK初始化时会自动返回未消耗的订单,重新走权益发放+消耗逻辑即可,不会出现丢单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:06:22