一 简介

Google in app billing 是google play 商店的应用内支付,他是一种应用内的虚拟的道具支付服务,支持应用内支付(inapp)和订阅(subs)两种模式;
在中国,如果你的应用要集成这个服务,需要注意有三点:

  1. in app billing不支持中国服务,不能绑定国内的信用卡(借记卡)
  2. in app的受管理商品中的本地价格不支持人民币
  3. 支付金额中会收取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.");}};

测试

注: 务必参考的官方测试文档

准备

  1. 支持Google Play 商店的 Android 手机
  2. 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 应用内支付相关推荐

  1. Google In App Billing

    在程序中怎么倒卖商品?iPhone有In App Purchase, Android自然不甘落后, 捣鼓半天终于搞出一个In App Billing,请见http://developer.androi ...

  2. Google Play In-app Billing

    0, 概述 应用程序内部付费机制(Google Play In-app Billing, 以下简称应用内支付)是Google Play的一项服务,这种服务为应用内购买提供支付流程. 要使用这项服务,你 ...

  3. 接入华为应用内支付,验证购买Token接口,返回“rights invalid”

    有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":& ...

  4. Google play billing(Google play 内支付)

    http://www.bubuko.com/infodetail-930440.html [html] view plaincopy 如billing开发文档所说,要在你的应用中实现In-app Bi ...

  5. SDK接入(2)之Android Google Play内支付(in-app Billing)接入

    SDK接入(2)之Android Google Play内支付(in-app Billing)接入 SDK接入(2)之Android Google Play内支付(in-app Billing)接入 ...

  6. google应用内支付 in-app billing(二)

    在写<google应用内支付 in-app billing(二)>的时候我并没有写这篇文章的前传<google应用内支付 in-app billing(一)>,留到后面再写吧. ...

  7. Google play billing(Google play 内支付) 下篇

    开篇: 如billing开发文档所说,要在你的应用中实现In-app Billing只需要完成以下几步就可以了. 第一,把你上篇下载的AIDL文件添加到你的工程里,第二,把<uses-permi ...

  8. Google play billing(Google play 内支付) 上篇

    写在前面: 最近Google貌似又被全面封杀了,幸好在此之前,把Google play billing弄完了,现在写篇 博客来做下记录.这篇博客一是自己做个记录,二是帮助其他有需要的人.因为现在基本登 ...

  9. GooglePlay内购接入错误Google Play In-app Billing API version is less than 3

    接入谷歌内购时,代码部分接入好了,于是打算开始测试,但是打开应用后初始化时一直提示错误:Google Play In-app Billing API version is less than 3.看名 ...

最新文章

  1. 架构师之路 — 分布式系统 — CAP 定理
  2. [WebApp]定宽网页设计下,固定宽度布局开发WebApp并实现多终端下WebApp布局自适应...
  3. Introduction to Big Data with Apache Spark 课程总结
  4. 你在孩子身上偷的懒,终将会变成最大的遗憾
  5. 推荐JVM的9款编程语言杀手开发利器
  6. 给Eclipse插件的View加上菜单和工具条
  7. 产品研发管理(二):使用SubVersion进行代码管理
  8. [转]C#操作Excel开发报表系列整理
  9. 遗传算法c语言 x^2,c语言遗传算法 解决 y=x2问题
  10. Typora mac 安装包下载与提取
  11. Tasker 一个配置实现微信朗读,微信消息播报+基础版的防撤回
  12. linux killer网卡,linux oom-killer(示例代码)
  13. 网络学习 2g 3g 4g 5g技术对比
  14. windows 10如何设置局域网共享文件夹,详细教程
  15. ViTDet程序调用不了GPU全部内存,而且显示NVCC: not available
  16. android 表情键盘切换,如何在键盘之间切换(从表情符号到qwerty,反之亦然)
  17. linux 桌面环境比较 (2013-10-25)
  18. BibTeX的使用方法
  19. 【分享】光纤光缆PPT
  20. 如何和后台接触的_民熔小课堂|跌落式熔断器该如何检修?点进来告诉你答案!...

热门文章

  1. 智能电话机器人的套路你知道多少?
  2. python黑科技自动p图_不用ps让Python教你P图
  3. 架构自己的思维模式之不平凡的思考力读书笔记
  4. 学会对美工Say No---Material Design
  5. python离线_python离线神器
  6. 8086cpu中,FR寄存器的标志位
  7. 使用QGIS转换矢量数据投影
  8. 【入门AUTOSAR网络管理测试】BSM-RMS状态转换
  9. 对自定义数据进行谱系聚类分析
  10. xpath java html_Java 使用HtmlCleaner、Saxon和XPath(XPathEvaluator)进行html查找解析的方法...