I've been at this for a week. I cannot get the billing flow to launch, please help!. Thanks. I'm not getting any errors. From what I can tell it is never hitting the "public void onSkuDetailsResponse" method.
I've tried to strip my entire app down to just the billing section to get it to work but still not having any luck.
private void setupBillingClient() {
billingClient = BillingClient.newBuilder(this).setListener(this).enablePendingPurchases().setListener(this).build(); //billingClient = BillingClient.newBuilder(this).enablePendingPurchases().build(); //
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
Toast.makeText(getApplication(), "success to connect billing", Toast.LENGTH_SHORT).show();
loadAllSKUs();
}
}
@Override
public void onBillingServiceDisconnected() {
}
});
}
private void loadAllSKUs() {
final List<String> skuList = new ArrayList<>();
skuList.add("GunVault Donation"); //from play store...do this for multiple items if have them
// SkuDetailsParams params = SkuDetailsParams.newBuilder()
// .setSkusList(skuList)
// .setType(BillingClient.SkuType.INAPP)
// .build();
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() { // billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener()
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { // if (skuDetailsList != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
for (Object skuDetailsObject : skuDetailsList) { // for (final SkuDetails skuDetails : skuDetailsList) {
final SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
String gunVaultDonation;
Toast.makeText(About.this, skuDetails.getSku() + " " + sku, Toast.LENGTH_SHORT).show();
final BillingFlowParams params = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
btnDonate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplication(), "Donate clicked", Toast.LENGTH_SHORT).show();
BillingFlowParams billingFlowParams = BillingFlowParams
.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(About.this, billingFlowParams);
}
});
}
} else if (billingResult.getResponseCode() ==
BillingClient.BillingResponseCode.ERROR) {
Toast.makeText(About.this, "Error", Toast.LENGTH_SHORT).show();
}
}
});
Let me know if you need anything else