本帖地址:http://blog.csdn.net/jinjian2009/article/details/9140891

这周做了google的内购,没搞过google的内购还是觉得比较繁琐的

google官方教程:http://developer.android.com/training/in-app-billing/index.html

这个教程主要写了四节:

第一节:Preparing Your In-app Billing Application(准备你的内购应用)

内容如下:

1.下载例子程序,按照提示的做OK的,可以把项目trivialdrivesample配置到Eclipse里看看

2.添加你的应用到开发者后台。搞定之后会得到个Base64 Key,这个在代码里会用到,主要是用于google来识别你的应用

3.添加In-app Billing(后面简称iab)库。其实就是IInAppBillingService.aidl 这个文件,从例子工程里找到它,copy到自己工程下的src下的包com.android.vending.billing里面,再把例子工程里的src下的包com.example.android.trivialdrivesample.util下面的程序copy到自己工程的src下,自己创建个包名就好,本人偷懒直接用了它的包名

4.添加权限,AndroidManifest.xml里面添加

<uses-permission android:name="com.android.vending.BILLING" />

5.发起和google play的连接

在activity里添加变量mHelper,以及初始化之,这里的base64EncodedPublicKey需要赋值为之前第2步申请到的base64 Key

IabHelper mHelper;@Override
public void onCreate(Bundle savedInstanceState) {// ...String base64EncodedPublicKey;// compute your public key and store it in base64EncodedPublicKeymHelper = new IabHelper(this, base64EncodedPublicKey);
}

然后需要调用mHelper的startSetup方法,这是个异步方法,主要是连接google play用的,看看能不能付费什么的。我学习例子工程把这个方法写到了OnCreate里,在mHelper new出来之后。

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {public void onIabSetupFinished(IabResult result) {if (!result.isSuccess()) {// Oh noes, there was a problem.Log.d(TAG, "Problem setting up In-app Billing: " + result);}            // Hooray, IAB is fully set up!  }
});

然后还需要在Activity里面将mHelper移除掉

public void onDestroy() {super.onDestroy();if (mHelper != null) mHelper.dispose();mHelper = null;
}

PS:上面的代码可以copy例子工程里的,那里面写的可能全一点。

第二节:创建用于出售的iab商品

1.在google play里面添加iab商品。

1)这个是在后台做的,需要说明的是,这里需要添加APK文件,并且这个APK文件需要签名,必须保证这个APK是你最终的APK,意思是签名啊包名啊证书啊什么的,后面都不改了。还有不要发布该应用

2)添加商品的时候需要指定商品的信息,包括唯一标识ID,描述,价格等信息。唯一标识ID,也被称为SKU,通过SKU可以查询商品的信息

3)上传之后可能需要一段时间才能查询到信息

2.查询可购买物品

通过上面的SKU进行查询,可参照原帖子代码,或者例子工程代码

添加代码后可以运行APP,看能不能查询到商品信息。需要注意如下几点:

1)如果在google play里面添加商品的话,现在查询会出错。

2)如果在国内(大陆地区)查询也是会出错的~解决办法参考了帖子:http://zengrong.net/post/1801.htm

说下本人的解决办法:

---------------------------------------------------------------国内IAB测试方法-------------------------------------------------------------------

<1>先去找个国外VPN,我在https://www.vcupmars.com注册的,免费的20分钟会断,500M的流量~当然这网站也有没有限制的,不过需要收费,记住账号密码,以及在我的帐户里面的域名地址

<2>然后在手机上打开wifi,再设置好VPN,主要是新建个VPN,服务器为上面的域名地址,然后登陆VPN,账号密码为上面网站注册的账号密码

<3>再去卸载google play的更新,并清除数据(在 设置--》应用程序找到google play)

<4>再打开google play,进去看下,有没有付费应用可以下载,如果有说明可以了

<5>进入自己的应用,看看能不能查询到商品(如果不能的话,应该还是google play里面的问题,可以退出应用再进google,然后再进应用。我发现一般等google play商店更新完之后会OK的)

--------------------------------------------------------------------------------------------------------------------------------------------------

第三节:购买应用内计费商品

看google官方教程,或者例子工程,应该都可以

不过本人做的时候,以为出了点问题,主要是购买之后没有消耗商品~什么意思呢,google play上买东西是这样子的,他是买了之后相当于放到了仓库里,这个时候你还要去消耗它变成你应用里的东西~

如果没有消费掉的话,就会出错哦~

第四节:测试应用程序

这个也没什么说的,照着google官方帖子看看~

比较麻烦的是需要绑定信用卡~这个大家自己搜搜帖子吧~貌似开发者账号不能用于测试,可以添加其他的账号测试

PS:下面说说过程中遇到的其他比较棘手的问题:

1.如果在大陆地区,不使用VPN的话,点击购买商品是会闪退的

主要的原因是第一节里面IabHelper mHelper 调用startSetup方法的时候连接google play出错,后面再调用的时候有些东西没有设置好

解决办法是通过mHelper的变量mSetupDone来判断购买按钮的事件是否触发。当然源代码里的mSetupDone是私有的,可以将其设置为public或者写个调用方法

