Android 反复购买相同的商品,而不必消费应用内购买
我有一个捐赠标签,想让用户反复购买这些物品。我已经实现了一个代码,但它允许用户只购买一次特定的物品。我在play console中为产品使用了托管产品Android 反复购买相同的商品,而不必消费应用内购买,android,in-app-purchase,in-app-billing,android-billing,android-inapp-purchase,Android,In App Purchase,In App Billing,Android Billing,Android Inapp Purchase,我有一个捐赠标签,想让用户反复购买这些物品。我已经实现了一个代码,但它允许用户只购买一次特定的物品。我在play console中为产品使用了托管产品 btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(billingClient.isReady()){ SkuDetailsParams par
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(billingClient.isReady()){
SkuDetailsParams params=SkuDetailsParams.newBuilder()
.setSkusList(Arrays.asList("purchase_aaa","purchase_bbb","purchase_ccc","purchase_ddd"))
.setType(BillingClient.SkuType.INAPP).build();
billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
if(responseCode==BillingClient.BillingResponse.OK)
{
loadProductToRecyclerView(skuDetailsList);
}
else{
Toast.makeText(Donate.this, "Cannot query product", Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
Toast.makeText(Donate.this, "Not ready", Toast.LENGTH_SHORT).show();
}
}
});
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
if(purchases!=null){
Toast.makeText(this, "Purchased"+purchases.size(), Toast.LENGTH_SHORT).show();
}
}
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(billingClient.isReady()){
SkuDetailsParams params=SkuDetailsParams.newBuilder()
.setSkusList(Arrays.asList(“采购aaa”、“采购bbb”、“采购ccc”、“采购ddd”))
.setType(BillingClient.SkuType.INAPP).build();
billingClient.querySkuDetailsAsync(参数,新SkuDetailsResponseListener(){
@凌驾
公共无效onSkuDetailsResponse(内部响应代码,列表skuDetailsList){
if(responseCode==BillingClient.BillingResponse.OK)
{
loadProductToRecyclerView(skuDetailsList);
}
否则{
Toast.makeText(捐赠.this,“无法查询产品”,Toast.LENGTH_SHORT.show();
}
}
});
}
其他的
{
Toast.makeText(捐赠.this,“Not ready”,Toast.LENGTH_SHORT).show();
}
}
});
@凌驾
公共无效onPurchasesUpdated(int responseCode,@Nullable List purchases){
如果(购买!=null){
Toast.makeText(这是“购买的”+purchases.size(),Toast.LENGTH_SHORT.show();
}
}
这是设计的,不能更改,应用内管理的产品只能购买一次
如果您希望支付更多费用的用户启用更多功能,则必须创建尽可能多的应用内管理产品
例如,如果这是一个游戏,其中用户正在消费物品,那么当他不再有任何物品时,您将消费应用内产品,以便他可以再次购买
或者,您也可以在购买后立即消费该产品,并跟踪他通过您自己的方式、自己的服务器或firebase购买了多少,但这已经意味着您必须为您的应用程序实施用户身份验证系统
消费购买:
ConsumeResponseListener consumeListener = new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
}
};
String token = purchase.getPurchaseToken();
ConsumeParams consumeParams = ConsumeParams.newBuilder().setPurchaseToken(token).build();
billingClient.consumeAsync(consumeParams, consumeListener);
我在stack上找到了一些答案,它写了一些方法来使用这个项目,但我无法理解。这是它的链接。你能检查一下吗@Lluis Felisartt链接使用不推荐的AIDL计费服务,新项目应使用计费库。我用一些代码编辑了我的答案,用于购买。我使用的是新版本,但有一些问题,然后返回到旧版本,该版本使用int responseCode而不是BillingResult BillingResult。我尝试了你的代码,但在字符串标记等之后出现错误。你能添加一个与我的版本兼容的答案吗@Lluis Felisarty您的代码使用计费库,与我的消费代码相同。