In-App Billing v3 - Не обнаруживать возврат
Я проследил за обучением Google In-App Billing v3. Я могу купить предмет, но у меня проблема.
https://developer.android.com/training/in-app-billing/index.html
Я отменил и возместил покупку, но приложение определило покупку как истинную. Я не могу продолжить тестирование своего приложения, потому что всегда обнаруживаю приобретенный товар.
Единственная ошибка, которую я нашел в logCat, заключается в следующем:
[3687] InAppBillingService.logResponseBundle: Bundle не содержит код ответа
Появляется после запуска mHelper.queryInventoryAsync(mGotInventoryListener).
Любая идея?
4 ответа
PS - это предполагает, что это займет время, чтобы возмещение было обновлено
http://code.google.com/p/marketbilling/issues/detail?id=88
Но я не уверен - я понимаю, что они кешируют данные о покупке на устройстве, но 24 часа это долго...
Обновлено, чтобы добавить, что через 24 часа после того, как я отменил "тестовые" транзакции, эти учетные записи все еще лицензированы!
Обновление снова - через 36 часов приложение ПО-прежнему было лицензировано. Я удалил и переустановил, и это было все еще по лицензии!!
Обновлен СНОВА! - Я сбросил настройки устройства, вошел в систему, установил приложение, и оно было нелицензионным...
И еще одно обновление - ответ от Google предполагает, что возвраты обрабатываются "автоматически", но для обновления на устройстве может потребоваться "до 72 часов" - другого способа определить возврат средств нет, поэтому игроки получают до 3 дней вещей ". бесплатно, если они возместят - ну, ладно, это In-App, а не покупка приложения, но все же, что кажется ЧИТАЛИМ чрезмерным?
Прождав около 12 часов и попробовав все предложенное здесь и в аналогичных темах, я все еще сталкивался с той же проблемой. Что меня подвело, так это команда adb:
adb shell pm очистить com.android.vending
Вы можете легко отменить покупку в целях тестирования, потребляя предмет.
Используя образец 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", чтобы найти, где.
Я работаю над этим с помощью блока кода, который игнорирует определенные покупки, которые я совершил. У меня есть лог-код в коде, который распечатывает информацию о покупке, затем я жестко кодирую список в своем приложении purchaseTimes, чтобы игнорировать. Это беспорядок, и мне приходится перекомпилировать каждый раз, когда я хочу проверить, но я еще не нашел лучшего способа.