2.如果在大陆地区,不使用VPN的话,进入应用后,退出应用的时候会报应用发生意外

这个主要的原因是,在第一节里面写的在Activity的onDestroy方法里面需要调用IabHelper mHelper 的dispose方法,而在dispose方法里有这样一句

if (mContext != null) mContext.unbindService(mServiceConn);

这里出错了~虽然mContext mServiceConn都不为空,但是因为在大陆地区,所以在IabHelper mHelper 的startSetup方法里没有bindService

解决办法,写个变量boolean mBindedService = false;然后在startSetup方法里bindService的时候赋值给mBindedService,代码如下:

mBindedService = mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

然后再dispose里面加上mBindedService作为判断条件

if (mContext != null && mBindedService) mContext.unbindService(mServiceConn);

通过上面设置应该就OK了,还有一条是我自己的原因

3.因为我对代码做了一些特殊处理,然后呢发现居然找不到一个类了~

后来发现是断言做的怪~Base64.java有个断言assert (e == outBuff.length);

改成抛异常,OK了~

google内购In-App Billing相关推荐

  1. google内购-订阅模式

    1.订单有变化接收google推送的接口,据此可以实现续订订单 /*** 接收google推送接口* @param body* @param request* @param response* @re ...

  2. Python Google内购服务端验证

    Google内购完成后,服务端需要校验订单的状态是否正确(是否已经成功付款). 一.申请认证 参考https://developers.google.cn/android-publisher/gett ...

  3. Google 内购总结

    Google 内购坑之总结 最近项目中增加了 Google 内购的内容,接入并不难,在这里总结下接入过程中的细节和坑的地方. 内购接入过程 如何接入官方的教程写的很详细(传送门),并且官方也提供了一个 ...

  4. 【Unity】Google内购

    目录 一.创建空安卓库工程 二.Unity配置 三.注意事项 版本更新注意事项 服务器相关(相关文章如下) 支付相关错误码 https://developer.android.com/google/p ...

  5. Google内购--封装版

    最近老大提出了一个需求,在应用里面加一个内购.由于之前没做过这块,所以百度一番.网上都是讲的使用一大堆的utils.还要加一个aidl文件.感觉挺麻烦的.最终让我找到了:com.android.bil ...

  6. Google 内购 - Android

    1. 添加依赖 implementation "com.android.billingclient:billing:5.0.0" 2.支付相关的代码 /*** 连接**/publi ...

  7. java集成Google Pay内购

    挺简单的直接上代码: api入参 @Data @ApiModel("google支付表单信息") public class GooglePayForm {/*** 包名*/@Api ...

  8. 解决某APP游戏内购

    对某APP内的道具购买进行破解 学习笔记三:对一款存在道具.关卡内购的APP进行破解使其道具.关卡购买免费化 一.将该未进行处理的APP通过模拟器安装使用 通过安装后的使用(购买其中的道具)发现该AP ...

  9. 苹果app商品定价_iOS 开发_2017苹果内购价格表

    [作者前言]:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进! 1.应用场景: 使用苹果内购的APP/游戏 2.实现目标: 了解 ...

最新文章

  1. 550 万华人在美人才现状:7 诺奖、300 院士,320 八大常春藤高校终身正教授......
  2. Idea+Maven+Jersey2+Tomcat配置Web服务
  3. router-link-active 和 router-link-exact-active router-link-active
  4. python中continue用法案例_Python continue语句实例用法
  5. 【转】做好性能测试的6个关注点
  6. python图像识别代码_用Python进行简单图像识别(验证码)
  7. LeetCode题解
  8. 【Python】Turtle绘制科赫雪花
  9. 正弦定理和余弦定理_高三 | 数学必修五正弦定理和余弦定理应用举例考点梳理...
  10. ASR开发工作笔记0001---Eclipse DS-5-报错Cannot checkout an uncounted license withini a Windows Terminal Servi
  11. Asp.Net超时问题汇总
  12. 自己封装的一个模拟下拉列表的插件
  13. 基于图像识别的火灾检测系统设计思路流程
  14. 计算机网络实验-----常用网络命令操作
  15. 【Flutter小记3】Android打开前置或广角摄像头的同时打开闪光灯方案
  16. Windows XP 系统故障终极排查大全
  17. openFOAM动量方程中张量的处理
  18. 专利地图制作及解析研究
  19. html游戏寻宝源码,阅途方法丨No.8: Compare and Contrast,来一次原版阅读的'寻宝游戏'!...
  20. pythonhtml生成word_html转word

热门文章

  1. 计算机网络面试问题(汇总)
  2. 大趋势!Mobileye呼唤全行业大整合
  3. 深入理解Java虚拟机学习笔记-1.JVM内存模型
  4. 胖瘦如何衡量?由BMI指数来判断
  5. 支付宝h5支付,无法调起支付控件问题
  6. 使用vscode做断点调试
  7. 获取excel文件路径的两种方法
  8. Spring面试题之循环依赖与三级缓存
  9. 网络规划设计师如何复习?
  10. 一年来完全用Linux工作