什么是Google Play?
受国内政策影响,大部分android用户是没有接触过google play的。Google Play是什么呢?是下载应用的Google Play Store?是必须安装的Google Play服务框架?还是在Store中买物品时的Google Play支付。我更乐意将Google Play划分为以下几个部分:
Google Play Store
Google Play Services
Google Play支付
Google Play Server
Google Play Store
Google Play Store
提供了应用下载,类似与应用宝。提供的应用分为付费/免费应用,付费应用指支持google play应用内购买的应用。
Google Play Services
Google Play Services提供了google play支持服务,如google账户服务等。
Google Play支付
Google Play支付,其作用类似于微信支付或qq钱包,是本文介绍的重点。当用户在google play store下载某个付费应用,并进行购买时,实际的购买是通过google play支付完成。
Google Play Server
Google Play的服务端,提供支付订单管理、票据验证等各种操作。
如何测试Google Play支付?
小A开发了某款应用,该应用具有应用内购买功能(用户能在应用内进行购买,如在游戏中购买钻石游戏币)。小A现在需要将该应用发布到Google Play Store中,发布前希望能测试该应用的购买功能。Google Play提供了免费测试购买功能,即测试用户可以免费购买应用内物品。
该测试需要在Google Play Console中进行配置
Google Play应用内购买
什么是应用内购买?
简单来说,就是用户能在应用内购买物品,如用户能在王者荣耀中买游戏币买钻石等。
Google Play提供了应用内购买的能力,说人话就是:用户可以通过Google Play支付来完成应用内物品的购买。
回到小A发布应用的例子上,先回答几个问题:
1. 小A为什么要发布应用到Googel Play Store呢?
答:推广应用,提高下载量,赚钱。
2. 应用发布到Google Play Store有什么要求呢?
答:这么说吧,发布到Google Play Store的应用如果具有应用内购买功能的话,Google要求一定要用Google Play支付。为什么呢?Google 要分成,分30%。那Google当然得知道每个应用的账单流水了,要不然怎么计算这30%。
那Google Play应用内购买是怎么玩的呢?
ps: 为防讲的不清楚,先贴个官方版:google play应用内购买
先举个例子:深圳有很多大商场,如天虹,天虹中有各种品牌的店面,如adidas,nike。5号小B发工资了,带着妹子来逛天虹,想给妹子买双运动鞋。逛了一大圈后,决定在nike店里买鞋x。服务员给小B开了单子,叫他出门左拐去收银台付款;小B拿着单在收银台付钱后,收银员给小B一个付钱后的票据;小B拿着票据,回到nike店,取回买好的鞋子。
上面例子中,可类比成:
小B买鞋的例子涉及到几个概念:
物品
下单
支付
票据
发货
物品
国外都是物品概念,这就话怎么理解呢?
即一个物品对应一个物品Id,用户一次只能购买一个物品。
假设某游戏存在游戏币x,假如小C想购买5个游戏币x,有两种方法,方法A:一次购买5个游戏币x;方法B:购买5次,每次购买一个游戏币x。国内支持方法A、B,但在国外如google play或iap,只支持方法B。如果想一次购买5个游戏币x,那在google play中只能将5个游戏币x配置成一个物品。
Google Play将物品划分为:消耗型物品和订阅型物品。
消耗型物品
用户物品购买完成后必须消耗,否则不能再次购买该物品。
回到上面例子,小C想购买5个游戏币x,现只能通过购买5次来实现。那小C在每次购买完游戏币x后,都必须通过Google Play的消耗接口消耗该物品,否则下次小C不能再购买游戏币x,并提示小C“已拥有该物品“”。
消耗接口:Google Play提供的API,用来物品购买后的消耗。
订阅型物品
订阅物品购买后不需要消耗。
订阅型物品类似于国内的包月、7天特权等概念。如腾讯视频的月卡会员、vip7天特权,对应到Google Play就是:按月订阅型物品,按周订阅型物品。
示例
上图是配置在Google Play应用的物品信息,可以看出:
每个物品对应一个唯一的物品Id
每个物品有对应的价格
后两个订阅型物品,是按3个月订阅的,即用户购买三个月后,用户不再拥有该物品。
下单/支付
Google Play是不区分下单和支付的,即当用户购买物品时,用户支付完成后,Google Play Server会为这次购买生成一个唯一的订单号。
用户购买完成后,Google会将订单信息发送到用户关联的GMail邮箱中:
测试用户购买
应用的测试用户可免费购买该应用内的物品,Google Play Server同样会为其生成唯一的订单号,但该订单号是由字母组成,而真实付费购买订单是由数字组成,如上图所示。
票据
当用户支付完成后,开发者在支付接口回调中,会收到这次购买的票据信息。如:
如上所示,票据主要包含了以下部分:
订单号
应用包名
购买的物品Id
购买时间
购买状态
透传字段
该字段是开发者调用Google Play支付接口时传入,支付完成后,在票据中返回。其作用主要有:
安全验证,通过判断该字段是否相同来判断是否为虚假票据。
信息关联,如在米大师中,米大师会为每次购买生成唯一的订单号,通过该字段可以实现米大师订单号与Google Play订单号的关联。
GW返回令牌
该字段主要用于Google Developer API的使用。
发货
Google Play不存在发货概念,当用户支付完成后,开发者只需在Google Play支付回调中通知应用服务端进行发货,并在发货完成后,调用Google Play的消耗接口进行消耗即可。
举个栗子:
小B在王者荣耀韩国版买了1000点券,支付通过Google Play完成,小B在完成支付后,查看账户余额发现购买1000点券已经发放。这1000点券由谁发放呢?当然是由应用自身去完成发货,即王者荣耀,而由于王者荣耀韩国版接的是米大师,物品托管在米大师,所有这1000点券就交由米大师去发放了。
发货通知方式
Google Play
Google Play采用SDK通知方式,通知应用服务器发货:
用户支付完成后,开发者在Google Play支付回调中通知应用SDK发货;
应用SDK通知应用Server发货
国内渠道
国内大部分渠道采用的是Server通知方式,即由支付渠道Server通知应用Server进行发货。
Google Play存在问题
Google Play从发布到现在已历经多个版本,当年的业务场景发展到现在也暴露出了不是问题。业务在接入Google Play时也经常会碰到各种疑惑,这其中包括:
汇率
币种
退款
汇率
Google使用用户下单时的汇率,并将买家币种换算成Google账号所有币种。现在汇率是全天候更新,Google会自动完成币种换算。
这意味着啥?
意味着开发者再也不用关注汇率带来的坑了!在之前,Google Play的汇率不是实时更新的,那就可能存在用户通过汇率差低价买入物品,而导致开发者损失。
关于汇率差,还存在一个问题:就是Google Play结算问题。
Google Play结算采用的方式应该是固定周期结算(降低结算费用),那可能存在以下情况:
开发者银行账户是香港的,用户在美国购买了物品,购买时汇率为A,而到Google Play结算时美元兑换港币汇率发生变化,此时汇率为B。如果B小于A,用户是否有损失,此时Google Play是如何进行处理的?
币种
当用户点击够买某物品时,会弹出Google Play确认框,上面会显示物品的价格和币种:
之前测试发现,不同的情况,该币种不一样。这个币种是由什么决定的呢?
绑卡用户
什么是绑卡用户,即用户在Google Payment完成信用卡的绑定,绑卡时需要填写用户的归属地。
绑卡后,以后用户的支付币种就由绑卡用户的归属地决定。
非绑卡用户
如果用不未绑卡,那这个币种就是根据用户的IP决定的。如用户IP在香港,显示的就是HK了,在美国显示的就是US。
固定币种
某些区域,如南非,可能由于当地货币汇率变化太快。Google Play在这些区域采用默认币种进行支付,默认币种为美元。
退款
Google Play允许用户在购买物品两小时内全额退款,但一个用户下一个物品只能退款一次。
Google Play允许的退款范围包括:
购买两小时内退款
未经授权的交易退款:65天内可申请退款
商品有缺陷或无意中进行交易退款:48小时内可申请退款,48小时后由开发者决定是否退款。
退款存在问题:
用户在某游戏中购买了物品x,两小时内进行退款,此时物品已经发货。此时物品已发货,但开发者并未收到钱,导致开发者损失,而Google Play并不补偿这部分损失。
解决方法:
首先Google Play针对退款进行限次,两小时内同一物品只能退款一次,其它退款需要进行审核。其次,应用开发者可以通过接入风控系统来发现恶意退款。米大师接入了风控系统,能根据用户设备账号等信息判断用户是否是恶意退款,从而避免业务损失。