HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程。开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即可实现应用内支付。通过应用内支付服务,用户可以在应用内购买各种类型的虚拟商品,包括一次性商品(包括消耗型商品和非消耗型商品)和订阅型商品。应用内支付服务支持客户端和服务端两种开发形式,具体可以参考以下官方文档:
在日常工作中,我们会收到开发者们留言的有关IAP集成的常见问题,这里进行一些分享和总结,希望为其他遇到类似问题的开发者提供参考——
- com.huawei.hmf.tasks.Task的使用问题。
Task<TResult>是HMS Core SDK 底层框架的一个基础抽象类,通过实现Task类里面的相关抽象方法。比如添加一个或者多个监听器,当任务成功完成时该监听器被调用,当添加多个监听时,按照添加时的顺序调用,该调用在主线程中执行。
因为它已经集成在工程gradle包当中,所以直接用就可以,不需要重新创建声明。我们可以在Project工程中导入的 gradle文件中找到:
开发者也可以参考以下文档解决问题:
- InAppPurchaseData 参数中没有accountFlag是否正常?
InAppPurchaseData 参数中没有accountFlag的问题,根据应用内支付服务官方文档关于InAppPurchaseData的参考API:
InAppPurchaseData JSON类型用于保存用户购买信息,包括消耗型商品、非消耗型商品以及订阅型商品。其中的参数accountFlag 是非必选参数、可选字段,非固定返回,满足使用AppTouch应用才会有这个返回值。
- 文档 createPurchaseIntentWithPrice 的 onFailure 中 参数(Exception e)的判断(e instanceof IapApiException) 不成立。
首先需要确认设备和集成环境信息(最好更新到最新版本):HMS Core版本号、集成的SDK的版本号、设备是手机还是智慧屏。
然后根据官方文档60055错误码的注释,一般表示用户没有同意支付协议,开发者可以从请求接口中返回的IapApiException中获取到一个Status对象,Status中包含IAP协议页面,应用可使用Status的startResolutionForResult方法来启动协议页面。
导致该问题的原因可能还有以下几个方面:
(1)网络问题,网络异常导致接口获取失败。
(2)是否正确引用了 IapApiException。
(3)支付时是否有弹窗,如果没有弹窗需要开启设备 “后台弹出界面”权限,设置如下:找到 HMS Core 应用详情页-- 权限管理--“后台弹出界面”--选择“始终允许”,重新测试。
(4)如果是代码问题,请详细参考开发者联盟官方Demo实现和测试。Demo下载地址:
- 应用服务器验证,验证购买token 失败。
首先,出现“验证购买token 失败”提示,请详细参照 “获取应用级AT”文档的每一个步骤,检查获取的AT是否是应用级AT。获取应用级别AT地址文档:
然后再将获取的应用级AT封装,在请求头header中重新构建 authorization,具体可以参考公共说明的部分文档:
欲了解更多应用内支付服务详情,请参阅: https://developer.huawei.com/consumer/cn/hms/huawei-iap/?ha_source=hms1
华为开发者联盟官网 获取开发指导文档 参与开发者讨论请到Reddit社区 下载demo和示例代码请到Github 解决集成问题请到Stack Overflow
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~