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

标签 android in-app-purchase in-app-billing

当我尝试使用

进行购买时,我总是收到“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”进行购买和消费完全正常,但是一旦我使用生产 key 导出 .apk 并添加实时 SKU,购买只会显示一次,然后再也不会显示。

这里有更多的细节

  1. Play 商店中的 .apk 版本代码和我在手机上使用的导出的 .apk 是相同的,并且使用相同的 keystore 签名
  2. 我已经对托管和非托管产品进行了尝试,但这无关紧要,因为 according to the latest in-app billing documentation , 托管和非托管被视为托管产品,都必须消费
  3. 我只有 5 个 SKU 项目,所以没有达到 20 个的限制,这就是问题所在 here

最佳答案

购买 token 不同于 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);
}

关于android - mService.consumePurchase(3, packageName, purchaseToken) 总是返回 RESULT_DEVELOPER_ERROR = 5 - 提供给 API 的参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758242/

相关文章:

ios - 检测用户是否在 iTunes 商店中登录

android - 我为 Android In App Billing 的安全性付出了多少努力?

Android ImageView 的可绘制色调不起作用

iOS 通过应用内购买添加大量产品

android - 如何自定义 Card.io 扫描器 UI?

Android 电子市场应用内结算 IN_APP_NOTIFY 响应

android - 如何解决 getBuyIntent 上的 PurchaseError{type=3 subtype=0}

android - 添加应用内计费库时出错

android - 使用 ReverseLayout recyclerview 将项目添加到 Endless Scroll RecyclerView

android - Espresso - 为什么 Espresso 发现这个匹配项不明确?