实现google内支付In-app Billing开发经验

来源:互联网 发布:qq飞车王国战神数据 编辑:程序博客网 时间:2024/05/21 09:57

        上个月google play内支付这个功能,这功能我是花了很长时间才完成的。从官方下载回来Demo是一个充汽油的例子,,我自己整理下了,说说我的看法,可能不一定都对,但希望能给你们提供帮助。

        开发前的准备,如果没,就向你们公司申请吧:

        1、root过的android手机一部

       2、翻墙工具(VPN

       3、Google帐号一个 (需绑定visa等信用卡) 用做测试帐号

       4、开通一个google平台帐号(能把sdk发布上去)


      开发中的问题:

      首先说下base64EncodedPublicKey的作用的吧,这个是每个app发布到google play后台时,google会生成的一个非常长key ,这个key是用在google交易中的安全验证,建议

把它放在服务端,通过请求服务端时获取;

     接下来是productid,它是你在后台设置的一个产品id,当你发布你的app上去并设置好产品id时,你就可以通过这个id来获取该商品的相关信息,如:价格、产品名、详细说明等,这个也是连接google play内支付的第一个步骤;

      当你获取到以上信息时,就证明你的后台设置正确了,并且可以进入google的支付界面了,用户在上面的操作,会通过onActivityResult返回数据,你只需要判断requestCode 和resultCode 是否正常,(返回相关参数,请参看api吧,正常是requestCode == 1001,resultCode == RESULT_OK)以上操作完成后,还需一个“消耗”(consumePurchase)的步骤,官网也提到过,因为这些交易不一定都是只交易一次而已,像游戏币这些的话,是一种虚拟的货币,是可多次购买的,所有消耗这一步其实就是为了告诉google,这件商品是可被买家多次购买的,“消耗”这一步骤可调用多次,Demo上在各个环节上也调用过的。

      注意事项:

    1、 在上传app时,为了前期开发方便 ,可随意上传,但必须要加上权限<uses-permission android:name="com.android.vending.BILLING" />

     2、如果app没正式发布,那么测试时,需要在后台添加测试人员,该测试人员就是以上讲的第三点,而且需要正式打包出来测试(keystore一定要保持好)

  

    代码简单说明:

    mHelper :是一个帮助类,可在demo上查看

    SKU_GAS:商品的名字(后台定义的)


     mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
                public void onIabSetupFinished(IabResult result) {

                         //  这是连接的第一步,通常是初始化和检查设备是否符合购买要求  TODO...

                        mHelper.queryInventoryAsync(mGotInventoryListener, list); 

                }

    //查询商品

    IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
             public void onQueryInventoryFinished(final IabResult result,
                        final Inventory inventory) {

                        //  这是查询其商品的相关信息,如价格,商品说明等。  TODO...

                        mHelper.launchPurchaseFlow(activity, SKU_GAS, RC_REQUEST,
                            mPurchaseFinishedListener, payload);           

                }

    //购买商品

    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
              public void onIabPurchaseFinished(final IabResult result,
                         final Purchase purchase) {

                        //  是否购买成功。  TODO...

                        mHelper.consumeAsync(purchase, mConsumeFinishedListener);      

                }


    //通知google消耗商品

    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
        public void onConsumeFinished(final Purchase purchase,
                final IabResult result) {

                        //  查询该商品是否以消耗成功,为下一次购买做准备。  TODO...

                         

                }


      demo地址:  http://download.csdn.net/detail/a2855090/5686369