谷歌内购服务配置教程与避雷指南
最近客串了一把 android 开发,对接谷歌的内购商品,这个过程真的是特别不顺,各种意想不到的坑,一踩一个;
接下来记录一下谷歌内购服务的完整配置流程,以及在最后测试阶段可能遇到的各种问题;在正式开始之前,请确定以下基本条件
- 正确上网
- 准备 gmail 邮箱
- 准备 google play 账号(地区不要选择中国大陆,因为不支持购买)
- 授权开启商家账号
- 准备测试机(谷歌服务四件套得有)
1. 内购服务前置授权配置
进入链接,开启 api accesshttps://play.google.com/apps/publish/#ApiAccessPlace 接着点击上面的创建服务账号 接下来再新的窗口页,点击创建服务账号 创建服务账号有三步,第一步如下,填写标记的两项 第二步设置账号权限,下面勾选结算功能,为了简单也可以直接选择 owner,对所有的权限都有 第三步,服务账号授权,注意账号就是我们第一步生成的,输入 bill 会出现一个候选框,选中即可 上面完成之后,会多一个服务账号,接下来创建密钥, json/p12 按需选择 比如我选择了 p12 之后,再进入详情,可以看到如下基本信息,在后续内购订单的确认中,服务端会用到这个电子邮件地址 + 上面下载的 p12 文件 (请注意,本文的所有配置只是为了演示,弄完之后就删除了,所以不要用这些信息来搞事情哦) 上面服务账号配置完毕之后,回到前面的页面,点击完成 点击完成之后,会自动刷新,出现下面这一行,点击授予访问权,在弹出中选中需要授权的应用 在下面的演示中,给的是管理员权限,并选中了 app 如果我们的内购商品是订阅类型,即支持自动续订,那么我们还需要额外的消息推送配置,比如自动续订之后,回调一下服务器,告诉续订成功,接下来进入相关配置 下面的操作来自于文档:https://cloud.google.com/pubsub/docs/quickstart-console 我们在快速入门中,点击设置项目,选中google play android developer
接下来进入 Pub/Sub 主题页,即https://console.cloud.google.com/cloudpubsub/topicList来创建主题
创建完毕之后,会自动进入主题详情页,拉到最下面,创建订阅
在订阅中,填写必要信息,比如订阅 id,我这里选择的是推送方式,因此需要填写接收推送的 url
topic 创建完毕之后,需要授予权限
选择添加成员,google-play-developer-notifications@system.gserviceaccount.com
,角色为Pub/Sub Publisher
保存之后,进入主题,点击刚才创建的 billing,进入详情,找到下面红框的内容,复制到粘贴板
接下来进入 google play console,找到对应的项目,进入服务和 API
将我们前面的内容,复制到输入框,点击保存,也可以发送测试通知,看一下配置的 url 是否能收到内容
在上图中,上面的终端显示的就是 google 的回调,因为我是随便配置的一个 url,所以不会正常返回 200 状态,所以会重试(关于这个消息的重试机制,推荐选择阶梯重试方式,避免立即重试)
以上所有的配置,请注意这些都是谷歌内购商品的前提操作,这些搞完之后,还有一些操作等待着你
2. 商品配置
这里应该是最简单,坑最少的地方了接下来进入 google play console https://play.google.com/apps/publish,进行内购商品配置 请注意,应用内商品需要商家账号,开通流程没什么可说的,这里注意一下,受管理的商品和订阅是两种类型
- 受管理的商品:即消费型商品,一次一次的买
- 订阅商品:支持续订,举例如视频的月卡,开通之后,下个月自动扣钱续订(可以有效地赚钱)
3. 代码集成
接下来就是 android 端集成对应的代码,按照文档一步一步来,官方文档在接入代码这里,写得比较清晰,主要的问题会在后面的测试环节- 中文接入文档: https://developer.android.com/google/play/billing/billing_library_overview?hl=zh-cn#Connect
- 英文接入文档: https://developer.android.com/google/play/billing/integrate
4. 测试
下面介绍下我们在测试这里踩过的坑a. 首次提内测包需要过审
在测试之前,先要发包到 alpha 或者 beta 环境- 注意:正式包 + 正式签名 + 版本号
b. 签名问题
请注意,用于测试购买的包,有以下几点非常重要- 测试的 apk 包名,要求与上面提包的包名要求一致
- 测试的 apk 签名,要求与上面提包的前面一样
- 测试的 apk 版本号,要求大于 or 等于上面提包的版本号
c. 测试机
测试机上,google 的基础服务要有- Google 框架服务
- 谷歌账号管理
- Google Play 服务
- Google Play 商店
c. Google Play In-app Billing API version is less than 3
上面这个错误有很大的迷惑性,直接升级billingclient
版本是并没有什么用的,出现这个问题,95%的可能性是因为你的 google 账号的地区是中国,而中国地区的账号是不支持购买的
要避免这个问题,就是换个地区不是中国的账号;或者切换一下账号位置(但是这个切换的条件,没有那么容易)
d. Fatal error during the API action
在于谷歌服务建立连接之后,查询 Sku 列表的时候,可能报这个问题,返回状态码为 6 出现这个问题,一般是两个原因- google play 商店能否正常打开
- 手机是否翻墙(简单来讲,就是测试机的网络归属,不要是大陆)
e. SkuType.INAPP 与 SkuType.SUBS
请注意,在查询 Sku 信息时,传入的 producetId 与 SkuType 请对应起来,对应错了就查不到对应的 sku 信息- 消耗性商品,查询 sku 时,选择
SkuType.INAPP
- 订阅性商品,查询 sku 时,选择
SkuType.SUBS
f. 商品确认
对于订阅性商品,用户购买了,也付了钱,但是这笔订单并不能表示完成了,这个时候需要确认 对于订阅型商品,下面的billingClient.acknowledgePurchase
这一步必不可少
对于一次性商品,则是billingClient.consumeAsync
,注意他们的区别,不要混用
关于上面两个确认的截图中,Listener 内部的实现非必要,一般来讲校验是否购买成功这件事情,推荐放在服务器端来做一个校验,如果完全信赖客户端的返回结果,会遇到什么问题各位小伙伴应该也能想到
g. 无法购买您要买的商品
请确保 google 账号在测试名单中e. 此版本的应用未配置为通过 google play 结算
首先确保,当前测试的包与提交到谷歌控制台的包签名 + 包名 + 版本一致 如果上面没有问题,可以尝试如下操作- 设置->账号详情->许可测试
- 添加测试账号
声明:本站所有资源,如无特殊说明或标注,所有资源来源于用户上传和网络,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,请联系万能客服QQ微信同号 416070154删除。