最近我接了一个大活,领导要求 app接入google支付,来应对商业化变现困局。

说干就干,经过2周的洗礼,我也算从支付小白变成了支付老手,中间踩了很多坑,记录下来。

在你阅读本文之前,我强烈建议你,不要马上动手撸代码,你要先把本文完完整整一字不漏的读完,先有一个整体框架

1、基础概念坑

google支付分为 内购(inapp)订阅 (subscription)

inapp:内购分为:购买消耗 两个步骤。如果购买成功,再调用消耗方法,下次可以继续购买。如果购买成功,不调用消耗的方法,那么下次将不能再次购买,返回的错误码为7。

subscription :订阅只有购买,没有消耗。 购买成功也就是订阅成功,订阅成功后会周期性扣费。订阅周期是可以自定义的,可以 周订阅、月订阅,季度订阅、年订阅 。

订阅成功后,用户可以取消订阅,取消成功后,也可以恢复订阅。需要说明的是,订阅成功后,48小时内取消订阅是会退款的,超过 48 小时取消订阅不会退款,允许用户继续享受订阅服务到本次订阅周期结束。

2、支付坑

第一个坑,我们来说说支付坑。

和所有的支付功能一样,支付需要绑卡,而且卡必须支持境外支付功能的,信用卡和储蓄卡都行。没有卡的同学可以去招商银行申请全币信用卡(招商VISIA全币信用卡招商银行mastercard全币信用卡)。

可以去营业厅申请,嫌麻烦的也可以在 招行 掌上生活 App 申请 。 我当时不知道就跑去营业厅,到了营业厅发现营业员让我下载 App 操作,我 TM。。。 , 最后顺利申请到 招商VISIA全币信用卡 ,申请完成后,差不多 5 天左右就收到卡了。

收到信用卡后,就可以在 GooglePlay 上绑定卡,打开手机上的 GooglePlay 。点击 付款方式 -> 点击 添加信用卡或借记卡
Android GooglePay 填坑录_google billing
下面我们来说说没有卡怎么办,办理信用卡也需要时间。再一个方面,支付一直扣自己银行卡里面的钱,自己也肉疼。 解决这个问题很简答,就是在 GooglePlay 开发者后台添加自己的 GooglePlay 账号为测试账号。

当你成为测试人员后,你就可以用测试模式支付了,好处就是可以完整的体验支付流程,不会真的扣钱。这种方式特别适合开发和测试,推荐。

我贴一个图,大家看一下两种模式的样子,你对比一下

Android GooglePay 填坑录_赵彦军_02

一定要记得:添加的测试账号是你手机里面 GooglePlay 登陆账号才行。具体怎么添加,这里不讲,下面章节会详细说。

3、发版流程坑

在以往的发版中,我们都是在本地测试,测试成功后,直接在 googlePlay 后台发生产包,加个 20% 灰度量,就 OK了。

接入支付后,发版就不能这么随意了,并不是说你集成了google 结算库,就具有支付功能了,要想app具有支付功能,你需要下面几个步骤:

第一步:集成 google 结算库,添加必要的权限,具体的逻辑代码可以先不着急写。

第二步:添加测试人员

第三部:创建商品

第四步:假设你当前的版本号设为 2.0 ,打包。然后在 googlePlay 开发者后台,上传 alpha 版本。

第五步:上传完 alpha 版本,你的 2.0 apk 就具有支付功能了,就可以编写具体支付代码,测试人员就可以测试了。

第四步:如果 alpha 版本测试成功了,就可以从 alpha 版本 一键转为生产包,等审核通过,用户就可以搜到你的应用了。

那么如何集成 google 结算库 ?

如果是 java项目

implementation 'com.android.billingclient:billing:2.1.0'

如果是 Kotlin 项目

implementation 'com.android.billingclient:billing-ktx:2.1.0'

添加支付必要的权限

 <!-- googlePay   -->
<uses-permission android:name="com.android.vending.BILLING" />

如何添加测试人员?

Android GooglePay 填坑录_赵彦军_03
Android GooglePay 填坑录_yanjun_04
Android GooglePay 填坑录_赵彦军_05

如何创建商品?

GooglePlay 要求,任何需要购买的商品都是要在 GooglePlay 开发者后台创建。
Android GooglePay 填坑录_googlePay_06

创建订阅商品

Android GooglePay 填坑录_google billing_07
Android GooglePay 填坑录_google billing_08
Android GooglePay 填坑录_googlePay_09
Android GooglePay 填坑录_googlePay_10

如何上传 alpha 版本?

Android GooglePay 填坑录_googlePay_11
Android GooglePay 填坑录_Google支付_12
Android GooglePay 填坑录_Google支付_13
Android GooglePay 填坑录_google billing_14

一切顺利的话,就可以等待Google的审核了,通常这个过程会花费2-3个小时不等。审核通过后,在Android 设备Google play store上登陆你的测试者账号,就可以搜索你上传的的app了,之后就可以发起正常的购买流程,不需要绑定银行卡,因为不会真正的付费。

