2014-03-25 120 views
1

我就支持在應用程序內購買,並讓用戶在應用內購買做的大量的Android產品工作,從所有用戶的一些用戶正面臨着「BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED」錯誤和項目返回的響應是7。 我在每次購物獲得獎勵後打電話給消費者,並在開始申請時設置InApp時驗證我的庫存,並檢查是否有任何擁有物品並調用消耗品。 任何建議的解決問題。在應用計費誤差:已經擁有(BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED)

回答

0

我遇到了同樣的問題,任何機構都有解決方案? 唯一的方法是更改​​測試帳戶。

1

請參閱here。谷歌表示你必須使用管理的inapp項目。如果你不這樣做,用戶不能購買另一個。購買成功後,使用:

int response = mService.consumePurchase(3, getPackageName(), token); 

您在購買數據JSON對象獲得令牌:

final String token = jo.getString("purchaseToken"); 

但是如果你因爲某些原因沒有消耗購買,你被卡住。

我遇到了同樣的問題,因爲我升級到iap API v3和v2這不是問題。

當你得到這個錯誤時,嘗試消費給定productId的所有購買。或者只是消耗在安裝服務期間購買的所有東西。請注意,您可能希望在consumePurchase()成功返回後實際提供購買,具體取決於應用程序的語義。

呼叫服務後,下面的代碼連接(在onServiceConnected()),當然在後臺執行:

String continuationToken=""; 
boolean hasMorePurchases=false; 
do { 
    try { 
     Bundle purchases = mService.getPurchases(3, activity.getPackageName(), "inapp", continuationToken); 
     int response = purchases.getInt("RESPONSE_CODE"); 
     if (response == 0) { 
      continuationToken = purchases.getString("INAPP_CONTINUATION_TOKEN"); 
      if(!TextUtils.isEmpty(continuationToken)) hasMorePurchases=true; 
      final ArrayList<String> purchaseDataList = purchases.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); 
      for(String purchaseJSON : purchaseDataList) { 
       JSONObject object = new JSONObject(purchaseJSON); 
       String productId = object.getString("productId"); 
       String orderId = object.getString("orderId"); 
       String purchaseToken = object.getString("purchaseToken"); 
       Log.i(getClass().getSimpleName(),"consuming purchase of " + productId + ", orderId " + orderId); 
       mService.consumePurchase(3, activity.getPackageName(), purchaseToken); 
      } 
     } else { 
      Log.e(getClass().getSimpleName(), "could not get purchases: " + response); 
     } 
    } catch (RemoteException e) { 
     Log.e(getClass().getSimpleName(), "RemoteException during getPurchases:", e); 
    } catch (JSONException e) { 
     Log.e(getClass().getSimpleName(), "JSONException during getSkuDetails:", e); 
    } 
} while(hasMorePurchases); 

注意,每次調用getPurchases最大的700名購買返回,所以你需要使用連續令牌獲得更多。

你當然可以使用這個代碼,如果你得到ALREADY_OWNED錯誤代碼,並只爲所涉及的productId。之後,再次嘗試開始購買。

相關問題