谷歌内购服务配置教程与避雷指南

◇◆丶佛笑我妖孽 提交于 2020-09-26 15:56:31

谷歌内购服务配置教程与避雷指南

最近客串了一把 android 开发,对接谷歌的内购商品,这个过程真的是特别不顺,各种意想不到的坑,一踩一个;

接下来记录一下谷歌内购服务的完整配置流程,以及在最后测试阶段可能遇到的各种问题;在正式开始之前,请确定以下基本条件

  1. 科学上网
  2. 准备 gmail 邮箱
  3. 准备 google play 账号(地区不要选择中国大陆,因为不支持购买)
  4. 授权开启商家账号
  5. 准备测试机(谷歌服务四件套得有)

<!-- more -->

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,进行内购商品配置

请注意,应用内商品需要商家账号,开通流程没什么可说的,这里注意一下,受管理的商品和订阅是两种类型

  • 受管理的商品:即消费型商品,一次一次的买
  • 订阅商品:支持续订,举例如视频的月卡,开通之后,下个月自动扣钱续订(可以有效地赚钱)

创建收管理的商品,比较简单,唯一需要注意的是商品 ID,不能与之前的有冲突,而且某个商品即便删除了,其商品 id 也是依然不能再用的;其次就是需要将状态改为有效

订阅商品创建姿势和上面基本一致,会多一个结算周期;请注意,订阅商品创建之后不能删除(至少我没有找到删除的地方)

3. 代码集成

接下来就是 android 端集成对应的代码,按照文档一步一步来,官方文档在接入代码这里,写得比较清晰,主要的问题会在后面的测试环节

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 结算

首先确保,当前测试的包与提交到谷歌控制台的包签名 + 包名 + 版本一致

如果上面没有问题,可以尝试如下操作

  • 设置->账号详情->许可测试
  • 添加测试账号

IV. 其他

1. 一灰灰 Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰 blog

QrCode

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!