Как подтвердить покупки в приложении в Android?

Я просмотрел библиотеку Play Billing Library https://developer.android.com/google/play/billing/billing_library_overview Вы должны подтвердить все покупки в течение трех дней. Неспособность должным образом подтвердить покупки приводит к тому, что эти покупки возвращаются. Процесс не дает никакой ясности, как подтверждать покупки. это то, что я пытался Это правильный способ сделать это. Заранее спасибо

@Override


 public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&purchases!=null){
            Toast.makeText(this, "Purchase Successful", Toast.LENGTH_SHORT).show();
            for(Purchase purchase:purchases){
                handlePurchase(purchase);
            }
        }else if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
            Toast.makeText(this, "Purchase Cancelled", Toast.LENGTH_SHORT).show();
        }else if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){
            Toast.makeText(this, "Already Purchased", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(this, billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();
        }



    //in handlePurchase()
 if (!purchase.isAcknowledged())
{ 
          AcknowledgePurchaseParams acknowledgePurchaseParams
                    = AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .setDeveloperPayload(purchase.getDeveloperPayload())
                    .build();

            client.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
                @Override
                public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
                    if (billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK){
                        Toast.makeText(RemoveAdsActivity.this, "Purchase Acknowledged", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

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

Efrain Sanjay Adhikary 24.09.2019 11:27
30
1
18 534
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В нем упоминается подтверждение покупок примерно на полпути через этот связь. Существуют различные способы подтверждения покупки в зависимости от типа.

 private BillingClient mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();

//For non-consumables:
mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener());

//For Consumables: 
client.consumeAsync(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

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

ОБНОВИТЬ

Вот как подтвердить покупки как нерасходных, так и расходных материалов, начиная с нерасходуемый:

Сначала создайте объект класса AcknowledgePurchaseParams. Для этого вам нужен токен покупки, который вы сможете легко получить, поскольку вы должны вызывать его в своем методе onPurchasesUpdated или другом методе, которому вы передали покупку после onPurchasesUpdated:

AcknowledgePurchaseParams acknowledgePurchaseParams =
            AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .build();

Затем создайте слушателя, который будет использоваться в качестве второго параметра. Это позволит вам что-то сделать после подтверждения покупки. В этом примере я показываю сообщение закусочной (согласно комментарию ворбеля, вы можете и, вероятно, должны проверить результат этого billingResult):

AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
        @Override
        public void onAcknowledgePurchaseResponse(BillingResult billingResult) {              

            getMessage("Purchase acknowledged");               
        }

    };

Создав их, используйте свой BillingClient для вызова метода acknowledgePurchase:

mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

Покупка должна быть успешно подтверждена.

Это использует acknowledgePurchase для нерасходуемых предметов.

Расходные материалы

Это похоже, только то, как они называются, изменено - см. объяснение того, что они собой представляют, в приведенном выше примере:

Первый параметр - Params - настройка:

ConsumeParams consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchase.getPurchaseToken())
            .build();

Второй параметр - Слушатель - настройка:

    ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
        @Override
        public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
            getMessage("Purchase acknowledged");
        }
    }

Теперь используйте свой BillingClint и ConsumerAsync:

mBillingClient.consumeAsync(consumeParams, consumeResponseListener);

Спасибо, это полезно. Я смог купить и подтвердить, но billingClient.queryPurchasesList().getPurchasesList(); возвращает null. Можете ли вы помочь мне с этим?

Surya Ganesh 13.06.2019 22:27

Я не вижу способа для queryPurchasesList() не должно быть, BillingClient.queryPurchase(skuType).getPurchasesList(); ?

COYG 14.06.2019 02:55

Да, Вы правы. С чем это может быть связано?

Surya Ganesh 14.06.2019 08:14

@SuryaGanesh Я обновил ответ, чтобы показать более расширенный пример для дальнейшего использования.

COYG 03.07.2019 18:39

Это так расстраивает. Я продолжаю получать код ответа 3. Версия Google Play In-app Billing API меньше 9. Я использую последнюю версию библиотеки биллинга. Мой тестовый телефон обновлен. Я в растерянности.

paul_f 17.07.2019 13:56

Может кто знает как отменить покупку теста знаний?

brucemax 17.09.2019 17:52

Что делать, если Purchase.getPurchaseToken() иногда возвращает значение null?

Cícero Moura 23.10.2019 21:47

onAcknowledgePurchaseResponse(BillingResult billingResult) вы должны проверить результат OK

Wrobel 08.11.2019 15:03

Что делать, если результат не в порядке? Вы пытаетесь повторить? Сколько раз вы не можете держать пользователя там вечно? Я не вижу статус подтверждения заказа в консоли заказов в Google Play :-(

Pieter 11.03.2020 07:11

@Pieter, возможно, попробуйте еще несколько раз с интервалом в 1 секунду между попытками в течение максимум трех секунд, а затем сообщите пользователю, чтобы он повторил попытку позже, если после этого это не сработает. Если покупка подтверждена в вашем коде, она будет подтверждена в Google Play.

COYG 11.03.2020 07:21

Спасибо @COYG. Я также думал проверить подтверждение при запуске приложения и попробовать там, и надеюсь, что пользователь запустит приложение несколько раз за 3 дня, которые я должен подтвердить платеж. Точно не знаю, в чем причина этого шага подтверждения после того, как пользователь приобрел товар. Также было бы полезно, если бы можно было увидеть статус подтверждения на консоли заказов и, возможно, также подтвердить его оттуда.

Pieter 11.03.2020 08:35

Для подписки это было объяснено в Developer.android. Но как объявить переменные: BillingClient client = ... AcknowledgePurchaseResponseListener acceptPurchaseResponseListener = Должен ли он быть таким же, как одно Consumable подтверждение. Или у него есть другой способ сделать это. ?

ama989 03.05.2020 07:10

@CíceroMoura имеет значение null в случае проблем с сетью или в случае, если billingClient.isInitialized() имеет значение false

Duna 07.10.2020 19:15

У меня есть вопрос: 1. если подтверждение ложное, возвращается ли покупка через 3 дня? 2. Всегда ли подтверждение покупки верно для успешной покупки 3. Что означает расходуемая и нерасходуемая покупка. (покупка INAPP относится к расходным или нерасходным материалам)

sejn 09.10.2021 11:36

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

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

purchase.getSkus.contains("sku here");

вместо

purchase.getSku.equals("sku here");

Вы упоминаете, что это нужно добавить в обновление «Покупка»? Слушайте?

sejn 22.09.2021 13:44

Другие вопросы по теме