Java 应用内计费确认采购问题[使用google play应用内计费库]
我是android新手,第一次尝试实现应用内计费 我在应用程序库中使用google play。 我想实施应用程序内消费品购买。我正在使用“android.test.purchased”保留id进行测试。我可以加载skuDetails并成功购买和消费 这是我使用ConsumeSync的handlePurchase方法Java 应用内计费确认采购问题[使用google play应用内计费库],java,android,in-app-purchase,in-app-billing,android-inapp-purchase,Java,Android,In App Purchase,In App Billing,Android Inapp Purchase,我是android新手,第一次尝试实现应用内计费 我在应用程序库中使用google play。 我想实施应用程序内消费品购买。我正在使用“android.test.purchased”保留id进行测试。我可以加载skuDetails并成功购买和消费 这是我使用ConsumeSync的handlePurchase方法 void handlePurchase(Purchase purchase) { BillingClient client = BillingClient.newBuilde
void handlePurchase(Purchase purchase) {
BillingClient client = BillingClient.newBuilder(NewAdActivity.this)
.enablePendingPurchases()
.setListener(this)
.build();
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
System.out.println("item successfully purchased");
if (!purchase.isAcknowledged()) {
ConsumeParams consumeParams = ConsumeParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.setDeveloperPayload(purchase.getDeveloperPayload())
.build();
ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchaseToken != null) {
System.out.println("SUCCESSFULLY consumed PURCHASE");
providecontent();
}
else {
System.out.println("FAILED TO consume:”);
}
}
};
client.consumeAsync(consumeParams, consumeResponseListener);
}
}
}
当我消费购买时,它是否也确认购买?我是否需要在purchase.originalJson中手动设置“acknowledged”:true
我的代码用于消费购买的物品是否正确?或者我需要在消费商品之前包含一个单独的确认采购
请回复。非常感谢您的帮助
谢谢。欢迎来到stackoverflow 您错误地使用了
consumerasync()
,要确认购买,您应该调用acknowledgePurchase()
consumerasync()
删除购买的物品,例如,如果购买物品允许用户玩10次,并且用户使用了所有这些物品,那么您将调用consumerasync()
让用户再次购买物品
例如:
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
// Grant entitlement to the user.
boolean signOk = verifyPurchaseSignature(purchase.getOriginalJson(), purchase.getSignature());
if (!signOk) {
// Alert the user about wrong signature
return;
} else if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
//Give thanks for the purchase
}
});
}
}
对于耗材产品,您希望使用ConsumeSync()。对于非耗材的产品,您希望使用acknowledgePurchase()。有关在应用程序中确认购买的更多信息,请查看官方文档:这将确认购买,我可以提供内容并在后端设置标志。但它会改变原始JSON中已确认的标志值吗?在确认并运行queryPurchase之后,它仍然显示“已确认”:false。这是我的原始JSON={“packageName”:“mypackage”,“已确认”:false,“orderId”:“transactionId.android.test.purchased”,“productId”:“android.test.purchased”,“developerPayload”:“purchaseTime”:0,“purchaseState”:0,“purchaseToken”:mytoken“}。因为它是一个测试id而不是一个真正的购买id,所以它仍然是假的吗?我从来没有考虑Json中已确认的参数,对于我来说,如果购买成功完成,真正说明的是,在Google Play控制台的订单管理中,几分钟后它看起来是收费的