- Hybrid app (Vue 3 + Capacitor 5) with cordova-plugin-purchase v13 for Google Play subscriptions.
- App is installed from Google Play Internal testing (opt-in link). The tester account is added to License testing.
- In Play Console the subscription exists and has Active base plans (monthly/yearly). Availability is set to 173 regions.
Problem
- The app never receives products/offers from Google Play. No base plans are loaded, so I cannot obtain offerToken and cannot start a purchase.
- In logcat I only see Finsky lines like “Billing preferred account via installer…”, but I never see any BillingClient/ProxyBillingActivity logs when I trigger catalog refresh or purchase.
Logs
- Example logcat:
- I/Finsky: [XXXX] Billing preferred account via installer for com.stablemanager.app …
- No lines for BillingClient / ProxyBillingActivity even when pressing the “Buy” button.
What I expect
- After initialization, store.update() should return the subscription product with base plans/offers so I can pick an offerToken and call order(). When starting the purchase flow I expect to see ProxyBillingActivity and the Play purchase sheet (with Test card, always approves).
What happens instead
- store.update() leaves products empty.
- No BillingClient logs at all (only Finsky “preferred account…”).
- In this plugin version, store.on is not available, so I also tried a polling fallback (periodic store.update), but still no products.
Minimal code (TypeScript)
// init (after deviceready)
await store.initialize([
{
id: 'stable_manager.test.sub',
type: Cdv.ProductType.PAID_SUBSCRIPTION,
platform: Cdv.Platform.GOOGLE_PLAY,
},
]);
await store.update(); // expecting products/offers here
const p = store.get?.('stable_manager.test.sub'); // returns undefined
// later, on button click
const payment = new Cdv.Payment();
payment.platform = Cdv.Platform.GOOGLE_PLAY;
payment.productId = 'stable_manager.test.sub';
payment.offerToken = '...'; // cannot get because offers are empty
await store.order(payment); // nothing happens, no BillingClient logs
What I tried
- Installed strictly from Internal testing (not via adb). Verified correct applicationId equals the one with the subscription.
- Tester account added to License testing; Play Store shows the same account.
- Cleared cache for Google Play Store and Google Play Services; rebooted.
- Waited >24h after creating/activating base plans.
- Created a simple Active base plan without any offer restrictions.
- Ensured Play Store/Services are up to date.
- Started logcat before opening the app; also filtered by process PID. Still no BillingClient/ProxyBillingActivity lines.
Environment
- Android, app from Internal testing track.
- cordova-plugin-purchase: 13.12.1
- @awesome-cordova-plugins/in-app-purchase-2: 8.1.0
- Capacitor: 5.7.8
- Vue: 3.4.21
- Google Play Billing client is whatever the plugin bundles (no direct dependency in my code).
- Product ID: stable_manager.test.sub
- Base plans: active, available in 173 regions.
Questions
Why would BillingClient never log anything when I trigger catalog refresh or start an order? Does this indicate the native billing client is not initialized/linked by the plugin in release builds from Play?
Are there known issues with cordova-plugin-purchase v13 where store.on is missing and products don’t populate on some minor versions?
What else can prevent products from loading despite:
- app installed from Play Internal testing,
- matching applicationId,
- active base plans,
- tester account properly configured?
How can I reliably verify (from logs or code) that the native BillingClient is actually created and queried in this setup?