在android機器上使用google內購
1、在開發人員控制台不可添加相同bundle id的應用、也就是com.android.game之類的、因為此bundle id是google play唯一識別應用程式區別的標識、如果邇硬要添加、也是可以的、不過google play只認最先添加的、包括內購項目、也是直接連去最先添加相同bundle id的那個應用、即使其它android應用使用了其它的keystore、但依舊改變不了會串連至相同bundle id的第一個應用的事實上、此事非常有可能在邇添加了內購項目卻始終顯示找不到該文檔的報錯、所以務必保證相同bundle id只上傳一個的原則
2、注意google play版本必需要在3.5以上、而且必需是非中國區的google play、目前測試通過的是美國區的google play、如果邇要在中國地區使用美國的商店、請開啟VPN串連至美國的伺服器、然後強制關閉google play、然後清空google play的緩衝重新開啟google play
3、當邇更新應用版本時、請保證相同的bundle id、比現版本更高的bundle version和version code
4、google官方的java樣本有一個重複購買的BUG、也就是點擊一次會出來兩個返回、一個一般是返回無此文檔、另一個就是正常返回、其實這裡的BUG引起的便是java主文件中關於按鈕響應的代碼有了錯誤、官方代碼判斷了兩次、一次判斷是不是內購類型、另一次判斷是不是訂閱類型、實際上訂閱類型並不加判斷的去執行、導致總是多出來一個無此文檔的錯誤、解決的方法就是為訂閱類型加上判斷
原BUG代碼:
if (mManagedType != Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) { showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID); } else if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) { // Note: mManagedType == Managed.SUBSCRIPTION showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID); }
修改後的代碼
if (mManagedType != Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) { showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID); } else if (mManagedType == Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) { // Note: mManagedType == Managed.SUBSCRIPTION showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID); }
狠明顯就是對else if 後面的條件判斷加多了一個mManagedType == Managed.SUBCRIPTION的判斷、如果不是訂閱類型就不再執行後面的代碼
相關文檔地址:http://stackoverflow.com/questions/10775008/in-app-billing-item-not-found