mService.consumePurchase(3,packageName,purchaseToken)总是返回RESULT_DEVELOPER_ERROR = 5 – 提供给API的无效参数

我总是收到“RESULT_DEVELOPER_ERROR = 5 – 提供给API的无效参数”,当试图消费购买与

String purchaseToken = "inapp:" + getPackageName() + ":" + productId; int response = 0; try { response = mService.consumePurchase(3, getPackageName(), purchaseToken); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

出于这个原因,我总是只能做一次购买。 但是,我需要能够更频繁地进行购买。 我一直试图解决这个问题2天,现在没有成功。 :/

使用SKU“android.test.purchased”进行购买和生产是完全正常的,但是一旦我用生产密钥导出.apk文件并添加一个实时SKU,购买只出现一次,然后再也不会出现。

这里有更多的细节

  1. Play商店中.apk的版本代码和我在手机上使用的导出的.apk版本代码是相同的,并且使用相同的密钥库
  2. 我已经对托pipe和非托pipe产品进行了尝试,但是这并不重要,因为根据最新的应用内结算文档 ,托pipe和非托pipe产品被视为托pipe产品,并且都必须消费
  3. 我只有5个SKU物品,所以它没有达到20的限制,这是这里的问题

Solutions Collecting From Web of "mService.consumePurchase(3,packageName,purchaseToken)总是返回RESULT_DEVELOPER_ERROR = 5 – 提供给API的无效参数"

购买令牌与SKU本身不同,您应该通过以下代码检索purchaseToken

 // Note the null is the continueToken you may not get all of the purchased items // in one call - check ownedItems.getString("INAPP_CONTINUATION_TOKEN") for // the next continueToken and re-call with that until you don't get a token Bundle ownedItems = service.getPurchases(3, getPackageName(), "inapp", null); // Check response int responseCode = ownedItems.getInt("RESPONSE_CODE"); if (responseCode != 0) { throw new Exception("Error"); } // Get the list of purchased items ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); for (String purchaseData : purchaseDataList) { JSONObject o = new JSONObject(purchaseData); String purchaseToken = o.optString("token", o.optString("purchaseToken")); // Consume purchaseToken, handling any errors mService.consumePurchase(3, getPackageName(), purchaseToken); } 

我刚刚发现,如果您为getSkuDetails添加20多个项目到ITEM_ID_LIST,那么它也会返回RESULT_DEVELOPER_ERROR。