Integration
Troubleshooting
Fix isReady false, origin mismatch, and duplicate loads.
Symptom → fix
| Symptom | Likely cause | Fix |
|---|---|---|
| isReady() always false | Script blocked or wrong URL | Check network tab; copy script from dashboard |
| No events in dashboard | Origin not allowlisted | Add exact origin in Project settings |
| origin_rejected in setup | Scheme/host/port mismatch | Match http vs https and hostname |
| Duplicate events | Loader injected twice | Single inject function; guard with loaded flag |
| No replay | Recording disabled or plan limit | Check project settings and plan |
| Experiment always null | Test not active or wrong key | Match experimentKey from test creator |
| 403 iOS app not allowlisted | Bundle ID or Team ID mismatch | Match CFBundleIdentifier and Apple Team ID exactly (case-insensitive for team) |
| 403 Android app not allowlisted | Package or signing cert mismatch | Use release keystore SHA-256; debug builds often use a different cert |
| 401 on mobile ingest | Missing or wrong publishable key | Create pk_live_* in Project settings; never use sk_live_* in the app |
| No native replay in dashboard | Recording consent not granted | Call setRecordingConsent(true) after CMP approval |
| Web events on mobile project | Wrong setup platform selected | Create a separate web project or switch platform before verification locks |
Network checklist
- Client bundle returns 200 from allowed origin
- POST /api/tracking returns 2xx (not 403 origin)
- CMP did not block script before consent