In-App Billing v3 - Не обнаруживайте возврат
Я следил за обучением "In-App Billing v3" Google. Я получаю покупку предмета, но у меня проблема.
https://developer.android.com/training/in-app-billing/index.html
Я отменил и возвратил покупку, но приложение обнаружило покупку как правдивую. Я не могу продолжить тестирование своего приложения, потому что всегда обнаруживаю, что приобрел этот элемент.
Единственная ошибка, которую я обнаружил в logCat, следующая:
[3687] InAppBillingService.logResponseBundle: Bundle не содержит код ответа
Появляется после запуска mHelper.queryInventoryAsync(mGotInventoryListener).
Любая идея?
Ответы
Ответ 1
p.s. - это говорит о том, что требуется простое время для обновления средств.
http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges
Но я не уверен - я понимаю, что они кэшируют данные о покупке на устройстве, но 24h - это долгое время...
Обновлено, добавив, что более 24 часов после того, как я отменил транзакции "тест", эти учетные записи по-прежнему лицензируются.
Обновлено снова - через 36 часов приложение было лицензировано STILL. Я удалил и переустановил, и он был лицензирован STILL.
Обновлено AGAIN! - я factory - reset устройство, вошедшее в систему, установило приложение, и оно было нелицензировано...
И еще одно обновление - ответ от Google предполагает, что возврат средств обрабатывается "автоматически", но может потребовать "до 72 часов" для обновления на устройстве - нет другого пути для обнаружения возврата, поэтому игроки получают до 3 дней "бесплатно", если они вернут - erm, ОК, это приложение In-App, а не App, но все же это кажется чрезмерным BIT?
Ответ 2
То, как я работаю, это блок кода, который игнорирует конкретные покупки, которые я сделал. У меня есть оператор журнала в коде, который распечатывает информацию о покупке, а затем я жестко задаю список в приложении PurchaseTimes для игнорирования. Это беспорядок, и я должен перекомпилировать каждый раз, когда хочу протестировать, но пока не нашел лучшего способа.
Ответ 3
После того, как вы ждали около 12 часов и попробовали все, что предлагалось здесь, и на аналогичных потоках, я все еще сталкивался с той же проблемой. Для меня это была следующая команда adb:
adb shell pm clear com.android.vending
Ответ 4
Вы можете легко отменить покупку для целей тестирования, потребляя этот элемент.
Используя пример Trivial Drive, я добавил следующий код в MainActivity.java, который будет "потреблять" премиальное обновление при запуске приложения:
// Do we have the premium upgrade?
Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM);
mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase));
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
// dss added for test: Consume the premium upgrade for test purposes.
boolean testConsume = true;
if (mIsPremium && testConsume) {
Log.d(TAG, "NOT FOR PRODUCTION: We have a premium upgrade. Consuming it.");
mHelper.consumeAsync(inventory.getPurchase(SKU_PREMIUM), mConsumeFinishedListener);
mIsPremium = false;
} //dss end add
В качестве бонуса вы получаете свободный кварцевый газ, когда вы потребляете обновление только потому, что образец рассматривает все потребление как бензин в другом месте. Найдите MainActivity для "Provisioning", чтобы найти где.