Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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的Google Play Billing中获取应用内购买的信息_Android_Android Billing - Fatal编程技术网

我如何在android的Google Play Billing中获取应用内购买的信息

我如何在android的Google Play Billing中获取应用内购买的信息,android,android-billing,Android,Android Billing,我想了解如何在android studio中获取已购买产品的详细信息,无论是否连接互联网 据我所知,在google play中,计费库有两种检索信息的方法 1. PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP); 2. billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,

我想了解如何在android studio中获取已购买产品的详细信息,无论是否连接互联网

据我所知,在google play中,计费库有两种检索信息的方法

1. PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP);

2. billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
                                         new PurchaseHistoryResponseListener() {
    @Override
    public void onPurchaseHistoryResponse(BillingResult billingResult,
                                          List<Purchase> purchasesList) {
        if (billingResult.getResponseCode() == BillingResponse.OK
                && purchasesList != null) {
            for (Purchase purchase : purchasesList) {
                // Process the result.
            }
         }
    }
});
This is the way I have implemented In-App Purchase. It is working smoothly. Hope it helps.

mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() {
            @Override
            public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {

                //  Log.d("anupam", responseCode + "");
                if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
                    for (Purchase purchase : purchases) {
                    //List of purchases
                    }
                } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
                    Toast.makeText(SplashActivity.this, "Sorry, you have canceled purchase Subscription.", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(SplashActivity.this, "Sorry, some error occurred.", Toast.LENGTH_SHORT).show();
                }
            }
        }).build();

        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {

                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    // The billing client is ready. You can query purchases here.

                    final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.SUBS);
                    for (Purchase sourcePurchase : purchasesResult.getPurchasesList()) {
                        if (sourcePurchase != null) {

                            ConsumeResponseListener listener = new ConsumeResponseListener() {
                                @Override
                                public void onConsumeResponse(final int responseCode, final String purchaseToken) {
                                    // Log.d("anupam2", responseCode + "  <------->  "+ purchasesResult.getPurchasesList() + "  <------->  " + purchaseToken);
                                }
                            };
                            mBillingClient.consumeAsync(sourcePurchase.getPurchaseToken(), listener);
                        } else {

                        }
                    }

                    if (purchasesResult.getPurchasesList().size() > 0) {
                        //  Log.d("anupam3", purchasesResult.getPurchasesList().size() + "");

                    } else {
                        //  Log.d("anupam4", purchasesResult.getPurchasesList().size() + "");
                        BillingFlowParams.Builder builder = BillingFlowParams.newBuilder().setSku("234r23446").setType(BillingClient.SkuType.SUBS);
                        int responseCode = mBillingClient.launchBillingFlow(SplashActivity.this, builder.build());
                        if (responseCode == 7) {

                            //Item already purchased
                        }
                    }
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                // Try to restart the connection on the next request to
                // Google Play by calling the startConnection() method.
                Toast.makeText(SplashActivity.this, "Failed", Toast.LENGTH_LONG).show();
            }
        });
1。PurchasesResult PurchasesResult=billingClient.queryPurchases(SkuType.INAPP);
2.billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
新的PurchaseHistoryResponseListener(){
@凌驾
PurchaseHistoryResponse(BillingResult BillingResult,
清单采购清单){
如果(billingResult.getResponseCode()==BillingResponse.OK
&&purchasesList!=空){
用于(采购:采购清单){
//处理结果。
}
}
}
});
但我不知道如何检索信息。

这是我在应用程序购买中实现的方式。它工作顺利。希望能有帮助。
1. PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP);

2. billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
                                         new PurchaseHistoryResponseListener() {
    @Override
    public void onPurchaseHistoryResponse(BillingResult billingResult,
                                          List<Purchase> purchasesList) {
        if (billingResult.getResponseCode() == BillingResponse.OK
                && purchasesList != null) {
            for (Purchase purchase : purchasesList) {
                // Process the result.
            }
         }
    }
});
This is the way I have implemented In-App Purchase. It is working smoothly. Hope it helps.

mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() {
            @Override
            public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {

                //  Log.d("anupam", responseCode + "");
                if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
                    for (Purchase purchase : purchases) {
                    //List of purchases
                    }
                } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
                    Toast.makeText(SplashActivity.this, "Sorry, you have canceled purchase Subscription.", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(SplashActivity.this, "Sorry, some error occurred.", Toast.LENGTH_SHORT).show();
                }
            }
        }).build();

        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {

                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    // The billing client is ready. You can query purchases here.

                    final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.SUBS);
                    for (Purchase sourcePurchase : purchasesResult.getPurchasesList()) {
                        if (sourcePurchase != null) {

                            ConsumeResponseListener listener = new ConsumeResponseListener() {
                                @Override
                                public void onConsumeResponse(final int responseCode, final String purchaseToken) {
                                    // Log.d("anupam2", responseCode + "  <------->  "+ purchasesResult.getPurchasesList() + "  <------->  " + purchaseToken);
                                }
                            };
                            mBillingClient.consumeAsync(sourcePurchase.getPurchaseToken(), listener);
                        } else {

                        }
                    }

                    if (purchasesResult.getPurchasesList().size() > 0) {
                        //  Log.d("anupam3", purchasesResult.getPurchasesList().size() + "");

                    } else {
                        //  Log.d("anupam4", purchasesResult.getPurchasesList().size() + "");
                        BillingFlowParams.Builder builder = BillingFlowParams.newBuilder().setSku("234r23446").setType(BillingClient.SkuType.SUBS);
                        int responseCode = mBillingClient.launchBillingFlow(SplashActivity.this, builder.build());
                        if (responseCode == 7) {

                            //Item already purchased
                        }
                    }
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                // Try to restart the connection on the next request to
                // Google Play by calling the startConnection() method.
                Toast.makeText(SplashActivity.this, "Failed", Toast.LENGTH_LONG).show();
            }
        });
mBillingClient=BillingClient.newBuilder(this.setListener)(新PurchasesUpdatedListener(){ @凌驾 公共无效onPurchasesUpdated(int responseCode,@Nullable List purchases){ //Log.d(“anupam”,responseCode+”); if(responseCode==BillingClient.BillingResponse.OK&&purchases!=null){ 用于(采购:采购){ //采购清单 } }else if(responseCode==BillingClient.BillingResponse.USER\u已取消){ Toast.makeText(SplashActivity.this,“抱歉,您已取消购买订阅。”,Toast.LENGTH_SHORT.show(); }否则{ Toast.makeText(SplashActivity.this,“抱歉,发生了一些错误。”,Toast.LENGTH_SHORT.show(); } } }).build(); mBillingClient.startConnection(新的BillingClientStateListener(){ @凌驾 公共无效onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode){ if(billingResponseCode==BillingClient.BillingResponse.OK){ //计费客户端已准备就绪。您可以在此查询购买情况。 final Purchase.PurchasesResult PurchasesResult=mBillingClient.queryPurchases(BillingClient.SkuType.SUBS); 对于(采购源采购:purchasesResult.getPurchasesList()){ if(sourcePurchase!=null){ ConsumerResponseListener侦听器=新ConsumerResponseListener(){ @凌驾 ConsumerResponse(最终整数响应代码、最终字符串purchaseToken)上的公共void{ //Log.d(“anupam2”,responseCode+“”+purchasesResult.getPurchasesList()+“”+purchaseToken); } }; mBillingClient.consumerasync(sourcePurchase.getPurchaseToken(),侦听器); }否则{ } } 如果(purchasesResult.getPurchasesList().size()>0){ //Log.d(“anupam3”,purchasesResult.getPurchasesList().size()+”); }否则{ //Log.d(“anupam4”,purchasesResult.getPurchasesList().size()+”); BillingFlowParams.Builder=BillingFlowParams.newBuilder().setSku(“234r23446”).setType(BillingClient.SkuType.SUBS); int responseCode=mBillingClient.launchBillingFlow(SplashActivity.this,builder.build()); 如果(响应代码==7){ //已购买的物品 } } } } @凌驾 公共无效onBillingServiceDisconnected(){ //尝试在下一次请求时重新启动连接以 //Google通过调用startConnection()方法播放。 Toast.makeText(SplashActivity.this,“失败”,Toast.LENGTH_LONG.show(); } });
非常感谢!但我还有一个问题,如果用户将购买一次性产品,那么我如何在不初始化BillingClient的情况下检查用户是否已经从我的主要活动购买了该产品。您必须初始化BillingClient。没有其他方法。因此,我可以为BillingClient和activity创建一个单独的方法。是的,从activity中的onCreate进行调用。您能告诉我这个(Purchase类中的getOriginalJson()方法)吗