如果我的测试卡被拒,我将无法再次购买硬币

问题描述

我正在用android studio开发一个应用程序,并且想在硬币上使用某些功能。到目前为止一切顺利,今天我注意到了一些事情。如果我进行正常购物,通常会将令牌添加用户的帐户中,然后用户开始使用令牌,但是如果我使用测试卡测试错误,则我的应用程序将不允许购买相同的硬币包装。我该如何解决

这是我的代码

public class InAppActivity extends AppCompatActivity implements PurchasesUpdatedListener {
private Button coinPack1;
private Button coinPack2;
private Button coinPack3;
private Button coinPack4;

private BillingClient billingClient;
private List<SkuDetails> inAPPDetailList = new ArrayList<>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_in_app);
    coinPack1 = findViewById(R.id.coinPack1);
    coinPack2 = findViewById(R.id.coinPack2);
    coinPack3 = findViewById(R.id.coinPack3);
    coinPack4 = findViewById(R.id.coinPack4);

    billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(@NonNull BillingResult billingResult) {

            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK){
                checkState(true);

                List<String> skuListInAPP = new ArrayList<>();
                skuListInAPP.add("coin_pack");
                skuListInAPP.add("coin_pack2");
                skuListInAPP.add("coin_pack3");
                skuListInAPP.add("coin_pack4");
                SkuDetailsParams.Builder paramsInApp = SkuDetailsParams.newBuilder();
                paramsInApp.setSkusList(skuListInAPP).setType(BillingClient.SkuType.INAPP);
                billingClient.querySkuDetailsAsync(paramsInApp.build(),(billingResult12,list) -> inAPPDetailList = list);

                List<String> skuListSubs = new ArrayList<>();
                skuListSubs.add("ads_free");
                SkuDetailsParams.Builder paramsSubs = SkuDetailsParams.newBuilder();
                paramsSubs.setSkusList(skuListSubs);
                paramsSubs.setSkusList(skuListSubs).setType(BillingClient.SkuType.SUBS);
                billingClient.querySkuDetailsAsync(paramsSubs.build(),(billingResult1,list) -> {
                });


            }else {
                checkState(false);
                Toast.makeText(InAppActivity.this,"Beklenmedik Bir Hata oluştu",Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onBillingServicedisconnected() {
            checkState(false);
            Toast.makeText(InAppActivity.this,"Beklenmedik Bir Hata Oluştu",Toast.LENGTH_SHORT).show();
        }
    });


    coinPack1.setonClickListener(view -> {


        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(inAPPDetailList.get(0)).build();
        billingClient.launchBillingFlow(InAppActivity.this,billingFlowParams);

    });

    coinPack2.setonClickListener(view -> {
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(inAPPDetailList.get(1)).build();
        billingClient.launchBillingFlow(InAppActivity.this,billingFlowParams);

    });

    coinPack3.setonClickListener(view -> {

        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(inAPPDetailList.get(2)).build();
        billingClient.launchBillingFlow(InAppActivity.this,billingFlowParams);


    });

    coinPack4.setonClickListener(view -> {
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(inAPPDetailList.get(3)).build();
        billingClient.launchBillingFlow(InAppActivity.this,billingFlowParams);



    });

}




private void checkState(Boolean situation){
    coinPack1.setEnabled(situation);
    coinPack2.setEnabled(situation);
    coinPack3.setEnabled(situation);
    coinPack4.setEnabled(situation);
}
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult,@Nullable List<Purchase> list) {

    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && list!= null){

        for (Purchase purchase : list){

            if (!purchase.isAckNowledged()){

                ConsumeParams consumeParams = ConsumeParams.newBuilder()
                        .setPurchasetoken(purchase.getPurchasetoken())
                        .build();
                ConsumeResponseListener consumeResponseListener = (billingResult1,purchasetoken) -> {




                    if (billingResult1.getResponseCode() == BillingClient.BillingResponseCode.OK){
                        Log.i("Result","Successfully :)");
                    }else{
                        Log.i("Result","Failed :(");
                    }



                };

                billingClient.consumeAsync(consumeParams,consumeResponseListener);


            }
            if (purchase.getSku().equals("coin_pack")){

                Constant.TOTAL_COINS = Constant.TOTAL_COINS + 100;
                Utils.UpdateCoin(getApplicationContext(),String.valueOf(Constant.TOTAL_COINS));
                Toast.makeText(this,"Satın Alma Başarılı 100 Jeton. Destekleriniz için teşekkür ederiz",Toast.LENGTH_SHORT).show();


            }

            if (purchase.getSku().equals("coin_pack2")){
                Constant.TOTAL_COINS = Constant.TOTAL_COINS + 200;
                Utils.UpdateCoin(getApplicationContext(),"Satın Alma Başarılı 200 Jeton. Destekleriniz için teşekkür ederiz",Toast.LENGTH_SHORT).show();

            }
            if (purchase.getSku().equals("coin_pack3")){
                Constant.TOTAL_COINS = Constant.TOTAL_COINS + 400;
                Utils.UpdateCoin(getApplicationContext(),"Satın Alma Başarılı 400 Jeton. Destekleriniz için teşekkür ederiz",Toast.LENGTH_SHORT).show();

            }
            if (purchase.getSku().equals("coin_pack4")){
                Constant.TOTAL_COINS = Constant.TOTAL_COINS + 600;
                Utils.UpdateCoin(getApplicationContext(),"Satın Alma Başarılı 600 Jeton. Destekleriniz için teşekkür ederiz",Toast.LENGTH_SHORT).show();

            }
        }


    }
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED){

        Toast.makeText(getApplicationContext(),"Ödeme İptal Edildi!!!",Toast.LENGTH_SHORT).show();

    }


}

}

非常感谢您:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)