如何解决我有消耗品,但用户不能再购买一次-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 举报,一经查实,本站将立刻删除。