所有应用内购买将在五分钟内取消并退款(Alpha 测试)



这是我第一次为我的应用实施应用内结算,我已经设置了一美元的捐款,通过点击一个按钮购买。以下是我所有购买流程发生的活动:

public class DonationsActivity extends AppCompatActivity implements PurchasesUpdatedListener{
private BillingClient billingClient;
ConsumeResponseListener listener;
private SkuDetails oneDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donations);
billingClient = BillingClient.newBuilder(DonationsActivity.this).setListener(this).enablePendingPurchases().build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
List<String> skuList = new ArrayList<> ();
skuList.add("one_dollar_donation");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
for(SkuDetails theDetails : skuDetailsList)
{
if(theDetails.getSku().equals("one_dollar_donation"))
{
oneDetails = theDetails;
}      
}
}
});
}
}
@Override
public void onBillingServiceDisconnected() {
}
});
listener = new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String outToken) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
}
}
};
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
Toast.makeText(this, getString(R.string.canceled_donation), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, getString(R.string.error_donation), Toast.LENGTH_LONG).show();
}
}
private void handlePurchase(Purchase purchase)
{
if (!purchase.isAcknowledged())
{
ConsumeParams consumeParams = ConsumeParams.newBuilder().build();
billingClient.consumeAsync(consumeParams, listener);
}
}
public void donateOneDollar(View view)
{
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(oneDetails)
.build();
BillingResult responseCode = billingClient.launchBillingFlow(DonationsActivity.this, flowParams);
}

我的问题是,每次我进行测试购买时,它都会在接下来的五分钟内被取消并退款。在取消购买期间的五分钟内,我也无法进行更多购买。

据我了解,这个问题是由于购买未被确认引起的(这就是它在 5 分钟内退款的原因(,并且我无法在此期间进行更多购买,因为 Google 认为我已经拥有该项目(我没有消费它,即同样的问题(

我以为我承认并从内部消费了购买:

private void handlePurchase(Purchase purchase)
{
if (!purchase.isAcknowledged())
{
ConsumeParams consumeParams = ConsumeParams.newBuilder().build();
billingClient.consumeAsync(consumeParams, listener);
}
}

但我显然犯了一个错误,谁能帮助我了解我的错误是什么,我该如何解决它?

经过很长时间试图找出错误,我意识到我错过了 ConsumptionParams 中的 setPurchaseToken 方法,这就是 Play 商店不知道我消费了什么购买的原因。

最新更新