2016-02-11 106 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