200817-谷歌内购服务教程与避雷指南

文章目录
  1. 1. 内购服务前置授权配置
  2. 2. 商品配置
  3. 3. 代码集成
  4. 4. 测试
    1. a. 首次提内测包需要过审
    2. b. 签名问题
    3. c. 测试机
    4. c. Google Play In-app Billing API version is less than 3
    5. d. Fatal error during the API action
    6. e. SkuType.INAPP 与 SkuType.SUBS
    7. f. 商品确认
    8. g. 无法购买您要买的商品
    9. e. 此版本的应用未配置为通过google play结算
  • IV. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 最近客串了一把android开发,对接谷歌的内购商品,这个过程真的是特别不顺,各种意想不到的坑,一踩一个;

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

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

    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

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×