Подтвердить что ты не робот

Как отменить покупку в приложении на 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() не является единственным методом.

Как решить это без добавления дополнительного кода в мое приложение?

4b9b3361

Ответ 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

Не нашел решения для этого. Мое обходное решение просто удаляет текущего пользователя теста из списка тестовых пользователей, совершает реальную покупку, а затем отменяет его с помощью консоли продавца.