money3

主要是對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;
    }
}














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章