2016-02-11 83 views
0

我已在應用帳單https://github.com/blundell/SimpleInAppPurchaseV3中實施此項目。除了並非所有購買的產品正在爲Inventory對象返回外,一切看起來都起作用。購買庫存收集不顯示所有已購買的產品,Google Play應用內結算

我開始與多個產品ID的具有相同的前綴,使用java包格式

acmestudio.myapp.upgrade1.red 
acmestudio.myapp.upgrade1.blue 
acmestudio.myapp.upgrade1.green 

這是問題開始的地方。我購買的第一個,acmestudio.myapp.upgrade1.red工作並顯示在庫存購買的項目。

但是,後..購買其他的會:

  • 一)獲得成功處理,
  • B),但沒有得到在購買productIds列表隨後返回

我想也許這是一個格式問題,所以我將點符號更改爲下劃線。然而,同樣的事情發生了。現在我有這些編號的多個產品

acmestudio_myapp_upgrade1_red 
acmestudio_myapp_upgrade1_blue 
acmestudio_myapp_upgrade1_green 

而且,它只能用於第一個。所以,現在在我購買的SKU列表,它具有: [acmestudio.myapp.upgrade1.red,acmestudio_myapp_upgrade1_blue]

而且出現這種情況,即使我看到從結算API返回此訂單確認

PurchaseInfo:{"orderId":"GPA.1390-8158-3067-22151","packageName":"com.acmestudio.myapp」, 
」productId":"acmestudio_myapp_upgrade1_red」,」purchaseTime":1455140848461,"purchaseState":0, 
"purchaseToken":"akdnfgpkcnckkcdomomimihi.AO-J1OwKCGfAKHDDsBxbKjeVKRZ0hIOSXALhVPeYaKx2GsVGH6NbVDs4nj6sLf48oUy9Zs0MziVA7xFtebELB0Q6udcN_1fvaNynkFLVVJXJmZGeEiRy9c8KH7HIn2QK2SZc1EzB2NLtOoVu324s2EwPmmtLYKj6MA"} 

我想我必須缺少一些步驟,因爲我設置了調試器在這裏停止..在IabHelper.java的github項目代碼中。也就是說,這個問題發生在代碼中,我甚至沒有感動。 https://github.com/blundell/SimpleInAppPurchaseV3/blob/master/src/com/android/vending/billing/util/IabHelper.java#L814

ArrayList<String> ownedSkus = ownedItems.getStringArrayList(
        RESPONSE_INAPP_ITEM_LIST); 

這是我運行檢查代碼。通知我得到一個清單對象的2個實例:

    1. 在主線程
  • 在非同步呼叫

    List<String> moreSkus = null; 
    Inventory inventory = billingHelper.queryInventory(querySkuDetails, moreSkus); 
    
    IabHelper.QueryInventoryFinishedListener inventoryLstnr = 
        new IabHelper.QueryInventoryFinishedListener() { 
    
         @Override 
         public void onQueryInventoryFinished(IabResult result, Inventory inv) 
         { 
          Log.d("Query inventory finished."); 
    
          // Is it a failure? 
          if (result.isFailure()) { 
            Log.d("Failed to query inventory: " + result); 
           return; 
          } 
    
          Log.d("Query inventory was successful."); 
    
         } 
    
    }; 
    
    billingHelper.queryInventoryAsync(true, inventoryLstnr); 
    

我在這裏錯過了什麼? ..也許我需要獨特的前綴?!接下來我會嘗試一下,但似乎不應該出現這樣的問題。

回答

0

好的,感謝SO發佈此問題時的建議,看起來問題與billingHelper.consumeAsync(..)調用有關。

通過評論說明,我正在購買的產品ID出現在inventory.mPurchaseMap中。

這個帖子我終於偶然解釋它完美: https://stackoverflow.com/a/25452735/2162226

當筆者提出很好:

這是工作的打算 - 在你的代碼,你正在消耗 IN-應用程序立即購買,這意味着你可以再次購買它 ..

沒有什麼說你不能購買上午不止一次提供產品 。你不能做的是購買一個託管 產品,之前購買相同的管理項目已被 消耗。

這篇文章是如此的建議,我看見了,讓我朝着正確的方向: https://stackoverflow.com/a/18808407/2162226