Re-engagement & uninstalls
Attributing deep-link re-opens of existing users to retargeting clicks, and detecting uninstalls / reinstalls with silent push.
Updated 2026-09-02
Re-engagement#
When an existing user opens the app through a smart link, universal link or push, the SDK calls:
{ "device_id": "<sha256>", "url": "https://links.yourbrand.com/product/123?wc_click_id=abc", "occurred_at": "2026-09-02T09:40:00Z" }The open is attributed to the click (click_id or the id parsed from url) inside the app's clickLookbackDays window, returning { "reengagement_id", "attributed", "campaign_id", "deep_link_path" }. Re-engagements and their subsequent events (purchases within the re-engagement window, default 7 days) are reported on Re-engagement and are separate from installs so retargeting ROAS is measured on its own.
Uninstall tracking#
- The SDK registers the push token:
POST /api/sdk/v1/push-tokenwithplatform=ios | android | tvos | android_tv | fire_tv. - Configure push credentials per app under Apps & SDK → Uninstall tracking: APNs (team id, key id,
.p8, topic) and / or FCM (service-account JSON). Stored encrypted. - The uninstall check (
pnpm uninstall:check, scheduled daily) sends a silent push (content-available: 1/ FCM data message with no payload) to every install with a token.Unregistered/BadDeviceToken/UNREGISTEREDresponses mark the installuninstalledAt. - A later install call from the same device is recorded as a reinstall.
Uninstall rate by campaign, cohort and day-since-install is shown on Installs → Uninstalls and available through get_metric_timeseries (uninstalls).
Silent pushes are not delivered while the app is force-quit on iOS; a device is only marked uninstalled on an explicit APNs / FCM unregistered response, never on silence.