Skip to content
Codeskop

Troubleshooting

The SDKs never throw, so a broken setup looks exactly like a quiet app. Work through these causes in order. The most common ones come first.

No events at all

1. The key is wrong

The SDK only accepts a public key: cs_live_pk_… or cs_test_pk_…. A secret key (cs_…_sk_…), a truncated paste, or stray whitespace leaves the SDK silently switched off; there's no error in the console or Logcat. Copy the public key from the dashboard again.

2. Your plan or project isn't active

When the SDK starts, it asks Codeskop whether capture is enabled for your project. If the plan is inactive or capture has been switched off, the answer is "no" and nothing is captured or sent. Check your plan in the dashboard.

Changes apply on the next start

This check happens once each time the SDK starts. After reactivating a plan, restart the app or reload the page.

3. Events haven't been sent yet

Events are queued on the device and sent in batches, not one by one:

  • Android: about every 15 minutes while connected, and right away when the device reconnects. Sending the app to the background doesn't trigger a send.
  • Web: when 20 events are queued, every 30 seconds, when the browser comes back online, and when the tab is hidden.

While debugging, force a send:

Android
// From any coroutine, e.g. a debug menu actionlifecycleScope.launch {    val scheduled = Codeskop.flush()    Log.d("Codeskop", "flush scheduled: $scheduled")}
Web
import { recordException, flush } from "@codeskop/tracker"; recordException(new Error("Codeskop test event"));console.log("send attempted:", await flush());

4. The request is blocked (web)

Open the Network tab and look for a POST to /v1/events. If it's missing or fails:

  • An ad-blocker or privacy extension may be blocking it. Try a clean browser profile.
  • Your Content-Security-Policy must allow the ingest host in connect-src: https://api.codeskop.com.
  • If you set a custom endpoint, check it for typos.

CORS errors

Codeskop doesn't restrict which websites can send events today, so a CORS error isn't an "unregistered domain" rejection. It almost always means one of the three causes above.

Some events are missing

Network timings are sparse (Android)

api_timing events can be sampled: only a share of them are kept to control volume. Crashes and ANRs are never sampled away. To check the whole pipeline, send a handled exception; exceptions aren't sampled unless a rate is set for them.

No network events at all

  • Android: network capture needs the OkHttp adapter added to the OkHttpClient your app actually uses. Clients created elsewhere (a second client, a third-party SDK's own client) aren't covered. See Network capture.
  • Web: check you haven't set captureNetwork: false. Calls to the Codeskop ingest host itself are intentionally never captured.

Events show as anonymous (Android)

On Android, the user ID from identify is held in memory only. Call it again on every app launch once you know who's signed in, not only right after login. See Identify users.

Data looks different than expected

Error messages say [REDACTED]

Expected. Messages often contain user input, so both SDKs replace them before anything leaves the device. The exception type and stack trace are kept, so group and debug by those. There's no setting to turn this off.

URLs have no query string

Also expected: query strings often carry tokens, so only the host and path are kept.

Web requests only show a total duration

Browsers only expose the detailed timing breakdown (DNS, connect, TLS, time to first byte) for cross-origin requests when the API sends a Timing-Allow-Origin response header. Add that header on your API to get the full breakdown.

ANRs have no stack trace

Expected on Android. ANR reports tell you that the main thread froze and when; they don't include a stack trace. See ANR Monitoring.

Android setup issues

Auto-init from the manifest isn't working

The meta-data entry must be inside <application> and named exactly codeskop.api_key:

AndroidManifest.xml
<!-- Inside <application>, not <activity> --><meta-data    android:name="codeskop.api_key"    android:value="cs_live_pk_YOUR_KEY" />

My config changes are ignored

The SDK initializes once per process. If you use both the manifest key and CodeskopAndroid.init, the first one wins and later calls are ignored. Pick one approach.

Opted-out users still send events

On Android, setEnabled(false) isn't saved between launches, and a call made right after init can be lost while setup is still running. For users who opted out, the reliable approach is to not initialize the SDK at all.

Build fails with a minSdk error

The Android SDK requires minSdk 24 (Android 7.0) or higher.

React issues

An error in a click handler wasn't reported by the boundary

React error boundaries only catch errors thrown during render, not in event handlers, useEffect, or async code. Uncaught ones still reach the SDK's global handlers; for errors you catch, call recordException. See React.

Changing the provider's config does nothing

By design: CodeskopProvider reads config once, on mount. Call init() directly to change config at runtime.

Still stuck?

Contact support with your platform, SDK version, and what you see in the Network tab or Logcat, and we'll help you track it down.