Как отменить покупку в приложении на Android?
До 20 июня 2016 года я смог отменить пробные покупки, выполненные в моем приложении.
Выполнение нескольких покупок в приложении (не потребляемых) из одной и той же тестовой учетной записи упростило разработку и тестирование кода без чрезмерного шума.
После 20 июня 2016 года покупки не показывались на моем торговом счете и
я не смог сделать больше одной покупки из своей тестовой учетной записи. Все, что я получил, это сообщение: "У вас уже есть этот элемент".
Я зарегистрировал запрос в группу поддержки разработчиков Google, и ответ был:
Начиная с 20 июня 2016 года мы изменили тестовые покупки для одноразовых покупок в приложении (IAP).
Ранее тестовые покупки для одноразовых IAP генерировали идентификаторы заказов. Начиная с 20 июня 2016 года одноразовые IAP не генерируют официальные идентификаторы заказов (если вообще) и не будут отображаться в Merchant Center. Такое поведение уже применяется к IAP подписки.
Вы можете узнать больше о тестировании биллинга в приложении в Справочном центре Android Developers: https://developer.android.com/google/play/billing/billing_testing.html#testing-purchases
allright.. поэтому я перехожу к упомянутой ссылке и там раздел:
Отмена завершенных тестовых покупок
который гласит:
Google Play накапливает завершенные тестовые покупки для каждого пользователя, но не передает их для финансовой обработки.
В некоторых случаях вы можете вручную отменить пробную покупку для продолжения тестирования. Для этого откройте страницу приложения в Play Маркете. Если тестовая покупка, которую вы хотите отменить, является подпиской, вы также можете использовать метод cancel() API Buy Purchases.subscriptions.
Важно: методы refund() и revoke() API Buy Purchases.subscriptions не поддерживают тестовые покупки.
Итак, я перехожу на страницу приложения в игровом магазине... и что конкретно? на веб-странице не указано, что я должен делать там. кто-нибудь знает?
он говорит: вы также можете использовать метод cancel() API-интерфейсов Buyases.subscriptions.
который указывает, что использование метода cancel() не является единственным методом.
Как решить это без добавления дополнительного кода в мое приложение?
Ответы
Ответ 1
Все управляемые продукты in-app расходуются.
как указано в docs.
Это означает, что вы можете использовать принадлежащий вам товар вместо того, чтобы отменить покупку и купить ее снова и снова.
Я предлагаю запросить инвентаризацию во время запуска приложения:
mIabHelper.queryInventoryAsync(this);
Затем вы можете использовать принадлежащий ему товар в обратном вызове:
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Purchase purchase = inventory.getPurchase(MY_SKU);
boolean isBought = (purchase != null && verifyDeveloperPayload(purchase));
if (isBought) {
mIabHelper.consumeAsync(purchase, new OnConsumeFinishedListener() {
@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
//Clear the purchase info from persistent storage
}
});
}
}
Это нормально для тестирования потока IAB, но обязательно удалите этот код из версии выпуска.
Ответ 2
Я нашел решение, которое не очень удобно, но работает. Похоже, вы можете потреблять непривлекательные продукты, и таким образом вы можете их снова купить. Я работаю с телефонной связью, поэтому у меня есть только пример кода для плагина-плагина-плагина:
store.when("your.product.id").updated(product => {
if(product.owned) {
var transaction = product.transaction;
product.transaction = null;
store.inappbilling.consumePurchase(
function() { // success
alert("consume success");
},
function(err, code) { // error
alert("consume error " + err)
},
product.id,
transaction.id
);
}
});
Обновленный обратный вызов вызывается, когда вы вызываете store.refresh()
или покупаете продукт. Поэтому, в зависимости от вашего варианта использования, вы захотите реализовать дополнительный метод проверки, когда следует использовать продукт.
У меня нет опыта работы с собственными приложениями для Android-приложений, но, очевидно, вы также сможете использовать там продукты.
Изменить: Извините, я просто прочитал, что вы не хотели включать дополнительный код в свой проект. Я не думаю, что это возможно в настоящий момент, но хотелось бы оставить здесь свой ответ, потому что это может помочь другим людям, пытающимся протестировать платежи в приложениях.
Ответ 3
Я зашел на главную страницу консоли Google Play и нажал на Управление заказами. В соответствии с этим я смог выбрать все тестовые покупки и вернуть их. Я являюсь основным разработчиком приложения, поэтому у меня есть доступ. Если вы - тестер, вам, вероятно, придется обратиться в службу поддержки и попросить, чтобы они вернули ваш заказ.
Ответ 4
Не нашел решения для этого.
Мое обходное решение просто удаляет текущего пользователя теста из списка тестовых пользователей, совершает реальную покупку, а затем отменяет его с помощью консоли продавца.