问题描述
我正在用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 (将#修改为@)