2014-07-18 31 views
8

我在應用中定義了一些應用產品。我已將APK上傳到Google Play,並在Google play上添加了inapp購買產品。Android inapp計費responseList爲空

我有我的ServiceConnection定義如下:

ServiceConnection mServiceConn = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mService = null; 
     } 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      mService = IInAppBillingService.Stub.asInterface(service); 
      connect(); 
     } 
    }; 

onServiceConnected函數被調用時,bindService返回true。

接下來是connect函數。

public void connect() { 
     new Thread(new Runnable() { 
      public void run() { 
       try { 

        // Purchase type is "inapp", as required by API v3 
        Bundle skuDetails = mService.getSkuDetails(3, PACKET, "inapp", querySkus); 

        } 

        int response = skuDetails.getInt("RESPONSE_CODE"); 

        Log.e("IAP connect", response + ""); 


        if (response == 0) { 
         ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST"); 
         Log.e("size list", responseList.size()+""); 
         ... 
         } 
        } 
      } catch (RemoteException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

此處的數據包設置爲getPackageName()。 響應代碼爲0,但Log記錄了列表大小爲0.我不知道爲什麼列表是空的,因爲我已向Google Play輸入了總共5個項目,並且每個項目都處於活動狀態。我已經等了2天,並用三種設備進行測試,但仍沒有任何項目能夠通過。

我幾乎想盡辦法想,所以有任何建議都是值得歡迎的。

回答

15

您需要將發佈您的應用程序轉換爲Beta/Alpha以訪問inapp計費功能。 它recenty改變,但他們並沒有公佈它:)

http://developer.android.com/google/play/billing/billing_testing.html#draft_apps

值得一提的是,你不必每次上傳新的版本,以便能夠對其進行測試。只需使用相同的versionCode和versionName,並且如果應用程序已發佈,它就可以工作。

+0

這很奇怪。在另一個運行幾乎完全相同的代碼的項目中,最顯着的還是運行版本3,它使用非託管產品很好。 – Gooey

+0

它的確如此:「如果您使用應用內結算v3而非應用內結算v2,則非託管產品的行爲會有所不同。如果您使用應用內結算v3,則非託管產品會被視爲託管產品,並且需要明確使用。瞭解更多信息「但是,我還沒有購買任何東西,而且我運行了一個消耗購買量的(冗餘)循環。 – Gooey

+0

那麼,也許你是對的。那麼我唯一的想法是你的應用程序沒有發佈。您是否已將其發佈到(Beta/Alpha)或者是否在草稿中? – kupsef

11

您的代碼看起來沒問題。

確保您查詢了正確的SKU。 querySkus中的單個項目必須完全匹配應用內產品的ID。

其次請確保查詢正確的類型,如果項目。如果您將「應用產品」配置爲在開發者控制檯中購買的汽車,請使用「inapp」。如果您有訂閱,請使用「subs」作爲針對Google Play的查詢類型。

希望這會有所幫助。

+0

是的,我在querySkus列表和Google Play中都檢查了sku的ID。它們是不受管理的產品,並且全都顯示爲活動狀態。 – Gooey

+0

你節省了我的一天。 Magister Halderian。萬分感謝。 –

+1

我無法贊成這一百倍,但我會!關於「subs」vs「inapp」的一點感謝! – Arcantos