在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,所有支付调用、回调逻辑都可以直接写在该类中。
支付按钮绑定步骤
你提供的支付界面中的支付按钮,按以下步骤绑定即可:
- 支付页面初始化时先实例化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() } }
- 实现拉起支付流程的方法,填入你后台配置的商品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 // 按错误码做对应交互提示 } } }
- 重写结果回调方法,接收支付结果并处理对应业务逻辑:
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
相关产品推荐
相关产品推荐

