我如何在android的Google Play Billing中获取应用内购买的信息
我想了解如何在android studio中获取已购买产品的详细信息,无论是否连接互联网 据我所知,在google play中,计费库有两种检索信息的方法我如何在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,
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()方法)吗