游戏中添加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 base64EncodedPublicKey
   mHelper = 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了~



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值