在测试购买的过程中,有可能发现bug了,改了之后需要再上传apk么?不用,直接像开发其他功能一样,直接连着IDE开发调试,购买流程完全不受影响,前提:设备上需要在google play store登陆测试者账号。

如何把 alpha 版本转化为生产包?

Android GooglePay 填坑录_googlePay_15
生产包发布以后,等 Google 审核通过,用户就可以搜到带有支付功能的包了。

4、Alpha 测试、Beta 测试 坑

在 Google Play 的眼里,认为所有的上架包都应该有经过测试环节测试,测试通过后才可以正式发布。

Google Play 把测试环境分为 Alpha 测试Beta 测试

Alpha 测试 :官方定义为 封闭式测试 。测试范围小,人员少。 一般可以认为是内部测试,即供开发者内部测试人员测试。

Beta 测试 :官方定义为 开放式测试 。测试范围广,人员多。普通用户可以参与的测试环境。

Google Play 建议标准的测试流程为:先 Alpha 测试 ,然后再 Beta 测试 ,最后发布生成包。但是在实际开发过程中,根据具体环境自己选择,比如我在做支付的时候,就只有 Alpha 测试 , 测试通过,直接发布。

需要注意的事项:

  • 确保用户可以加入测试:不管哪种测试,测试人员都需要有 googlePlay 账户
  • 选择合适的测试类型 :Alpha 版测试的用户群规模不应太大,而且应当用于测试最不稳定的实验性质的应用版本;而 Beta 版测试的用户群规模可以稍大,以便针对即将发布的较稳定应用版本进行测试。
  • 检查您的 APK 版本号:提供给 Alpha 版测试人员使用的 APK 的版本号必须高于您的 Beta 版或正式版,而进行 Beta 版测试的 APK 的版本号必须高于正式版。

5、代码坑

 

有一点需要注意的是,结算库现在是 2.1.0 版本 , 我们当做是 2.x 版本。在以前还有 1.x 版本。

官方文档:各个版本库的更新说明

相比 1.x 版本,2.x 版本主要的不同点:

  • 修复潜在的内存泄漏问题
  • 增加"确认购买"概念,每个新购买的商品都需要调用acknowledgePurchase方法来进行确认购买,如果没有进行确认购买,三天后会遭受系统自动退款。
  • 强制删除BillingFlowParams.setSku()方法,改为使用BillingClient.querySkuDetailsAsync()+BillingFlowParams.Builder.setSkuDetails()来配置发起购买的参数。
  • 消耗商品和确认购买配置添加setDeveloperPayload()方法,可以将一个字符串传递给google,然后可以在查询商品记录里面获得该值。(目前没在发起购买里看到这个方法,具体试用场景还不是很明确)
  • 增加"待交易"概念,购买商品回调里面,我们需要通过getPurchaseState方法来判断商品当前的状态。(重要)
  • 其他一些api修改,问题不大。不过一些开发者测试之类的功能应该很有用,但我没有具体去看。

推荐一个开源库,真心好用。这个开源库针对 1.x 版本 、2.x 版本 分别做了对应的封装

1.x 版本

2.x 版本

6、数据报表坑

应用发布以后,怎么看付费情况,怎么看相关的数据报表?其实 GooglePlay 开发者后台提供了相应的数据。

订单管理

Android GooglePay 填坑录_yanjun_16

收入情况

Android GooglePay 填坑录_赵彦军_17
Android GooglePay 填坑录_googlePay_18
Android GooglePay 填坑录_google billing_19

7、结算币种

币种涉及到两方面:google play如何跟用户结算,google play如何结算给开发者

google play跟用户结算

用户购买时的币种主要由用户的归属地决定,归属地依赖于:

1、绑卡用户由信用卡归属地决定。

2、非绑卡用户,由ip地址决定。

币种为归属地的币种,该归属地如果在配置价格列表中,按配置价格计算。不在列表中,价格则涉及到汇率换算,换算的汇率按用户购买时的汇率确定。

google play跟开发者结算

结算给开发者的币种,按开发者银行卡归宿地确定

价格为用户付费价格结合分成比例和汇率计算,如果涉及到汇率换算,则按用户购买时的汇率计算。

8、GooglePlay 测试条件

当许可测试用户免费测试应用内物品购买,用户安装的APK需满足以下条件:

  • 安装APK包名必须与Google Play Console测试渠道中APK包名相同。

  • 安装APK签名必须与Google Play Console测试渠道中APK签名相同。

  • 安装APK版本号必须与Google Play Console测试渠道中APK版本号相同。

9、邮件通知

不管你是购买成功、订阅成功、还是取消订阅,你都会通过邮件收到通知。
邮件内容包含:订单编号、订单时间、商品名字、支付价格、结算币种、付款方式
Android GooglePay 填坑录_google billing_20