Android consumePurchase(3,packageName,purchaseToken)始终返回结果\u DEVELOPER\u ERROR=5-提供给API的参数无效

Android consumePurchase(3,packageName,purchaseToken)始终返回结果\u DEVELOPER\u ERROR=5-提供给API的参数无效,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,当我尝试使用购买的产品时,我总是得到“RESULT\u DEVELOPER\u ERROR=5-提供给API的参数无效” String purchaseToken = "inapp:" + getPackageName() + ":" + productId; int response = 0; try { response = mService.consumePurchase(3, getPackageName(), purchaseToken); } catch (RemoteExc

当我尝试使用购买的产品时,我总是得到“RESULT\u DEVELOPER\u 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();
}
因此,我只能购买一次。但是,我需要能够更频繁地进行购买。我已经尝试解决这个问题两天了,没有成功/

使用SKU“android.test.purchased”进行购买和消费工作完全正常,但是只要我使用生产密钥导出.apk并添加一个活动SKU,购买只显示一次,然后再也不会显示

这里有更多的细节

  • play store中的.apk版本代码与我在手机上使用的导出的.apk版本代码相同,并且使用相同的密钥库签名
  • 我在托管产品和非托管产品中都尝试过,但这不重要,因为托管产品和非托管产品都被视为托管产品,必须同时使用
  • 我只有5个SKU项目,所以它没有达到20个的限制,这就是问题所在

  • 采购代币与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);
    }
    
    //注意空值是continueToken,您可能无法获得所有购买的物品
    //在一个调用中,检查ownedItems.getString(“INAPP\u CONTINUATION\u TOKEN”)中的
    //下一次继续通话,直到你没有代币为止
    Bundle-ownedItems=service.getPurchases(3,getPackageName(),“inapp”,null);
    //检查响应
    int responseCode=ownedItems.getInt(“响应代码”);
    如果(响应代码!=0){
    抛出新异常(“错误”);
    }
    //获取已购买项目的列表
    ArrayList purchaseDataList=
    ownedItems.getStringArrayList(“INAPP\u采购数据列表”);
    for(字符串purchaseData:purchaseDataList){
    JSONObject o=新的JSONObject(purchaseData);
    字符串purchaseToken=o.optString(“token”,o.optString(“purchaseToken”);
    //使用purchaseToken,处理任何错误
    mService.consumePurchase(3,getPackageName(),purchaseToken);
    }
    
    我刚刚发现,如果您在getSkuDetails的ITEM\u ID\u列表中添加了20多个项目,那么它也将返回结果\u DEVELOPER\u错误。

    您可以将代码发布到获取purchaseToken的位置吗?当然,我刚才为您在上面进行了编辑。productId是一个字符串,如果有帮助的话。我解决了这个问题,只是看一下就是它。谢谢你@哦,老兄,非常感谢!