Google Play应用内结算:测试购买无效+无产品详情

时间:2014-09-11 15:26:36

标签: android in-app-billing google-play

我正在尝试将Googles In-App Billing添加到我的Android 4+应用中。我按照" Preparing Your In-app Billing Application"中所述设置了所有内容。现在我已将应用程序上传到Developer控制台的Alpha测试通道。

此外,我已设置了一个测试帐户(described here),以便能够在不触发真实付款的情况下购买商品。

在我的测试设备上从Play商店安装alpha版本(当然使用测试帐户)有两个问题:

  1. 不从Play商店中提取产品信息。因此,我无法显示任何价格信息等。

  2. 当我开始购买时,绝对没有任何暗示,这将是免费测试购买。一切看起来都像真正的购买。

  3. 这是我使用的代码:

    String publicKey = MyApp.getPublicKey(); // de-code and get the public key
    final IabHelper googlePlayHelper = new IabHelper(context, publicKey);
    
    Log.d("TAG", "IabHelber Init");
    
    googlePlayHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                Log.d("TAG", "IabHelber Init - Non Success: " + result);
            } else {
                Log.d("TAG", "IabHelber Init - SUCCESS");
                try {
                    googlePlayHelper.queryInventoryAsync(true, new IabHelper.QueryInventoryFinishedListener() {
                        public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
                            if (result.isFailure()) {
                                Log.d("TAG", "query Inventory - Non Success: " + result);
                            } else {
                                Log.d("TAG", "query Inventory - SUCCESS");
    
                                if (inventory.hasDetails(2my.product.id")) {
                                    Log.d("TAG", "NO DETAILS");
                                } else {
                                    Log.d("TAG", "Has Details");
                                }
                            }
                        }
                    }      
                } catch (Exception e) { 
                    Log.d("TAG", "EXCEPTION: " + e.getMessage());
                }
            }
        }
    });
    

    日志显示以下内容:

    D/TAG (25995): IabHelber Init
    D/TAG (25995): IabHelber Init - SUCCESS
    D/TAG (25995): query Inventory - SUCCESS
    D/TAG (25995): NO DETAILS
    

    现在提供详细信息的原因是什么? 在执行测试购买时应该有提示的文档。我为什么要跑一个真实的"购买而不是?

1 个答案:

答案 0 :(得分:1)

我无法找出为什么测试用户的购买不会作为测试购买处理。但是缺少产品细节的问题已经解决了:

我使用以下调用来查询库存:

googlePlayHelper.queryInventoryAsync(true, new IabHelper.QueryInventoryFinishedListener() { ... });

这是完全有效的代码,并且第一个参数(在此示例中为true)表明查询应该获取产品详细信息。但似乎这个参数在给出另一个参数之前没有任何影响:必须明确指定要获取的产品的ID:

List<String> productIDs = new ArrayList<String>();
productIDs.add(IAP_ID_1);
productIDs.add(IAP_ID_2);
productIDs.add(IAP_ID_3); 

googlePlayHelper.queryInventoryAsync(true, productIDs, new IabHelper.QueryInventoryFinishedListener() { ... });