本文原作者: 空同定翁,原文发布于简书 (https://www.jianshu.com/p/1a58d918ae74)
2019的Google I/O大会带来了很多Android相关的新功能,其中也包括Google Play支付的重大更新。这里先整理出相关更新点,后续米大师会针对新功能出版本优化接入,已接入米大师Google Play支付渠道的公司业务可先关注变更。
传送门:
What's New with Google Play Billing (Google I/O'19)
https://www.youtube.com/watch?v=N4004Set4F8
Use the Google Play Billing Library
https://developer.android.google.cn/google/play/billing/billing_library_overview
Google目前提供了两种集成Google Play支付的方式,AIDL和Google Play Billing Library,其中:
开发自己封装Google提供的AIDL接口,支付操作通过AIDL与Google Play Store交互解决。目前米大师采用的是这种方式,特点是:定制度高,可自己实现线程和安全特性封装,当然Google也提供了IabHelper的范例,但同样存在新功能难更新问题。
子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、用户在应用内购买物品
2、Google Play弹框显示交易码,提示用户通过该交易码去线下商店支付。
3、用户现在支付完成,Google Play通知支付完成。
API实现
1、调用新增接口enablePendingPurchases(),支持pending transaction。
2、在应用初始化调用查询接口BillingClient.queryPurchases()查询未消耗票据,并在支付回调onPurchasedUpdated中接收支付票据。
3、处理票据:处理票据的不同支付状态
新版Google Play Store支持应用外购买订阅。当应用有订阅物品时,应用下载界面会展示订阅信息,并提供购买界面。
待验证:通过应用外购买订阅,在进入应用时,应该可以通过BillingClient.queryPurchases()接口查到新支付票据。
新版Google Play Billing Library要求,开发者在用户支付完成、并发货给用户后,通过acknowledge api尽快告诉Google:用户已经支付成功,并收到支付的物品了。否则:如果Google在三天内没有收到acknowledge通知,会自动退款给用户,并撤销这笔交易!(该规则只适用于支付成功的交易,即票据状态为:SUCCESS)
发送确认通知的3种方式:
可消耗物品,调用cosumeAsync()接口
不可消耗物品(如订阅),调用acknowledgePurchase()接口,订阅需要在产生新token时(初次购买、取消再购买等)都调用该接口。
也可通过后台接口发送:google play developer api:acknowledge
API实现
Google Play Billing Library新增了两个接口:getOriginalPriceAmountMicros()和getOriginalPrice()。用于购买折扣物品时,查询物品原价的功能。
该功能还在测试,疑问的是:Google Play的折扣物品具体指的是啥?兑换码?配了入门价格的订阅?Google也没明确说明,还是等上线了再来细看。
新版Billing Library通过缓存优化了支付弹窗的弹出时间,相较于老版弹窗弹出时间,新版Library能缩短一半,有利于提升Google Play支付转化率。
前面在背景介绍中,已经说过老版的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实现
新Library优化统一了各接口的结果码,目前没看到相关文档说明,后续补上。
即Google规范了Billing Library的发布方式,以及AIDL的过期时间。
后续每年的Google的I/O大会,都会发布Google Play Billing Library的主版本。
Google Play Billing Library将成为官方支持的支付接入方式,老的AIDL方式将被废弃。
下图是Google Play Billing Library版本变更时间,以及AIDL方式废弃时间。
订阅正逐渐成为海外收入的主要来源,Google针对订阅带来的更新有:
即前面提到的New purchase surface功能,Google Play Store在下载应用页提供了购买订阅的ui。
订阅支持兑换码功能,之前Google Play兑换码只支持兑换普通物品。
订阅暂停。用户可以在Google Play Store上管理订阅时,选择是否暂停当前订阅。之前老的管理方式,只支持取消订阅,通过新增暂停订阅入口,可以让用户在取消订阅前选择是否暂停。
订阅暂停期间,用户不能访问订阅。
订阅暂停快结束时,Google会尝试恢复订阅,即尝试扣款。扣款成功,订阅恢复;扣款失败,订阅进入账户保留期。
下图是订阅暂停并进入账户保留期:
下图是订阅暂停后恢复:
需要先在Google Play Console开启订阅暂停功能选项:
参考: Google Play Billing Subsription
https://developer.android.google.cn/google/play/billing/billing_subscriptions#pause
在Google Play Console上,新增查看应用订阅取消原因报告。路径:财务报告->订阅
更长的订阅宽限期。之前只支持3天和7天的订阅宽限期,先新增14天和30天的订阅宽限期。
"开发者说·DTalk" 面向中国开发者们征集 Google 移动应用 (apps & games) 相关的产品/技术内容。欢迎大家前来分享您对移动应用的行业洞察或见解、移动开发过程中的心得或新发现、以及应用出海的实战经验总结和相关产品的使用反馈等。我们由衷地希望可以给这些出众的中国开发者们提供更好展现自己、充分发挥自己特长的平台。我们将通过大家的技术内容着重选出优秀案例进行谷歌开发技术专家 (GDE)* 的推荐。
点击屏末 | 阅读原文 | 了解更多 "开发者说·DTalk" 活动详情与参与方式