feat(singular): add $singularDeviceId subscriber attribute for Singular V2 (#4072)
### Checklist - [x] If applicable, unit tests - [ ] If applicable, create follow-up issues for the other native SDK and hybrids ### Motivation Singular's Event Endpoint V2 (mandatory for Singular accounts created on or after 2026-07-15) requires an `sdid`. The SDID is generated by the Singular SDK, so `collectDeviceIdentifiers()` cannot derive it — the app has to hand it to us. Part of [INT-101](https://linear.app/revenuecat/issue/INT-101/support-singular-event-endpoint-v2-with-sdid) ([Slack thread](https://revenuecat.slack.com/archives/C03HPN9UE80/p1786706850769159)). ### Description New reserved attribution attribute `$singularDeviceId` plus a `setSingularDeviceID` setter, following the existing Kochava/Airbridge/Solar Engine attribution ID pattern. The backend side (Singular V2 payload) lands separately in Khepri. Only the local test/lint suites were run; CI covers the rest. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Additive subscriber-attribute API following an established pattern; no changes to purchase, auth, or billing flows. > > **Overview** > Adds support for passing Singular’s **SDID** into RevenueCat via a new reserved subscriber attribute **`$singularDeviceId`** and public **`setSingularDeviceID`**, mirroring other attribution ID setters (Kochava, Airbridge, Solar Engine). Apps must supply the ID from the Singular SDK because **`collectDeviceIdentifiers()`** cannot produce it—needed for **Singular Event Endpoint V2**. > > The setter flows through **`PurchasesOrchestrator`** into **`subscriberAttributesManager.setAttributionID`**. Public API surface is updated (`api-defauts.txt`, api-tester), plus a unit test reusing the existing attribution ID test helper. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 0d1242dbe8b5516b6332ea33586d6b4d31d5a828. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Álvaro Brey <alvaro.brey@revenuecat.com>
G
Guillem Corominas committed
68b12a7a5f10ff48595b119a54e57f3019617f12
Parent: 9e1e8eb
Committed by GitHub <noreply@github.com>
on 8/25/2026, 3:23:51 PM