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. Код версии.apk в магазине воспроизведения и экспортированный.apk, который я использую на своем телефоне, одинаковы и подписаны тем же хранилищем ключей
  2. Я пробовал это как для управляемых, так и для неуправляемых продуктов, однако это не должно иметь значения, поскольку в соответствии с последней документацией по выставлению счетов в приложении управляемые и неуправляемые рассматриваются как управляемые продукты, и оба должны потребляться.
  3. У меня есть только 5 предметов SKU, поэтому он не превысил 20, что было проблемой здесь

2 ответа

Решение

Токен покупки отличается от самого 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);
}

Я только что обнаружил, что если вы добавите более 20 элементов в ITEM_ID_LIST для getSkuDetails, то он также вернет RESULT_DEVELOPER_ERROR.

Другие вопросы по тегам