2013-07-30 51 views
0

我正在Android應用程序中實施應用程序內購買。我在Google Play開發者控制檯中設置了該應用並設置了多個產品。Android IabHelper.queryInventoryAsync方法返回不正確的產品信息

我將IabHelper和相關的計費文件添加到每個Android文檔的代碼庫中。我能夠成功setup

 String base64EncodedPublicKey = Configurations.getInstance().getGooglePlayLicenseKey(); 
     googlePlayHelper = new IabHelper(AtavistApplication.getContext(), base64EncodedPublicKey); 
     googlePlayHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
      public void onIabSetupFinished(IabResult result) { 
       if (!result.isSuccess()) { 
        Utilities.log("Unable to setup billing: " + result); 
        isBillingSetup = false; 
       } else { 
        Utilities.log("Billing setup successfully"); 
        isBillingSetup = true; 
       } 
      } 
     }); 

但是,當我查詢谷歌Play下架的產品信息,像這樣:

IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { 
     public void onQueryInventoryFinished(IabResult result, Inventory inventory) 
     { 
      if (result.isFailure()) { 
       Utilities.log("getProducts failed"); 
       callback.failure(null); 
      } else { 
       Utilities.log("getProducts succeeded"); 
       callback.success(inventory); 
      } 
     } 
    }; 

    googlePlayHelper.queryInventoryAsync(true, identifiers, mQueryFinishedListener); 

哪裏identifiers是字符串產品標識的列表:

ArrayList<String> productIDs = new ArrayList<String>(); 
    productIDs.add("com.first.product"); 
    productIDs.add("com.second.product"); 
    productIDs.add("com.third.product"); 

我收到了一個成功的回覆,其中只包含一個不是我的Google Play帳戶中設置的產品的產品。其productID是我們之前提供的產品的產品ID,但它剛剛從Google Play的有效產品列表中刪除。

問題:

  1. 爲什麼queryInventoryAsync沒有返回正確的名單?
  2. 爲什麼它會返回目前尚未在Google Play中設置的產品?
  3. 我是否錯過了導致這種混淆的一些基本配置步驟?

回答

0

事實證明,我已經上傳到Google Play開發者控制檯(設置產品之前)和我正在構建和測試的代碼庫/ apk之間有一些不一致。

具體來說,包標識符(包名稱)是不同的,並且它們使用不同的密鑰庫進行簽名。

不知道爲什麼這會返回一個看似有效的產品而不是明確的錯誤,但將這兩個apks解決了問題。

相關問題