General troubleshooting
The failure modes we actually see, with the check that resolves each one.
A dashboard change isn't showing in the app
Config is fresh for 5 minutes and refreshes on launch and foreground — background the app and bring it back. Still stale? The SDK fails open to its cached config when a fetch fails: check apiBase is reachable from the device and the key is the right app's.
Events aren't arriving
- Check the event's capture toggle — disabled events are dropped at ingestion and devices stop sending them.
- Dashboard previews drop everything by design — events, surveys, errors. Test in a real build.
- Batches flush every ~4 seconds or 25 events; a crash right after an event can lose the tail.
flush()forces it.
The paywall says "Update the app to see this offer."
The live config names a template this build's SDK doesn't ship — old build, new template key. Devices on current builds render it; the fallback (with a working Close) is what protects the old ones. paywall_template_unsupported events tell you how many users are seeing it.
A payment sheet opened inside the app
That build predates SDK 0.6.1 — web checkout must open the system browser to be compliant. Upgrade the SDK; see Store rejections for why this rule is load-bearing.
API answers 401 or an empty entitlement
401— missing or unknownx-api-key. Keys are per-app; copy it from Dashboard → Setup.status: "none"for a user you know exists — the id you queried isn't one Fictura has seen. The lookup matches your account id, the RevenueCat id, or the device id; send the same id your app reports viagetAccountId.- A webhook signature that won't verify — you must HMAC the raw request body, before any JSON parsing re-serializes it. Signature verification.
console.error isn't creating issues
By design in dev builds — React and LogBox route their own warnings through console.error, so hooking it in development would bury real errors. Crashes and rejections report in both; release builds report all three paths.