Покупайте один и тот же товар снова и снова, не потребляя его - покупка в приложении для Android

Я сохранил вкладку пожертвований и хочу, чтобы пользователи покупали предметы снова и снова. Я внедрил код, но он позволяет пользователю покупать определенный товар только один раз. Я использовал управляемые продукты в игровой консоли для продуктов.

 btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
           if(billingClient.isReady()){
             SkuDetailsParams params=SkuDetailsParams.newBuilder()
             .setSkusList(Arrays.asList("purchase_aaa","purchase_bbb","purchase_ccc","purchase_ddd"))
             .setType(BillingClient.SkuType.INAPP).build();

 billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() {
         @Override
          public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
           if(responseCode==BillingClient.BillingResponse.OK)
        {
              loadProductToRecyclerView(skuDetailsList);
                  }
             else{
               Toast.makeText(Donate.this, "Cannot query product", Toast.LENGTH_SHORT).show();
                  }
                  }
                });
                }
                else
        {
                Toast.makeText(Donate.this, "Not ready", Toast.LENGTH_SHORT).show();
                }
            }
        });

  @Override
    public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
        if(purchases!=null){
        Toast.makeText(this, "Purchased"+purchases.size(), Toast.LENGTH_SHORT).show();
    }
    }

person heisenberg3008    schedule 27.04.2020    source источник


Ответы (1)


Это задумано и не может быть изменено, продукты, управляемые в приложении, можно приобрести только один раз.

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

Если это игра, в которой, например, пользователь потребляет предметы, то, когда у него их больше нет, вы потребляете продукт в приложении, чтобы он мог купить его снова.

Или вы также можете потреблять продукт сразу после покупки и отслеживать, сколько он купил через ваши собственные средства, собственный сервер или, возможно, через firebase, но это уже означает, что вам придется внедрить систему аутентификации пользователя для вашего приложения. .

Использовать покупку:

ConsumeResponseListener consumeListener = new ConsumeResponseListener() {
            @Override
            public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {

            }
        };
 String token = purchase.getPurchaseToken();
            ConsumeParams consumeParams = ConsumeParams.newBuilder().setPurchaseToken(token).build();
            billingClient.consumeAsync(consumeParams, consumeListener);
person Lluis Felisart    schedule 27.04.2020
comment
Я наткнулся на несколько ответов в стеке, в которых был написан какой-то метод для потребления элемента, но я не мог его понять. Вот ссылка на него. stackoverflow.com/questions/37045189/ Не могли бы вы проверить это? @Луис Фелисарт - person heisenberg3008; 27.04.2020
comment
Эта ссылка использует устаревшую службу выставления счетов AIDL, новые проекты должны использовать библиотеку выставления счетов. Я отредактировал свой ответ, указав код для покупки. - person Lluis Felisart; 27.04.2020
comment
Я использовал новую версию, но у меня были некоторые проблемы, и я вернулся к старой версии, в которой вместо BillingResult Billingresult используется int responseCode. Я пробовал ваш код, но получаю ошибки после токена String и т.д. - person heisenberg3008; 27.04.2020
comment
Не могли бы вы добавить ответ, совместимый с моей версией? @Луис Фелисарт - person heisenberg3008; 27.04.2020
comment
В вашем коде используется биллинговая библиотека, такая же, как и в моем коде потребления. - person Lluis Felisart; 27.04.2020
comment
Пожалуйста, проверьте правки. Я загрузил изображение @Lluis Felisart - person heisenberg3008; 27.04.2020
comment
покупка — это переменная, содержащая объект «Покупка», который вы хотите использовать. Но похоже, что в вашем коде еще нет той части, которая совершает покупки. Извините, но больше ничем не могу помочь, я не буду писать код за вас. Это основная ссылка developer.android.com/google/play/billing/ - person Lluis Felisart; 27.04.2020