我有消耗品,但用户不能再购买一次-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<>();
private List<SkuDetails> inAPPSubs = new ArrayList<>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_in_app);
    coinPack1 = (Button) findViewById(R.id.coinPack1);
    coinPack2 = (Button) findViewById(R.id.coinPack2);
    coinPack3 = (Button) findViewById(R.id.coinPack3);
    coinPack4 = (Button) 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(),new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(@NonNull BillingResult billingResult,@Nullable List<SkuDetails> 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(),@Nullable List<SkuDetails> list) {
                        inAPPSubs = 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(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


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

        }
    });

    coinPack2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(inAPPDetailList.get(1)).build();
            billingClient.launchBillingFlow(InAppActivity.this,billingFlowParams);

        }
    });

    coinPack3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

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


        }
    });

    coinPack4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View 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()){

                AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();
                AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
                    @Override
                    public void onAcknowledgePurchaseResponse(@NonNull BillingResult billingResult) {

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


                    }
                };
                billingClient.acknowledgePurchase(acknowledgePurchaseParams,acknowledgePurchaseResponseListener);
                

            }
            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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...