Пытаюсь обновить Google Play Billing Library с 3 на 5 (Не подтверждает покупки )

Рейтинг: 0Ответов: 1Опубликовано: 25.03.2023
public class MainActivity2 extends AppCompatActivity implements PurchasesUpdatedListener {

    // Покупка

    private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();
    ProgressBar progressBar;

    public static final String PRODUCT_ID1 = "purchase111";
    public static final String PRODUCT_ID2 = "purchase222";


    private BillingClient billingClient;
    ConnectionDetector cd;
    private Vibrator Vibro;

    @Override
    protected void onDestroy() {
        super.onDestroy();

        { if (billingClient==null)
        {}
        else
        { billingClient.endConnection();
            Toast.makeText(MainActivity2.this, ("Служба отключена"), Toast.LENGTH_SHORT).show();}}

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        cd = new ConnectionDetector(this);

        TextView button1 = (TextView) findViewById(R.id.button);
        TextView button2 = (TextView) findViewById(R.id.button2);

        if (cd.isConnected()) {

            progressBar = (ProgressBar) findViewById(R.id.progressBar);
            progressBar.setVisibility(View.VISIBLE);
            TextView textView2 = (TextView) findViewById(R.id.textView2);
            textView2.setVisibility(View.VISIBLE);


            button1.setClickable(false);
            button2.setClickable(false);

            purchase(null);

        } else {
            Toast.makeText(MainActivity2.this, (R.string.internet_not_activity), Toast.LENGTH_SHORT).show();

            button1.setClickable(false);
            button2.setClickable(false);



            new CountDownTimer(3000, 1) {

                public void onTick(long l)
                {}

                public void onFinish()
                {finish();}
            }.start();
        }

    }



    public void purchase(View view) {

        billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    initiatePurchase();
                    Toast.makeText(MainActivity2.this, ("Служба включена"), Toast.LENGTH_SHORT).show();
                }
                else
                { Toast.makeText(getApplicationContext(),"\n" + "Ошибка "+billingResult.getDebugMessage(),Toast.LENGTH_SHORT).show(); }
            }
            @Override
            public void onBillingServiceDisconnected() { }
        });
    }



    private void initiatePurchase() {
        List<String> skuList = new ArrayList<>();

        skuList.add(PRODUCT_ID1);
        skuList.add(PRODUCT_ID2);

        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(INAPP);
        billingClient.querySkuDetailsAsync(params.build(),

                new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(BillingResult billingResult,
                                                     List<SkuDetails> skuDetailsList) {
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK)
                        {
                            QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
                            billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {

                            for (SkuDetails skuDetails : skuDetailsList) {
                                mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                            }

                            progressBar.setVisibility(View.GONE);
                            TextView textView2 = (TextView) findViewById(R.id.textView2);
                            textView2.setVisibility(View.GONE);

                            TextView button1 = (TextView) findViewById(R.id.button);
                            TextView button2 = (TextView) findViewById(R.id.button2);
                            button1.setClickable(true);
                            button2.setClickable(true);

                            }));
                            vibro();

                            if (skuDetailsList != null && skuDetailsList.size() > 0)

                            { }

                            else{
                                // пытаемся добавить элемент / идентификатор продукта "покупка" внутри управляемого продукта в консоли Google Play
                                Toast.makeText(getApplicationContext(),"\n" + "Товар не найден",Toast.LENGTH_SHORT).show();
                            }

                        } else
                        { Toast.makeText(getApplicationContext(), " \n" + "Ошибка "+billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show(); }
                    }
                });
    }

    @Override
    public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        // если товар только что куплен
        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
            handlePurchases(purchases);

        }


        // если покупка отменена
        else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
            Toast.makeText(getApplicationContext(),"Покупка отменена",Toast.LENGTH_SHORT).show();
        }
        //Обработка любых других сообщений об ошибках
        else
        { }
    }


    void handlePurchases(List<Purchase>  purchases) {
        for(Purchase purchase:purchases) {
            //если товар куплен

            //////////////////////////////////////////////////////////////////////////////////////////////////////

            if (PRODUCT_ID1.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)

            {

                // если товар куплен и не подтвержден

                if (!purchase.isAcknowledged()) {
                    AcknowledgePurchaseParams acknowledgePurchaseParams =
                            AcknowledgePurchaseParams.newBuilder()
                                    .setPurchaseToken(purchase.getPurchaseToken())
                                    .build();
                    billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
                }

                // иначе товар куплен и также подтвержден
                // Предоставление пользователю права на покупку товара


                payComplete1(null);


            }

            //////////////////////////////////////////////////////////////////////////////////////////////////////

            if (PRODUCT_ID2.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)

            {

                // если товар куплен и не подтвержден

                if (!purchase.isAcknowledged()) {
                    AcknowledgePurchaseParams acknowledgePurchaseParams =
                            AcknowledgePurchaseParams.newBuilder()
                                    .setPurchaseToken(purchase.getPurchaseToken())
                                    .build();
                    billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
                }

                // иначе товар куплен и также подтвержден
                // Предоставление пользователю права на покупку товара


                payComplete2(null);


            }

        }

    }

    AcknowledgePurchaseResponseListener ackPurchase = new AcknowledgePurchaseResponseListener() {
        @Override
        public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
            if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK){
                // Предоставление прав пользователю.
            }
        }
    };


    public void  one(View view){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);

        BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(mSkuDetailsMap.get(PRODUCT_ID1))
                .build();
        billingClient.launchBillingFlow(MainActivity2.this, flowParams);

    }

    public void  two(View view){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);

        BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(mSkuDetailsMap.get(PRODUCT_ID2))
                .build();
        billingClient.launchBillingFlow(MainActivity2.this, flowParams);

    }

    public void payComplete1(View view)
    {    Toast.makeText(getApplicationContext(), "\n" + " payComplete1 - Товар куплен 1", Toast.LENGTH_SHORT).show();};

    public void payComplete2(View view)
    {    Toast.makeText(getApplicationContext(), "\n" + " payComplete2 - Товар куплен 2", Toast.LENGTH_SHORT).show();};


    public void vibro(){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);
    }

}

Ответы

▲ 0
if (PRODUCT_ID1.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
и
if (PRODUCT_ID2.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
        
Всегда давали false
    
Заменил на 
if (PRODUCT_ID1.equals(purchase.getSkus().get(0) ) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)
и
if (PRODUCT_ID2.equals(purchase.getSkus().get(0) ) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)

Подтверждает покупку - для меня подходит.