主要是对google play官方demo的讲解

1.仿照demo搭建一个新的内部付费应用

  1. 创建一个新的android项目,创建一个新包 包名 com.android.vending.billing

  2. IInAppBillingService.aidl拷贝到新包里

新项目代码

AndroidManifest.xml

添加付费权限:<uses-permissionandroid:name="com.android.vending.BILLING"/>

activity_main.xml

onBuyGasButtonClicked:按钮调用的方法、buy_gas图片名 .png

<ImageView

android:src="@drawable/buy_gas"

android:onClick="onBuyGasButtonClicked"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginBottom="20dp"/>

public class MainActivity extends Activity {    IabHelper mHelper;    //应用付费产品的id    static final String SKU_GAS = "android.test.purchased";    static final String SKU_INFINITE_GAS = "infinite_gas";    static final String SKU_PREMIUM = "premium";    static final int RC_REQUEST = 10001;    boolean mIsPremium = false;    boolean mSubscribedToInfiniteGas = false;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //应用key        String base64EncodedPublicKey = "";        mHelper = new IabHelper(this, base64EncodedPublicKey);        mHelper.enableDebugLogging(true);        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {            public void onIabSetupFinished(IabResult result) {                System.out.println("                      onIabSetupFinished");                if (!result.isSuccess()) {                    System.out                            .println("                      Problem setting up in-app billing: "                                    + result);                    return;                }                mHelper.queryInventoryAsync(mGotInventoryListener);// Inventory存货            }        });                                           }                      IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {        public void onQueryInventoryFinished(IabResult result,                Inventory inventory) {            System.out                    .println("                        onQueryInventoryFinished");            if (result.isFailure()) {                System.out.println("Failed to query inventory: " + result);                return;            }            Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM);            mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase));            Purchase infiniteGasPurchase = inventory                    .getPurchase(SKU_INFINITE_GAS);            mSubscribedToInfiniteGas = (infiniteGasPurchase != null && verifyDeveloperPayload(infiniteGasPurchase));            Purchase gasPurchase = inventory.getPurchase(SKU_GAS);            if (gasPurchase != null && verifyDeveloperPayload(gasPurchase)) {                mHelper.consumeAsync(inventory.getPurchase(SKU_GAS),                        mConsumeFinishedListener);                return;            }        }    };                               IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {        public void onConsumeFinished(Purchase purchase, IabResult result) {            System.out.println("                        onConsumeFinished");            if (result.isSuccess()) {            } else {                System.out                        .println("        successful                onConsumeFinished");            }        }    };                               IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {            System.out                    .println("                        onIabPurchaseFinished  "                            + result + " purchase " + purchase);            if (result.isFailure()) {// 失败了                System.out.println("   失败了 ");                return;            }            if (!verifyDeveloperPayload(purchase)) {                return;            }            // 判断不同付费:涨一格油、换车、一段时间免费            if (purchase.getSku().equals(SKU_GAS)) {                mHelper.consumeAsync(purchase, mConsumeFinishedListener);            } else if (purchase.getSku().equals(SKU_PREMIUM)) {                mIsPremium = true;            } else if (purchase.getSku().equals(SKU_INFINITE_GAS)) {                mSubscribedToInfiniteGas = true;            }        }    };             //按钮    public void onBuyGasButtonClicked(View arg0) {        System.out.println("                      onBuyGasButtonClicked");                     String payload = "";        mHelper.launchPurchaseFlow(this, SKU_GAS, RC_REQUEST,                mPurchaseFinishedListener, payload);                     while(true){}    }                      //不写这个第二次请求时会崩溃,处理请求后的事件    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        System.out.println("                        onActivityResult: "                + requestCode + "  " + resultCode + "  data " + data);        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {            super.onActivityResult(requestCode, resultCode, data);        } else {        }    }                      boolean verifyDeveloperPayload(Purchase p) {// verify:核查        String payload = p.getDeveloperPayload();        System.out.println("                        verifyDeveloperPayload");        return true;    }    @Override    public void onDestroy() {        super.onDestroy();        if (mHelper != null)            mHelper.dispose();        mHelper = null;    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}