2016-07-28 50 views
0

我正在關注一個教程來編寫應用內結算項目,並且我設法使所有的都很好,但是當我想知道用戶是否購買了一個項目時,它總是虛假的,甚至當我測試它與其他設備有beta測試者帳戶。Android應用內結算購買的項目

這是我用什麼來獲得該項目購買:

mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey); 

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) { 
      IabHelper.QueryInventoryFinishedListener mGotInventoryListener 
        = new IabHelper.QueryInventoryFinishedListener() { 
       public void onQueryInventoryFinished(IabResult result, 
                Inventory inventory) { 

        if (result.isFailure()) { 
         // handle error here 
        } 
        else { 
         // does the user have the premium upgrade? 
         boolean mIsPremium = inventory.hasPurchase(ITEM_SKU); 
         // update UI accordingly 
         Toast.makeText(getApplicationContext(), "" + mIsPremium, Toast.LENGTH_LONG).show(); 
         if(mIsPremium){ 
          buy.setVisibility(View.INVISIBLE); 
         } 
        } 
       } 
      }; 
      mHelper.queryInventoryAsync(mGotInventoryListener); 
     } 
    }); 

而這是購買該項目的代碼:當我測試的應用程序在真實設備

buy.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001, 
        new IabHelper.OnIabPurchaseFinishedListener() { 
         public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
          if (result.isFailure()) { 
           return; 
          } else if (purchase.getSku().equals(ITEM_SKU)) { 
           mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() { 
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
             if (result.isFailure()) { 
             } else { 
              mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
                new IabHelper.OnConsumeFinishedListener() { 
                 public void onConsumeFinished(Purchase purchase, IabResult result) { 
                  if (result.isSuccess()) { 
                   buy.setVisibility(View.GONE); 
                  } else { 
                  } 
                 } 
                }); 
             } 
            } 
           }); 
          } 
         } 
        }, "mypurchasetoken"); 
     } 
    }); 

在我的測試版測試人員帳戶中,代碼在購買商品時工作正常,但是當我關閉應用並再次打開時,第一個代碼是帳戶沒有購買該商品。

回答

0

玉傢伙,從來就解決了這個問題,它是下面的教程一個錯誤,但我絕不會解決這個問題,而不閱讀耗材/非消耗品。我的項目是一次性購買,所以沒有必要有:

mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
               new IabHelper.OnConsumeFinishedListener() { 
                public void onConsumeFinished(Purchase purchase, IabResult result) { 
                 if (result.isSuccess()) { 
                  buy.setVisibility(View.GONE); 
                 } else { 
                 } 
                } 
               }); 

在代碼的第二部分,我所要做的就是刪除和sudenly一切OK,這樣一來,該代碼的第二部分將是:

buy.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001, 
        new IabHelper.OnIabPurchaseFinishedListener() { 
         public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
          if (result.isFailure()) { 
           return; 
          } else if (purchase.getSku().equals(ITEM_SKU)) { 
           mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() { 
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
             if (!result.isFailure()) { 
              buy.setVisibility(View.GONE); 
             } 
            } 
           }); 
          } 
         } 
        }, "mypurchasetoken"); 
     } 
    }); 

希望這將有助於未來的人,並感謝你!

0

您可能在購買退貨後使用該產品。

看到這裏大約可消耗/非消耗性產品: https://developer.android.com/google/play/billing/api.html#consumetypes

+0

儘管這可能是答案,但是這不是一個請求額外信息的評論?你正在回答一個問題。 – Bonatti

+0

我可以修改爲「您可能正在使用這些產品......」,那會更好嗎? – marmor

+0

我相信這樣。基本上,檢查這個答案的另一個用戶可以看到他們可能遇到的「最可能」類型的問題。消耗品不會顯示爲代碼錯誤,但會顯示相同的行爲。 – Bonatti