Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌应用内购买总是退款_Android_In App Purchase_In App Billing_Google Play Console_Android Inapp Purchase - Fatal编程技术网

Android 谷歌应用内购买总是退款

Android 谷歌应用内购买总是退款,android,in-app-purchase,in-app-billing,google-play-console,android-inapp-purchase,Android,In App Purchase,In App Billing,Google Play Console,Android Inapp Purchase,我对谷歌应用内购买有一些问题。所有收到的款项在72小时后退还。我的付款代码有错误吗?我自己付了钱,并没有要求任何退款,但即使是72小时后退款 private void setupBilling(){ mBillingClient=BillingClient.newBuilder(MainActivity.this).setListener(this.enablePendingPurchases().build(); mBillingClient.startConnection(新的Billin

我对谷歌应用内购买有一些问题。所有收到的款项在72小时后退还。我的付款代码有错误吗?我自己付了钱,并没有要求任何退款,但即使是72小时后退款

private void setupBilling(){
mBillingClient=BillingClient.newBuilder(MainActivity.this).setListener(this.enablePendingPurchases().build();
mBillingClient.startConnection(新的BillingClientStateListener(){
@凌驾
BillingSetupFinished(BillingResult BillingResult)上的公共无效{
if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK){
最终列表skuList=新的ArrayList();
添加(“删除广告”);
最终SkuDetailsParams.Builder参数=SkuDetailsParams.newBuilder();
参数setskulist(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),新SkuDetailsResponseListener()){
@凌驾
公共无效Onsku详细信息响应(BillingResult BillingResult,列表){
if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK&&list!=null){
BillingFlowParams flowParams=BillingFlowParams.newBuilder()
.setsku详细信息(list.get(0))
.build();
mBillingClient.launchBillingFlow(MainActivity.this,flowParams);
}
}
});
}否则{
Toast.makeText(MainActivity.this,“error”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
公共无效onBillingServiceDisconnected(){
Toast.makeText(MainActivity.this,“error”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
PurchaseSupdated上的公共无效(BillingResult BillingResult,@Nullable List){
如果(billingResult.getResponseCode()==BillingClient.BillingResponseCode.OK
&&列表!=空){
用于(采购:列表){
if(purchase.getPurchaseState()==purchase.PurchaseState.PURCHASED){
Toast.makeText(MainActivity.this,purchase.getSku()+“ok”,Toast.LENGTH\u SHORT.show();
}
}
}else if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.USER\u已取消){
Toast.makeText(这是“ptal edildi”,Toast.LENGTH.SHORT).show();
}else if(billingResult.getResponseCode()==BillingClient.BillingResponseCode.ITEM_已拥有){
Toast.makeText(这是“alreadry拥有的”,Toast.LENGTH_LONG.show();
}否则{
Toast.makeText(此“错误”,Toast.LENGTH_SHORT).show();
}
}

您似乎没有正确确认购买

如果您使用Google Play计费库2.0版或更高版本,您 必须在三天内确认所有购买。未能妥善处理 确认购买导致这些购买被退款

您可以在文档中找到更多详细信息:

BillingClient=。。。
AcknowledgePurchaseResponseListener AcknowledgePurchaseResponseListener=。。。
无效手购(采购){
if(purchase.getPurchaseState()==PurchaseState.PURCHASED){
//授予用户权限。
...
//如果尚未确认,则确认购买。
如果(!purchase.isAcknowledged()){
确认采购计划确认采购计划=
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
client.acknowledgePurchase(acknowledgePurchaseParams,acknowledgePurchaseResponseListener);
}
}
}

用户在我们的应用程序中付费购买应用程序,但谷歌会在72小时和10分钟后自动退款,我不知道为什么会发生这种情况。我把所有的代码都作为一个flatter文档来编写,并在下面添加了(app/build.gradle)依赖项{implementation'com.android.billingclient:billing:2.0.3',但每次用户在应用程序购买时付费,但谷歌会在72小时和10分钟后自动退款。请问有什么解决方案?(flatter app)
private void setupBilling() {
    mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(this).enablePendingPurchases().build();
    mBillingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            if (billingResult.getResponseCode() ==  BillingClient.BillingResponseCode.OK) {
                final List<String> skuList = new ArrayList<> ();
                skuList.add("remove_ads");
                final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);

                mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && list != null) {
                            BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                                    .setSkuDetails(list.get(0))
                                    .build();
                            mBillingClient.launchBillingFlow(MainActivity.this, flowParams);
                        }
                    }
                });

            }else{
                Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public void onBillingServiceDisconnected() {
            Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> list) {
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
            && list != null) {
        for (Purchase purchase : list) {
            if(purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED){

                Toast.makeText(MainActivity.this, purchase.getSku() + " ok", Toast.LENGTH_SHORT).show();

            }
        }
    } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
        Toast.makeText(this, "İptal edildi", Toast.LENGTH_SHORT).show();
    } else if(billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {

        Toast.makeText(this, "alreadry owned", Toast.LENGTH_LONG).show();

    }else{
        Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
    }

}