Google in app billing 应用内支付
一 简介
Google in app billing 是google play 商店的应用内支付,他是一种应用内的虚拟的道具支付服务,支持应用内支付(inapp)和订阅(subs)两种模式;
在中国,如果你的应用要集成这个服务,需要注意有三点:
- in app billing不支持中国服务,不能绑定国内的信用卡(借记卡)
- in app的受管理商品中的本地价格不支持人民币
- 支付金额中会收取30%的手续费
当然的这些都是可以解决的,因为google play的应用内支付是国外的用户的一个主流消费模式.还是很多应用需要踩着坑去集成,比如说:
卖虚拟道具
的国际版应用
卖关卡版本
的付费应用等等.
本文主要是对version 3版本的in-app支付集成和介绍.
二 实现步骤
注: 前提已经在Google play 开发者平台完成注册开发者账号和绑定应用
地址: http://play.google.com/apps/publish/
1 : 服务集成
请参考官网详细示例(不需要翻墙)
下面是对上面的链接地址步骤简单的介绍:
打开SDK Manager ,在Extras的文件夹下面下载Google play billing library
然后可以在本地的SDK的play_billing目录下发现如下文件列表:
samples 是官方的一个demo,修改包名可以直接集成到自己项目
IInAppBillingService.aidl是我们需要集成在项目中的AIDL文件
集成步骤很简单,本人是直接修改了官网的samples,然后打成了jar包[点击Jar包下载],当然大家也可以自己封装使用
最终我集成的项目中也只要包含这两个文件即可,当然Manifest中的相关权限是不能忘记的
2 : 支付流程
注: 最详细官网的支付流程(不需要翻墙)
下面是基本序列图:
注: 这个序列图主要是针对
非消耗性的管理商品
,购买一次即为被拥有状态,无法再次购买.
从上图可以看出,App自己的后台不参与Google in app的支付处理,直接由客户端和Google Play完成;而其中的两次与客户端对接的作用是:
一: 我们把Google Play中的key没有直接明文写在App客户端,而是通过自己的后台拉去,是为了安全考虑
二: 购买完成后的订单信息上传给自己的服务器,既可以保存订单记录,又可以对用户购买商品的信息进行管理
非消耗性商品
获取key值,根据key值初始化工具类
private void initBilling() {//需要传入的key值String base64EncodedPublicKey = "你的google play key ";mHelper = new IabHelper(this, base64EncodedPublicKey.trim());//开启调试mHelper.enableDebugLogging(true);startUp();}
key值在Google控制台的如下位置;
检测连接服务,与Google Play进行连接
private void startUp() {if (null == mHelper) return;//检测连接服务mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {@Overridepublic void onIabSetupFinished(IabResult iabResult) {if (null == iabResult) return;if (!iabResult.isSuccess()) {isInitSuccess = false;L.e(TAG, "onIabSetupFinished:初始化失败,请重试 " + iabResult);return;}isInitSuccess = true;}});}
注: 查询list中指定的商品,如果不指定则查询默认的所以商品信息,这里指定
SKU_POPCOIN,和SKU_POPCOIN1两个商品.
List<String> additionalSkuList = new ArrayList<>();additionalSkuList.add(SKU_POPCOIN);additionalSkuList.add(SKU_POPCOIN1);mHelper.flagEndAsync();mHelper.queryInventoryAsync(true, additionalSkuList,mGotInventoryListener);
购买指定ID购买商品,这里购买ID为SKU_POPCOIN商品
if(mHelper == null) return;
mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(this, SKU_POPCOIN, BILL_REQUEST_CODE, mPurchaseFinishedListener, WDApp.getInstance().getLoginUserId());
处理返回的结果
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == BILL_REQUEST_CODE) {if (mHelper == null) return;if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {//在这里可以把订单信息传给自己的服务器L.e(TAG, "onActivityResult: " + resultCode);
super.onActivityResult(requestCode, resultCode, data);} else {L.e(TAG, "onActivityResult handled by IABUtil.");}}
商品消耗
注: Google billing支付默认的所有
受管理商品
都是非消耗性的商品
,购买一次就默认为被拥有
状态,无法继续购买,如果我们想让应用的道具成为消耗性商品
,就需要主动把非消耗性的商品消耗掉
,变成了未拥有
状态即可再次购买.
通过如下方法消耗:
mHelper.consumeAsync(inventory.getPurchase(SKU_POPCOIN), mConsumeFinishedListener);
主要有两次调用的地方:
1:购买成功后调用消耗’被拥有’状态
2:查询商品时,判断有没有’被拥有’状态的商品,如果有就消耗状态.
mConsumeFinishedListener是一个回调的接口,返回消耗商品是否成功
// Called when consumption is completeIabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {public void onConsumeFinished(Purchase purchase, IabResult result) {Log.d(TAG, "Consumption finished. Purchase: " + purchase + ", result: " + result);// if we were disposed of in the meantime, quit.if (mHelper == null) return;if (result.isSuccess()) {//消费成功 Log.d(TAG, "Consumption successful. Provisioning.");} else {showToast("Error while consuming: " + result);}Log.d(TAG, "End consumption flow.");}};
测试
注: 务必参考的官方测试文档
准备
- 支持Google Play 商店的 Android 手机
- Google Play支持的非国内信用卡(借记卡)
主要步骤
1.上传一个
已经集成Google billing支付的App
到google play的控制台的beta或者Alpha渠道上.
2.建立一个受管理的商品列表
,包含你要出售的商品,包括ID,价格,描述等.创建商品列表
3.App开发者平台账号
需要绑定信用卡(用于收款
).
4.添加测试账号,测试账号不能是App平台账号
.
5.发布的测试版本通过之后,会有一个测试的下载链接,把这个链接发给需要测试的账号人员,点击成为测试员即可.
6.测试账号需要绑定非国内的信用卡(用于支付
),测试账号需要绑定支持play 商店的手机.
注:
1. 测试过程不会消耗费用.
2. 上传的版本需要在原来的版本上增加,测试版只要上传一次即可.只要连接走通,如果有bug也不需要继续上传,直接用修改后的版本测试即可
3. 必须有签名,而且不同的版本签名要保持一致.
4. 包名必须与控制台的包名一致.
Google in app billing 应用内支付相关推荐
- Google In App Billing
在程序中怎么倒卖商品?iPhone有In App Purchase, Android自然不甘落后, 捣鼓半天终于搞出一个In App Billing,请见http://developer.androi ...
- Google Play In-app Billing
0, 概述 应用程序内部付费机制(Google Play In-app Billing, 以下简称应用内支付)是Google Play的一项服务,这种服务为应用内购买提供支付流程. 要使用这项服务,你 ...
- 接入华为应用内支付,验证购买Token接口,返回“rights invalid”
有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":& ...
- Google play billing(Google play 内支付)
http://www.bubuko.com/infodetail-930440.html [html] view plaincopy 如billing开发文档所说,要在你的应用中实现In-app Bi ...
- SDK接入(2)之Android Google Play内支付(in-app Billing)接入
SDK接入(2)之Android Google Play内支付(in-app Billing)接入 SDK接入(2)之Android Google Play内支付(in-app Billing)接入 ...
- google应用内支付 in-app billing(二)
在写<google应用内支付 in-app billing(二)>的时候我并没有写这篇文章的前传<google应用内支付 in-app billing(一)>,留到后面再写吧. ...
- Google play billing(Google play 内支付) 下篇
开篇: 如billing开发文档所说,要在你的应用中实现In-app Billing只需要完成以下几步就可以了. 第一,把你上篇下载的AIDL文件添加到你的工程里,第二,把<uses-permi ...
- Google play billing(Google play 内支付) 上篇
写在前面: 最近Google貌似又被全面封杀了,幸好在此之前,把Google play billing弄完了,现在写篇 博客来做下记录.这篇博客一是自己做个记录,二是帮助其他有需要的人.因为现在基本登 ...
- GooglePlay内购接入错误Google Play In-app Billing API version is less than 3
接入谷歌内购时,代码部分接入好了,于是打算开始测试,但是打开应用后初始化时一直提示错误:Google Play In-app Billing API version is less than 3.看名 ...
最新文章
- 架构师之路 — 分布式系统 — CAP 定理
- [WebApp]定宽网页设计下,固定宽度布局开发WebApp并实现多终端下WebApp布局自适应...
- Introduction to Big Data with Apache Spark 课程总结
- 你在孩子身上偷的懒,终将会变成最大的遗憾
- 推荐JVM的9款编程语言杀手开发利器
- 给Eclipse插件的View加上菜单和工具条
- 产品研发管理(二):使用SubVersion进行代码管理
- [转]C#操作Excel开发报表系列整理
- 遗传算法c语言 x^2,c语言遗传算法 解决 y=x2问题
- Typora mac 安装包下载与提取
- Tasker 一个配置实现微信朗读,微信消息播报+基础版的防撤回
- linux killer网卡,linux oom-killer(示例代码)
- 网络学习 2g 3g 4g 5g技术对比
- windows 10如何设置局域网共享文件夹,详细教程
- ViTDet程序调用不了GPU全部内存,而且显示NVCC: not available
- android 表情键盘切换,如何在键盘之间切换(从表情符号到qwerty,反之亦然)
- linux 桌面环境比较 (2013-10-25)
- BibTeX的使用方法
- 【分享】光纤光缆PPT
- 如何和后台接触的_民熔小课堂|跌落式熔断器该如何检修?点进来告诉你答案!...
热门文章
- 智能电话机器人的套路你知道多少?
- python黑科技自动p图_不用ps让Python教你P图
- 架构自己的思维模式之不平凡的思考力读书笔记
- 学会对美工Say No---Material Design
- python离线_python离线神器
- 8086cpu中,FR寄存器的标志位
- 使用QGIS转换矢量数据投影
- 【入门AUTOSAR网络管理测试】BSM-RMS状态转换
- 对自定义数据进行谱系聚类分析
- xpath java html_Java 使用HtmlCleaner、Saxon和XPath(XPathEvaluator)进行html查找解析的方法...