1、基础概念坑
2、支付坑
3、发版流程坑
那么如何集成 google 结算库 ?
如何添加测试人员?
如何创建商品?
创建订阅商品
如何上传 alpha 版本?
如何把 alpha 版本转化为生产包?
4、Alpha 测试、Beta 测试 坑
5、代码坑
6、数据报表坑
订单管理
收入情况
7、结算币种
google play跟用户结算
google play跟开发者结算
8、GooglePlay 测试条件
9、邮件通知
最近我接了一个大活,领导要求 app接入google支付,来应对商业化变现困局。
说干就干,经过2周的洗礼,我也算从支付小白变成了支付老手,中间踩了很多坑,记录下来。
<code>在你阅读本文之前,我强烈建议你,不要马上动手撸代码,你要先把本文完完整整一字不漏的读完,先有一个整体框架</code>
google支付分为 <code>内购(inapp)</code> 和 <code>订阅 (subscription)</code>
inapp:内购分为:<code>购买</code>和<code>消耗</code> 两个步骤。如果购买成功,再调用消耗方法,下次可以继续购买。如果购买成功,不调用消耗的方法,那么下次将不能再次购买,返回的错误码为7。
subscription :订阅只有购买,没有消耗。 购买成功也就是订阅成功,订阅成功后会周期性扣费。订阅周期是可以自定义的,可以 周订阅、月订阅,季度订阅、年订阅 。
订阅成功后,用户可以取消订阅,取消成功后,也可以恢复订阅。<code>需要说明的是,订阅成功后,48小时内取消订阅是会退款的,超过 48 小时取消订阅不会退款,允许用户继续享受订阅服务到本次订阅周期结束。</code>
第一个坑,我们来说说支付坑。
和所有的支付功能一样,支付需要绑卡,而且卡必须支持境外支付功能的,信用卡和储蓄卡都行。没有卡的同学可以去招商银行申请全币信用卡(<code>招商VISIA全币信用卡</code>,<code>招商银行mastercard全币信用卡</code>)。
可以去营业厅申请,嫌麻烦的也可以在 招行 <code>掌上生活</code> App 申请 。 我当时不知道就跑去营业厅,到了营业厅发现营业员让我下载 App 操作,我 TM。。。 , 最后顺利申请到 <code>招商VISIA全币信用卡</code> ,申请完成后,差不多 5 天左右就收到卡了。
收到信用卡后,就可以在 GooglePlay 上绑定卡,打开手机上的 GooglePlay 。点击 <code>付款方式</code> -> 点击 <code>添加信用卡或借记卡</code>
<code>下面我们来说说没有卡怎么办,办理信用卡也需要时间。再一个方面,支付一直扣自己银行卡里面的钱,自己也肉疼。 解决这个问题很简答,就是在 GooglePlay 开发者后台添加自己的 GooglePlay 账号为测试账号。</code>
当你成为测试人员后,你就可以用测试模式支付了,好处就是可以完整的体验支付流程,不会真的扣钱。这种方式特别适合开发和测试,推荐。
我贴一个图,大家看一下两种模式的样子,你对比一下
<code>一定要记得:添加的测试账号是你手机里面 GooglePlay 登陆账号才行。具体怎么添加,这里不讲,下面章节会详细说。</code>
在以往的发版中,我们都是在本地测试,测试成功后,直接在 googlePlay 后台发<code>生产包</code>,加个 20% 灰度量,就 OK了。
接入支付后,发版就不能这么随意了,并不是说你集成了google 结算库,就具有支付功能了,要想app具有支付功能,你需要下面几个步骤:
第一步:集成 google 结算库,添加必要的权限,具体的逻辑代码可以先不着急写。
第二步:添加测试人员
第三部:创建商品
第四步:假设你当前的版本号设为 2.0 ,打包。然后在 googlePlay 开发者后台,上传 alpha 版本。
第五步:上传完 alpha 版本,你的 2.0 apk 就具有支付功能了,就可以编写具体支付代码,测试人员就可以测试了。
第四步:如果 alpha 版本测试成功了,就可以从 alpha 版本 一键转为生产包,等审核通过,用户就可以搜到你的应用了。
如果是 java项目
如果是 Kotlin 项目
添加支付必要的权限
GooglePlay 要求,任何需要购买的商品都是要在 GooglePlay 开发者后台创建。
一切顺利的话,就可以等待Google的审核了,通常这个过程会花费2-3个小时不等。审核通过后,在Android 设备Google play store上登陆你的测试者账号,就可以搜索你上传的的app了,之后就可以发起正常的购买流程,不需要绑定银行卡,因为不会真正的付费。
在测试购买的过程中,有可能发现bug了,改了之后需要再上传apk么?不用,直接像开发其他功能一样,直接连着IDE开发调试,购买流程完全不受影响,前提:设备上需要在google play store登陆测试者账号。
生产包发布以后,等 Google 审核通过,用户就可以搜到带有支付功能的包了。
在 Google Play 的眼里,认为所有的上架包都应该有经过测试环节测试,测试通过后才可以正式发布。
Google Play 把测试环境分为 <code>Alpha 测试</code> 和 <code>Beta 测试</code> 。
<code>Alpha 测试</code> :官方定义为 <code>封闭式测试</code> 。测试范围小,人员少。 一般可以认为是内部测试,即供开发者内部测试人员测试。
<code>Beta 测试</code> :官方定义为 <code>开放式测试</code> 。测试范围广,人员多。普通用户可以参与的测试环境。
Google Play 建议标准的测试流程为:先 <code>Alpha 测试</code> ,然后再 <code>Beta 测试</code> ,最后发布生成包。但是在实际开发过程中,根据具体环境自己选择,比如我在做支付的时候,就只有 <code>Alpha 测试</code> , 测试通过,直接发布。
需要注意的事项:
<code>确保用户可以加入测试</code>:不管哪种测试,测试人员都需要有 googlePlay 账户
<code>选择合适的测试类型</code> :Alpha 版测试的用户群规模不应太大,而且应当用于测试最不稳定的实验性质的应用版本;而 Beta 版测试的用户群规模可以稍大,以便针对即将发布的较稳定应用版本进行测试。
<code>检查您的 APK 版本号</code>:提供给 Alpha 版测试人员使用的 APK 的版本号必须高于您的 Beta 版或正式版,而进行 Beta 版测试的 APK 的版本号必须高于正式版。
有一点需要注意的是,结算库现在是 <code>2.1.0 版本</code> , 我们当做是 <code>2.x</code> 版本。在以前还有 <code>1.x</code> 版本。
官方文档:各个版本库的更新说明
相比 1.x 版本,2.x 版本主要的不同点:
修复潜在的内存泄漏问题
增加"确认购买"概念,每个新购买的商品都需要调用acknowledgePurchase方法来进行确认购买,如果没有进行确认购买,三天后会遭受系统自动退款。
强制删除BillingFlowParams.setSku()方法,改为使用BillingClient.querySkuDetailsAsync()+BillingFlowParams.Builder.setSkuDetails()来配置发起购买的参数。
消耗商品和确认购买配置添加setDeveloperPayload()方法,可以将一个字符串传递给google,然后可以在查询商品记录里面获得该值。(目前没在发起购买里看到这个方法,具体试用场景还不是很明确)
增加"待交易"概念,购买商品回调里面,我们需要通过getPurchaseState方法来判断商品当前的状态。(重要)
其他一些api修改,问题不大。不过一些开发者测试之类的功能应该很有用,但我没有具体去看。
推荐一个开源库,真心好用。这个开源库针对 1.x 版本 、2.x 版本 分别做了对应的封装
1.x 版本
2.x 版本
应用发布以后,怎么看付费情况,怎么看相关的数据报表?其实 GooglePlay 开发者后台提供了相应的数据。
币种涉及到两方面:google play如何跟用户结算,google play如何结算给开发者
用户购买时的币种主要由用户的归属地决定,归属地依赖于:
1、绑卡用户由信用卡归属地决定。
2、非绑卡用户,由ip地址决定。
币种为归属地的币种,该归属地如果在配置价格列表中,按配置价格计算。不在列表中,价格则涉及到汇率换算,换算的汇率按用户购买时的汇率确定。
结算给开发者的币种,按开发者银行卡归宿地确定
价格为用户付费价格结合分成比例和汇率计算,如果涉及到汇率换算,则按用户购买时的汇率计算。
当许可测试用户免费测试应用内物品购买,用户安装的APK需满足以下条件:
安装APK包名必须与Google Play Console测试渠道中APK包名相同。
安装APK签名必须与Google Play Console测试渠道中APK签名相同。
安装APK版本号必须与Google Play Console测试渠道中APK版本号相同。
不管你是购买成功、订阅成功、还是取消订阅,你都会通过邮件收到通知。
邮件内容包含:订单编号、订单时间、商品名字、支付价格、结算币种、付款方式