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

在Android Studio中集成Huawei IAP并关联应用支付按钮的问题咨询

华为应用内支付(IAP)集成实操指南

一、应用与IAP能力关联前置配置

这一步是集成成功的基础,所有信息必须和后台配置完全一致:

  • 首先在华为开发者后台完成对应应用注册,确保应用包名、签名文件的SHA256值和后台填写的信息完全匹配,之后开通IAP服务,按你的业务需求配置对应类型的商品(消耗型/非消耗型/订阅型),记录生成的商品ID。
  • 项目级build.gradle文件的repositories闭包中添加华为Maven仓库地址,注意allprojects和buildscript下的repositories都要添加。
  • 模块级app/build.gradle文件中添加IAP依赖,代码为implementation 'com.huawei.hms:iap:{latest_stable_version}',将占位符替换为官方最新稳定版本号后同步项目。
  • 将华为开发者后台下载的agconnect-services.json文件放到项目app模块的根目录下,该文件用于关联你的应用和华为服务能力。

二、代码编写位置与支付按钮绑定

代码编写位置

你支付界面对应的Activity/Fragment就是编写IAP相关代码的位置,比如你的支付页是PayActivity.java或者PayActivity.kt,所有支付调用、回调逻辑都可以直接写在该类中。

支付按钮绑定步骤

你提供的支付界面中的支付按钮,按以下步骤绑定即可:

  1. 支付页面初始化时先实例化IAP客户端,同时绑定支付按钮的点击事件,示例Kotlin代码如下:
// 声明IAP客户端实例
private lateinit var mIapClient: IapClient

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 替换为你支付页面对应的布局文件ID
    setContentView(R.layout.activity_pay)
    // 初始化IAP客户端
    mIapClient = Iap.getIapClient(this)
    // 绑定支付按钮点击事件,替换为你布局中支付按钮对应的ID
    val payBtn = findViewById<Button>(R.id.pay_button_id)
    payBtn.setOnClickListener {
        // 点击按钮触发支付流程
        startPayProcess()
    }
}
  1. 实现拉起支付流程的方法,填入你后台配置的商品ID和对应价格类型:
private fun startPayProcess() {
    val purchaseReq = PurchaseIntentReq().apply {
        // 替换为你后台配置的对应商品ID
        productId = "your_product_id"
        // 价格类型:0=消耗型商品,1=非消耗型商品,2=订阅商品,按你的业务选择
        priceType = 0
    }
    val task = mIapClient.createPurchaseIntent(purchaseReq)
    task.addOnSuccessListener { result ->
        // 成功获取支付意图,拉起华为支付页面
        result.purchaseIntent.status.startResolutionForResult(this@PayActivity, 1001)
    }.addOnFailureListener { e ->
        // 支付拉起失败处理,可转换为IapApiException获取错误码做对应提示
        if (e is IapApiException) {
            val errorCode = e.statusCode
            // 按错误码做对应交互提示
        }
    }
}
  1. 重写结果回调方法,接收支付结果并处理对应业务逻辑:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // 匹配之前定义的支付请求码1001
    if (requestCode == 1001) {
        val payResult = Iap.getIapClient(this).parsePurchaseResultInfoFromIntent(data)
        when (payResult.returnCode) {
            OrderStatusCode.ORDER_STATE_SUCCESS -> {
                // 支付成功,这里自行实现验签、发放商品的业务逻辑
            }
            OrderStatusCode.ORDER_STATE_CANCEL -> {
                // 用户主动取消支付,做对应提示即可
            }
            else -> {
                // 其他支付失败场景,做对应错误提示
            }
        }
    }
}

三、常见功能失效排查点

大部分无法生效的问题都可以通过以下点排查:

  • 测试设备必须安装华为移动服务(HMS Core),且版本满足IAP最低要求,非华为设备也需要安装HMS Core才能正常调用。
  • 测试阶段使用的华为账号必须提前加入开发者后台的测试白名单,否则会触发支付限制。
  • 商品ID、价格类型必须和后台配置完全一致,注意区分大小写和特殊符号。
  • 包名、签名SHA256、agconnect-services.json文件三者必须和后台注册的应用信息完全匹配,该问题占集成失败率的90%以上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:36:03