I am experiencing a persistent issue where Purchases.getOfferings() and sometimes getProducts() hangs indefinitely on Android. No error is thrown, and no response is returned, even after waiting for several minutes. This prevents the paywall from being presented. iOS is working as expected.
Environment:
- Framework: React Native / Expo (SDK 54)
- Build Tool: EAS Build (Development Client)
- SDKs: react-native-purchases and react-native-purchases-ui (v8.12.0)
- Platform: Android (Testing on physical device)
What I have verified and configured:
- RevenueCat Dashboard:
- Google Play credentials show as "Valid credentials" with green checkmarks for Subscriptions, InAppProducts, and Monetization APIs.
- Account-level permissions (including "View app information and download bulk reports") have been granted in the Google Play Console.
- The Public API Key in the app matches the one in the dashboard.
- App Configuration (app.json / Manifest):
- Declared com.android.vending.BILLING permission.
- Set launchMode to singleTop (previously singleTask).
- Package name matches exactly between RevenueCat, app.json, and Google Play Console.
- Google Play Console:
- App is published to an Internal Testing track.
- The test account is added to License Testing with "Licensed" response.
- The tester has explicitly opted into the test track via the web opt-in link.
- Products are active and marked as "Backwards compatible".
Diagnostic Logs: I added custom logging around the call. My logs show the getOfferings call starting, but it never reaches the "Done" or "Error" blocks:
log('RC_GET_OFFERINGS_START');
try {
const offerings = await Purchases.getOfferings();
log('RC_GET_OFFERINGS_DONE'); // This never triggers
} catch (e) {
log('RC_GET_OFFERINGS_ERROR'); // This never triggers
}I have tried clearing the Play Store cache and data on the device, and I've ensured the tester account is the primary account on the device.
Are there any known issues with specific versions of the billing library or common "silent" blockers on the Google Play side that would cause this indefinite hang?
