主要是对google play官方demo的讲解
1.仿照demo搭建一个新的内部付费应用
创建一个新的android项目,创建一个新包 包名 com.android.vending.billing
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; }}