Почему обратный вызов onProductPurchased не вызывается, если я не щелкну его снова после транзакции?

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

На самом деле он не срабатывает, пока я не совершу покупку, а затем снова не нажму кнопку «Купить». Вот когда он говорит Already purchased, и я добрых 3 часа искал решение, но не могу, я нашел сообщение SO, объясняющее решение для кого-то, у кого была похожая проблема, поэтому я попытался реализовать как 1-й и второе решение, но оно не сработало, у него было такое же поведение.

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

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

package com.the.name.ui;

import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.TransactionDetails;
import com.the.name.R;

public class PremiumFragment extends Fragment implements BillingProcessor.IBillingHandler {


    private String LICENSE_KEY = "removedforthesakeofthepost";

    BillingProcessor bp;

    private Button btnPurchase;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        bp = new BillingProcessor(getContext(), LICENSE_KEY, PremiumFragment.this);
        bp.initialize();


        View rootView = inflater.inflate(R.layout.fragment_premium, container, false);

        btnPurchase = rootView.findViewById(R.id.purchasebtn);

        btnPurchase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bp.purchase(getActivity(), "android.test.purchased", null /*or developer payload*/, null);

            }
        });

        return rootView;
    }



    @Override
    public void onProductPurchased(String productId, TransactionDetails details) {
        /*
         * Called when requested PRODUCT ID was successfully purchased
         */

        Toast.makeText(getContext(), "Already purchased", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onPurchaseHistoryRestored() {

    }

    @Override
    public void onBillingError(int errorCode, Throwable error) {

    }

    @Override
    public void onBillingInitialized() {

    }


    @Override
    public void onDestroy() {
        if (bp != null) {
            bp.release();
            Toast.makeText(getActivity(), "onDestroy", Toast.LENGTH_SHORT).show();
        }
        super.onDestroy();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (!bp.handleActivityResult(requestCode, resultCode, data))
            super.onActivityResult(requestCode, resultCode, data);
    }

}

person Riley Varga    schedule 17.11.2019    source источник