问题描述
我正在使用应用内购买库针对3个具有不同价格标签的商品创建一个android应用。我可以在点击项目时调用应用内结算过程,但仅显示剩余2个点击项目的第一个项目的结算流程。下面是我实现的代码,但到目前为止还算不上运气。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupBillingClient();
}
private void setupBillingClient() {
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){
Toast.makeText(TinyCompassthemePackage.this,"SUCCESS",Toast.LENGTH_SHORT).show();
loadAllSKUs();
} else {
Toast.makeText(this,"Failed.!",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBillingServicedisconnected() {
Toast.makeText(this,"disconnected.",Toast.LENGTH_SHORT).show();
}
});
}
private void loadAllSKUs() {
if (billingClient.isReady()) {
SkuDetailsParams params = SkuDetailsParams.newBuilder()
.setSkusList(Arrays.asList(skuproduct_itemone,skuproduct_itemtwo,skuproduct_itemthree))
.setType(BillingClient.SkuType.INAPP)
.build();
billingClient.querySkuDetailsAsync(params,new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(@NonNull BillingResult billingResult,List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
for (Object skuDetailsObject : skuDetailsList) {
skuDetails = (SkuDetails) skuDetailsObject; if(skuDetails.getSku().equals(item1_id)) {
mySkuDetails = skuDetails;
itemOne.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BillingFlowParams params = BillingFlowParams
.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(this,params);
}
});
} else if(skuDetails.getSku().equals(item2_id)) {
mySkuDetails = skuDetails;
itemTwo.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BillingFlowParams params = BillingFlowParams
.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(this,params);
}
});
} else if(skuDetails.getSku().equals(item3_id)) {
mySkuDetails = skuDetails;
itemThree.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BillingFlowParams params = BillingFlowParams
.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(this,params);
}
});
}
}
}
});
} else {
Toast.makeText(MainActivity.this,"Not ready!",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult,@Nullable List<Purchase> purchases) {
int responseCode = billingResult.getResponseCode();
if (responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
Toast.makeText(this,"Canceled.!",Toast.LENGTH_SHORT).show();
} else if (responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
if(skuDetails.getSku().equals(item1_id)) {
skuDetails = mySkuDetails;
itemOne.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
unLockItemOne();
Toast.makeText(MainActivity.this,"Item 1 already purchased.",Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this,MainActivity.class));
finish();
}
});
} else if(skuDetails.getSku().equals(item2_id)) {
skuDetails = mySkuDetails;
itemTwo.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
unLockItemTwo();
Toast.makeText(MainActivity.this,"Item 2 already purchased.",MainActivity.class));
finish();
}
});
} else if(skuDetails.getSku().equals(item3_id)) {
skuDetails = mySkuDetails;
itemThree.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
unLockItemThree();
Toast.makeText(MainActivity.this,"Item 3 already purchased.",MainActivity.class));
finish();
}
});
}
} else if (responseCode == BillingClient.BillingResponseCode.SERVICE_TIMEOUT){
Toast.makeText(MainActivity.this,"Timeout.!",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this,"Unable to process.! ResponseCode :: " + responseCode,Toast.LENGTH_LONG).show();
}
}
private void handlePurchase(Purchase purchase) {
if ((purchase.getSku().equals(item1_id)) && (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)) {
if (!purchase.isAckNowledged()) {
AckNowledgePurchaseParams ackNowledgePurchaseParams = AckNowledgePurchaseParams
.newBuilder()
.setPurchasetoken(purchase.getPurchasetoken())
.build();
billingClient.ackNowledgePurchase(ackNowledgePurchaseParams,new AckNowledgePurchaseResponseListener() {
@Override
public void onAckNowledgePurchaseResponse(@NonNull BillingResult billingResult) {
if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK) {
Toast.makeText(MainActivity.this,"Thank You,Item 1 is unlocked.",Toast.LENGTH_LONG).show();
unLockItemOne();
startActivity(new Intent(MainActivity.this,MainActivity.class));
finish();
}else{
Toast.makeText(MainActivity.this,"AckNowledge Error.!",Toast.LENGTH_LONG).show();
}
}
});
}
} else if ((purchase.getSku().equals(item2_id)) && (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)) {
if (!purchase.isAckNowledged()) {
AckNowledgePurchaseParams ackNowledgePurchaseParams = AckNowledgePurchaseParams
.newBuilder()
.setPurchasetoken(purchase.getPurchasetoken())
.build();
billingClient.ackNowledgePurchase(ackNowledgePurchaseParams,Item 2 is unlocked.",Toast.LENGTH_LONG).show();
unLockItemTwo();
startActivity(new Intent(MainActivity.this,Toast.LENGTH_LONG).show();
}
}
});
}
} else if ((purchase.getSku().equals(item3_id)) && (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)) {
if (!purchase.isAckNowledged()) {
AckNowledgePurchaseParams ackNowledgePurchaseParams = AckNowledgePurchaseParams
.newBuilder()
.setPurchasetoken(purchase.getPurchasetoken())
.build();
billingClient.ackNowledgePurchase(ackNowledgePurchaseParams,Item 3 is unlocked.",Toast.LENGTH_LONG).show();
unLockItemThree();
startActivity(new Intent(MainActivity.this,Toast.LENGTH_LONG).show();
}
}
});
}
}
} else {
Toast.makeText(MainActivity.this,"Unable to handle.!",Toast.LENGTH_SHORT).show();
}
}
我没弄错我在哪里。预先感谢。.
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)