Getting started
Set up the project, register your apps, and verify the first signal.
Install the SDK once. Verify revenue across Apple, Google Play, and Stripe. Capture behavioural events, sessions, and runtime errors — all attached to the same customer record. Setup is layered, evidence-based, and observable end-to-end.
Pick the surface you're shipping. Each guide takes about ten minutes and ends with a verified signal in the Crossdeck dashboard — covering all three pillars: subscriptions, analytics, and errors.
Install @cross-deck/web, identify the user, capture your first error, and check an entitlement — all from one snippet.
Add the Swift Package, configure with your public SDK key, send your first event, capture an error, and verify entitlement state.
StartWire Apple, Google Play, or Stripe so Crossdeck can verify subscriptions, refunds, and renewals from the source.
StartSet up the project, register your apps, and verify the first signal.
One mental model across iOS, Android, web, and your server.
Connect Apple, Google, and Stripe with verified webhooks and signed events.
Products are what users buy. Entitlements are what your app unlocks.
Track revenue state in real time as it changes — across every rail.
Privacy-safe product behaviour — sessions, page views, custom events — joined to revenue and errors.
Capture uncaught exceptions, network failures, and runtime errors — with the paying customer attached. Real-time on every tier.
Configure once. Identify users. Track behaviour. Capture errors. Ask Crossdeck for entitlement state. Same shape on iOS, Android, web — and the server when v2.0 ships.
Crossdeck SDKs expose the same lifecycle in platform-native syntax. Learn it once, recognise it everywhere.
configure — initialise with your app ID and public SDK keyidentify — link the current user to your auth IDtrack — send a behavioural event (page view, action, custom)captureError — report an exception with optional contextisEntitled — ask for the verified access statesyncPurchases — forward purchase evidence for verificationimport Crossdeck
// Auto-tracks app lifecycle + screen views and uncaught errors.
Crossdeck.configure(
appId: "app_ios_acme01",
publicKey: "cd_pub_live_xxx",
environment: "production"
)
if let userId = AuthService.shared.currentUser?.id {
await Crossdeck.identify(userId)
}
// Behavioural event
Crossdeck.track("Export.used")
// Manually report a caught error
do { try await processCheckout() }
catch { Crossdeck.captureError(error) }
// isEntitled is sync — no await
if Crossdeck.isEntitled("pro") {
showProFeatures()
}
import app.cross_deck.Crossdeck
// Auto-tracks app lifecycle + screen views and uncaught exceptions.
Crossdeck.configure(
context = this,
appId = "app_android_acme01",
publicKey = "cd_pub_live_xxx",
environment = "production"
)
val userId = authRepository.currentUser?.id
if (userId != null) Crossdeck.identify(userId)
Crossdeck.track("Export.used")
// Manually report a caught exception
try { processCheckout() }
catch (e: Exception) { Crossdeck.captureError(e) }
if (Crossdeck.isEntitled("pro")) {
showProFeatures()
}
import { Crossdeck } from "@cross-deck/web"
// One init. Subscriptions + analytics + errors all activate together.
// Auto-tracks page.viewed, sessions, and uncaught errors.
Crossdeck.init({
publicKey: "cd_pub_live_xxx",
})
// After your auth resolves the signed-in user
if (session?.user?.id) await Crossdeck.identify(session.user.id)
// Behavioural event
Crossdeck.track("checkout_started", { product: "annual_pro" })
// Manually report a caught error
try { await processCheckout() }
catch (err) { Crossdeck.captureError(err) }
// Real-time entitlement check — under 50ms, no await.
if (Crossdeck.isEntitled("pro")) showProFeatures()
Generate exact install prompts for the AI coding tools your team already uses. Each prompt includes your app ID, public SDK key, and a typed task list.
The Crossdeck team helps developers verify SDK heartbeat, payment-rail credentials, product mappings, entitlement projections, and the sandbox-to-production handover.