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