2019的Google I/O大会带来了很多Android相关的新功能,其中也包括Google Play支付的重大更新。这里先整理出相关更新点,后续米大师会针对新功能出版本优化接入,已接入米大师Google Play支付渠道的公司业务可先关注变更。
传送门:
What's New with Google Play Billing (Google I/O'19)
Use the Google Play Billing Library
Google Play Billing Library更新
背景
Google目前提供了两种集成Google Play支付的方式,AIDL和Google Play Billing Library,其中:
1. AIDL
开发自己封装Google提供的AIDL接口,支付操作通过AIDL与Google Play Store交互解决。目前米大师采用的是这种方式,特点是:定制度高,可自己实现线程和安全特性封装,当然Google也提供了IabHelper的范例,但同样存在新功能难更新问题。
2. Google Play Billing Library
子17年6月份开始,Google对外提供了Google Play Billing Library的Maven库,该库在原有的AIDL接口上再封装了一层,对外提供统一的接口,解决了一些大家吐槽的问题。简直是开发者的福音,然而并没有。。。
该Library存在的主要问题:
缺失developer payload字段
这是个透传字段,支付时外部传入,支付完成后在支付票据中带回。该字段很重要,通过这个字段实现订单关联等逻辑。
Note:AIDL接口一直有该字段,但billing library封装时将该字段去掉了!这是大家吐槽的地方,也是很多开发不敢升级的理由。鉴于Google在论坛回复后续将在AIDL中移除这个字段,米大师也做了相关备案,这里略去不表。
更新点
回到正题,似乎Google也听到了广大开发者的吐槽,在新版的Google Play Billing Library 2.0中,解决了开发者一直关心的问题,终于可以痛快的开始升级了。
上图是Google Play Billing Library的更新点,一个个细看下。
1. Pending transactions
即暂停交易或延时付款,在东南亚一些国家,本地支付渠道有限,很多地方不支持信用卡支付,即不能实时完成线上交易。用户通过线下现金支付或银行转账等方式,完成交易。
1、用户在应用内购买物品
2、Google Play弹框显示交易码,提示用户通过该交易码去线下商店支付。
3、用户现在支付完成,Google Play通知支付完成。
API实现
1、调用新增接口enablePendingPurchases(),支持pending transaction。
2、在应用初始化调用查询接口BillingClient.queryPurchases()查询未消耗票据,并在支付回调onPurchasedUpdated中接收支付票据。
3、处理票据:处理票据的不同支付状态
2. New purchase surfaces
新版Google play store支持应用外购买订阅。当应用有订阅物品时,应用下载界面会展示订阅信息,并提供购买界面。
待验证:通过应用外购买订阅,在进入应用时,应该可以通过BillingClient.queryPurchases()接口查到新支付票据。
3. Acknowledge all purchase
新版Google Play Billing Library要求,开发者在用户支付完成、并发货给用户后,通过acknowledge api尽快告诉google:用户已经支付成功,并收到支付的物品了。否则:如果google在三天内没有收到acknowledge通知,会自动退款给用户,并撤销这笔交易!(该规则只适用于支付成功的交易,即票据状态为:SUCCESS)
发送确认通知的3中方式:
可消耗物品,调用cosumeAsync()接口
不可消耗物品(如订阅),调用acknowledgePurchase()接口,订阅需要在产生新token时(初次购买、取消再购买等)都调用该接口。
也可通过后台接口发送:google play developer api:acknowledge
API实现
4. Consistent offers
Google Play Billing Library新增了两个接口:getOriginalPriceAmountMicros()和getOriginalPrice()。用于购买折扣物品时,查询物品原价的功能。
该功能还在测试,疑问的是:google play的折扣物品具体指的是啥?兑换码?配了入门价格的订阅?google也没明确说明,还是等上线了再来细看。
5. Faster purchase experience
新版Billing Library通过缓存优化了支付弹窗的弹出时间,相较于老版弹窗弹出时间,新版Library能缩短一半,有利于提升Google Play支付转化率。
6. Revamped developer payload
前面在背景介绍中,已经说过老版的Google Play Billing Library移除了developer payload字段,导致很多开发不敢升级的问题。惊喜的是,在新版Google Play Billing Library 2.0中,这个字段又开放了!
但是,设置的透传字段的方式跟之前AIDL不一样了!
老的AIDL接口,是在支付的时候传入payload,支付完成后在票据中返回该payload。
新Billing Library是在向google发送Acknowledge通知时设置payload,后续可通过票据获取该payload。
按前面理解,新Billing Library只能在支付后,并向用户发货后才能设置payload!那如果首次发货失败,payload没设置,后续用户变化了openid,一样存在票据关联错了openid的问题。
API实现
7. Improved error codes
新Library优化统一了各接口的结果码,目前没看到相关文档说明,后续补上。
8. Predictable Release & Support
即google规范了billing library的发布方式,以及AIDL的过期时间。
后续每年的google的I/O大会,都会发布google play billing library的主版本。
google play billing library将成为官方支持的支付接入方式,老的AIDL方式将被废弃。
下图是Google Play Billing Library版本变更时间,以及AIDL方式废弃时间。
Subscription更新
订阅正逐渐成为海外收入的主要来源,google针对订阅带来的更新有:
1. Subscribe & Install
即前面提到的New purchase surface功能,google play store在下载应用页提供了购买订阅的ui。
2. Promotion codes
订阅支持兑换码功能,之前google play兑换码只支持兑换普通物品。
3. Subscription Pause
订阅暂停。用户可以在google play store上管理订阅时,选择是否暂停当前订阅。之前老的管理方式,只支持取消订阅,通过新增暂停订阅入口,可以让用户在取消订阅前选择是否暂停。
订阅暂停期间,用户不能访问订阅。
订阅暂停快结束时,google会尝试恢复订阅,即尝试扣款。扣款成功,订阅恢复;扣款失败,订阅进入账户保留期。
下图是订阅暂停并进入账户保留期:
下图是订阅暂停后恢复:
需要先在google play console开启订阅暂停功能选项:
参考:Google Play Billing Subsription
4. Cancel survey reports on Console
在google play console上,新增查看应用订阅取消原因报告。路径:财务报告->订阅
5. Longer Grace Periods
更长的订阅宽限期。之前只支持3天和7天的订阅宽限期,先新增14天和30天的订阅宽限期。