Hello,
I’m having an issue with Android purchases in my app and would appreciate guidance.
Current status:
-
Subscriptions are fully configured in RevenueCat and Google Play.
-
Offerings are fetched successfully on both platforms.
-
Purchases work correctly on:
-
iOS production
-
Test environments both on ios/android
-
-
On Android production, the app successfully retrieves offerings and packages, but attempting to purchase always fails with:
“subscription plan not available”
What I have already confirmed:
-
Android app is installed directly from Google Play (closed testing track).
-
Tester Google account is properly added and opted into the test track.
-
Correct Android public SDK key is used.
-
Products are published in Google Play:
-
noor_monthly_premium -
noor_annual_premium
-
-
These products appear correctly in RevenueCat Android products and offerings.
-
Offerings are returned correctly from
Purchases.getOfferings()on Android. -
The same code path works on iOS without any issues.
Purchase logic used in the app example :
// Find package by product identifier
const targetProductId = selectedPlan === 'monthly'
? PRODUCT_IDS.MONTHLY
: PRODUCT_IDS.YEARLY;
// Try to find by product identifier first
let pkg = packages.find(p => p.product.identifier === targetProductId);
// Fallbacks
if (!pkg) {
pkg = packages.find(
p =>
p.identifier.toLowerCase().includes(selectedPlan) ||
p.product.identifier.toLowerCase().includes(selectedPlan)
);
}
if (!pkg) {
pkg = packages.find(p => {
const id = p.identifier.toLowerCase();
return selectedPlan === 'monthly'
? id.includes('month')
: id.includes('annual') || id.includes('year');
});
}
if (!pkg) {
fireToast.error(t('subscription.errors.packageNotFound'));
return;
}
const result = await purchase(pkg);
Observed behavior:
-
getOfferings()returns the correct production packages on Android. -
When calling
Purchases.purchasePackage(pkg), Google Play rejects with “subscription plan not available”. -
The exact same flow works on iOS production.
