В биллинге приложения: нельзя ли отменить покупку? - PullRequest
0 голосов
/ 21 июня 2019

Я внедрил Android в биллинг приложения, загрузил его в консоль разработчика для альфа-тестов, создал элемент (одноразовый продукт для премиум-версии) и протестировал на моем устройстве. Все работало, но я хотел протестировать второй раз с тем же устройством - нельзя ли отменить покупку?

Что я пробовал:

  • Я отменил купленный предмет в консоли разработчика -> на моем устройстве ничего не произошло, BillingClient.getPurchaseList все равно вернул мою премиальную покупку
  • Я очистил кеш с помощью рекламной команды "adb shell pm clear com.android.vending" -> и теперь становится странно:

Во-первых, я подумал, что это работает, и BillingClient.queryPurchases (). GetPurchaseList не вернул ни одной покупки, и поведение моего приложения изменилось правильно на базовую версию. Но если я попытаюсь купить предмет еще раз, чтобы снова проверить поток покупок, он говорит: «Товар уже принадлежит». Нет ли возможности протестировать его снова?

Еще одна странная вещь, которую я абсолютно не понимаю: я ничего не делал, снова открыл свое приложение через несколько часов, и оно снова помечается как премиум. Что это значит? Есть проблема в тестовом аккаунте или это может произойти в реальных (отмененных) покупках ??

Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 21 июня 2019

Если вы хотите разрешить покупку предмета несколько раз (то есть в игровой валюте), вы должны использовать его перед повторной покупкой, в противном случае библиотека IAB вернет ошибку "Item already owned".

Для сброса покупки вы можете использовать BillingClient#consumeAsync(String purchaseToken).

. Чтобы получить purchaseToken покупки, используйте BillingClient#queryPurchaseHistoryAsync, это вернет список текущих покупок.

Если вы хотитечтобы использовать все покупки для отладки, вы можете просто использовать следующий код:

client.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP, new PurchaseHistoryResponseListener() {
                    @Override
                    public void onPurchaseHistoryResponse(int responseCode, List<Purchase> purchasesList) {
                        if (purchasesList != null && !purchasesList.isEmpty()) {
                            for (Purchase purchase : purchasesList) {
                                client.consumeAsync(purchase.getPurchaseToken(), new ConsumeResponseListener() {
                                    @Override
                                    public void onConsumeResponse(int responseCode, String purchaseToken) {
                                        if (responseCode == BillingResponse.OK) {
                                          //Item consumed, you may repurchase it now
                                        } else {
                                            // Error, item not consumed. See responseCode for more info
                                        }
                                    }
                                });
                            }
                        }
                    }
                });

Попытка очистить кеш не решит проблему, потому что как только библиотека IAP повторно синхронизируется с GPlay, она запомнитпокупки, связанные с учетной записью текущего пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...