Documentation
Mobile troubleshooting
Every failure a real integration has hit, what it looks like, and which side fixes it.
The app
| Symptom | Cause | Fix |
|---|---|---|
| App crashes on launch: *"the native module RNCConfigModule was not found"* (React Native) | The release bundle was built without react-native-config's native half -- usually a CI runner that did not run npm install after the dependency was added. A plain import Config then throws before initialize() runs. | Rebuild the native app; verify the module is in the release classpath. Read the secret defensively as shown on the React Native page so this can never take the app down again. |
pod install fails: *"Unable to find a specification for RoasSensor"* (Flutter, React Native) | The native iOS SDK is served from git and the app's Podfile does not say where. | Add the pod 'RoasSensor', :git => …, :tag => … line to ios/Podfile. |
Swift build fails on a missing member initialize | The iOS entry point is Roas.configure(...); initialize is the Android name. | Use configure. |
| Nothing arrives at all; the delivery log says the request failed | baseUrl omitted or wrong. The SDK's default is the production host, and a release build refuses cleartext http:// outright. | Pass the baseUrl the panel prints, and rebuild -- it is baked in at build time. |
| Every beacon is rejected (401) | The secret was passed as an empty string, which signs with an empty key. | Read it so that missing means null / undefined / nil, never "". |
Install arrives signed = false | The secret did not reach initialize(): .env or local.properties missing at build time, --dart-define not on the build command, or R8 stripped BuildConfig in a React Native release build. | Each SDK page's secret section. For React Native, the -keep class …BuildConfig ProGuard rule. |
Attribution
| Symptom | Cause | Fix |
|---|---|---|
Install referrer is (not set) after tapping the link | A reinstall on a device and account that had the app before, or an install started from the Play *website* rather than the Play Store app. Play issues no new referrer in either case. | Test on a device that has never had the app, and make sure the link lands in the Play Store app. See Testing. |
Install referrer is google-play / organic | The tester installed from the store directly, not through the link. | Tap the link first; install from the page it opens. |
| Install referrer is empty | Installed with adb, Android Studio, Xcode or run-android. No store, no referrer. | Install from the store for the attribution test. |
Deep link taps do not produce an app_open | The URL is not being forwarded to handleDeepLink, or the app has no intent filter / associated domain for it. | Forward every incoming URL as shown on the SDK page. If the app handles no links, this is expected and harmless. |
Sale booked but UNATTRIBUTED | obfuscatedAccountId / appAccountToken was not set on the purchase (the store returns the value on the purchase object -- check it), or the install itself carried no referrer. | Set the field. On iOS, the value must be appAccountToken(), a UUID; the Android visitor id is silently dropped by StoreKit. |
Revenue
| Symptom | Cause | Fix |
|---|---|---|
| Purchase made, nothing arrives from Google Play | The Pub/Sub subscription is Pull (the console default) instead of Push; the topic was never saved in Play Console; or the topic lacks the Publisher grant for Google's notification account. | Google Play revenue, the checklist at the end. Pub/Sub keeps undelivered messages for seven days, so fixing it delivers the backlog. |
| Play notifications arrive, nothing books | We could not read the purchase. Either the Google Play Android Developer API is not enabled on the Cloud project, or the service account lacks *View financial data* on the app. | Both are in the Play Console / Cloud Console; the same page lists them. A new grant can take a few minutes to propagate. |
| Test subscription expires after one period with no renewal | Play (or your own backend) cancelled auto-renew. Play Console → Order management shows the reason on the order. | Not a tracking problem. Renewals book like purchases once they occur. |
| Apple: notifications never arrive | The App Store Connect URL is unset, set only for Production while you test in Sandbox, or points at a customer backend that does not forward. | App Store revenue: set both URLs, or use the forwarding option. |
verifyPurchase answers *could not verify* (422) | No store credential on the account (In-App Purchase key / Play service account), or on iOS a local StoreKit configuration file transaction, which Apple's server has never seen. | Add the credential. Test iOS with a real sandbox purchase, not a .storekit file. |
| Every sale counted twice | Two revenue routes for the same purchases: store notifications and a Conversions API post from your server. Cross-source dedup matches on email, and store notifications carry none. | One route per app. If you use RevenueCat, use only RevenueCat. |
Still stuck? Talk to us with the app's public key and the time of the test; the rows are on our side and a real engineer reads them.

