JackRyannn Blog
  • /home
  • /archive
  • /tags
  • /about
  • /RSS

游戏中接入facebook

10 Mar 2016
  • Android

FaceBook接入

准备工作
—-

1.首先从Android sdk Manager里下载安装extra里的 Google Play Billing Library
2.这时候在你的sdk目录下的/extras/google/play_billing/就会又个以.aidl结尾的文件。

  1. 在Tools > Android > SDK Manager中的Appearance & Behavior > System Settings > Android SDK里选择sdk tools的选项卡,下载安装google play billing library,如图所示。

image

4.然后在 File > New > Directory 输入aidl(建立一个aidl文件夹),再点击 File > New > Package中新建一个包,叫做com.android.vending.billing,然后把IInAppBillingService.aidl文件拷进去,形成这样的一个结构。

image
5.在manifest里添加权限: 到此准备工作基本完成。最后别忘了build一下你的module,让aidl文件生成相应的java文件,才可以使用。

建立service连接

在你的MainActivity里添加这段代码,建立app和google play的连接。
这个ServiceConnection是bindService()的一个参数,用来表明activity和service的连接状态,如果连接成功则运行onServiceConnected()方法,即给mService赋值。

	  IInAppBillingService mService;
	  
    ServiceConnection mServiceConn = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService = null;
        }

        @Override
        public void onServiceConnected(ComponentName name,
                                       IBinder service) {
            mService = IInAppBillingService.Stub.asInterface(service);
        }
    };  
然后在onCreate()方法中实现绑定,来读取service中的数据或方法    
	
	Intent serviceIntent =
	        new Intent("com.android.vending.billing.InAppBillingService.BIND");
	serviceIntent.setPackage("com.android.vending");
	bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); 
	

商品查询

示例代码:

 
	 public void query(View view){
	//为了防止阻塞主线程,所以新建一个线程
	        new Thread(){
	            @Override
	            public void run() {
	                super.run();
	                ArrayList<String> skuList = new ArrayList<String>();
	                skuList.add("开发者中心里设置的商品id,也称sku");
	                Bundle querySkus = new Bundle();
	                querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
	                try {
	                    Bundle skuDetails;
	                    //3是API的版本号,然后是包名,购买方式是应用内购买inapp,最后把刚刚输入的商品id列表传进去
	                    skuDetails = mService.getSkuDetails(3,
	                            getPackageName(), "inapp", querySkus);
	                    int response = skuDetails.getInt("RESPONSE_CODE");
	                    //如果返回值为0,则说明请求成功
	                    if (response == 0) {
	                        ArrayList<String> responseList
	                                = skuDetails.getStringArrayList("DETAILS_LIST");
	
	                        for (String thisResponse : responseList) {
	                            JSONObject object = new JSONObject(thisResponse);
	                            String sku = object.getString("productId");
	                            String price = object.getString("price");
	                            Log.v("info",sku+"-----"+price);
	                        }
	                    }
	                } catch (RemoteException e) {
	                    e.printStackTrace();
	                } catch (JSONException e) {
	                    e.printStackTrace();
	                }
	
	            }
	
	        }.run();
	    }
	    

商品购买

      Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),"商品的id", "inapp", "developerPayload(商品的附加信息,google在返回购买信息的时候会返回)");
        PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
        	//这个方法和startActivityForResult类似,然而我看了半天看不懂,只知道最后会调用onActivityResult()。        startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),Integer.valueOf(0));  
    

购买完成后会调用onActivityResult(),可以在这里读取数据:

	 @Override
	    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	            if (requestCode == 1001) {
	                int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
	                String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
	                String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
	
	                if (resultCode == RESULT_OK) {
	                    try {
	                        JSONObject jo = new JSONObject(purchaseData);
	                        String sku = jo.getString("productId");
	                        Log.v("info_code",String.valueOf(responseCode));
	                        //这里的签名是为安全性做的,可以用公钥来验证来源是否真的是google
	                        Log.v("info_signature",String.valueOf(dataSignature));
	                        Log.v("info",jo.toString());
	                    }
	                    catch (JSONException e) {
	                        e.printStackTrace();
	                    }
	                }
	            }
	
	    }  
	

最近文章

  • 美团日报
  • 美团日报
  • 美团日报
  • 美团日报
  • 美团日报

标签

  • Android
  • 服务器
  • 个人日记
  • Java
  • Andriod
  • 算法
  • Gaker
  • 转载
  • 技术博客

JackRyannn © 2015

Follow me
  • Github