Identity & users
install_uuid, SetUserId, anonymous → known stitching, and the device identifiers Reflect collects.
install_uuid
Generated on first launch and stored in PlayerPrefs at key reflect.install_uuid. It’s the SDK’s primary key for a device and it’s included in every event.
- Survives: app updates, sessions, network restarts.
- Doesn’t survive:
PlayerPrefs.DeleteAll(), app reinstalls (per OS policy),DeleteUserData().
Debug.Log(ReflectSDK.InstallUuid);
// "8f2a1c0e94d7423b8b53af7c9e21d630"SetUserId — known users
Once you authenticate a user (login, sign-up, account link), call:
ReflectSDK.SetUserId("user_42");
// Read it back
Debug.Log(ReflectSDK.UserId);
// Sign-out → back to anonymous
ReflectSDK.SetUserId(null);Subsequent events carry user_id: "user_42" in the payload.
Anonymous → known stitching
The first time you call SetUserId with a non-null value, the SDK auto-fires a single _user_alias event. The server writes a row into user_aliases mapping install_uuid → user_id. Reports can then JOIN on user_id to stitch pre- and post-login funnels.
// First launch — anonymous user does tutorial
ReflectStandardEvents.TutorialCompleted("intro");
// → event { install_uuid: "...", user_id: null, ... }
// Later — they sign up
ReflectSDK.SetUserId("user_42");
// → SDK auto-fires { event_name: "_user_alias", install_uuid: "...", user_id: "user_42" }
// → server writes user_aliases row
// Subsequent events
ReflectStandardEvents.LevelCompleted(1);
// → event { install_uuid: "...", user_id: "user_42", ... }The stitch event is fired once per anonymous → known transition. Re-issuing the same user_id later is a no-op.
Device identifiers
| Identifier | Platform | When collected |
|---|---|---|
gaid | Android | If limitAdTracking=false AND advertising consent granted |
idfa | iOS | Only after ATT prompt returns Authorized |
idfv | iOS | Always (per-vendor, no consent needed) |
android_id (SSAID) | Android | Always |
If RequireAdvertisingConsent=true in your config, GAID/IDFA are NOT collected until you call SetAdvertisingConsent(true). Recommended for EU/EEA/UK distribution.
iOS App Tracking Transparency (ATT)
// Auto-prompt on first launch (set in config)
new ReflectConfig {
AutoRequestIosTracking = true,
...
}
// OR call manually when you have a good moment in your UX
ReflectSDK.RequestIosTracking(status => {
if (status == IosTrackingStatus.Authorized) {
// IDFA will now be on subsequent events
}
});The SDK automatically injects NSUserTrackingUsageDescription into your iOS Info.plist via ReflectBuildPostProcessor. Customize the wording in Editor/ReflectBuildPostProcessor.cs (AttUsageDescription field).
Audience tags
Apply segmentation tags so reports can filter by cohort:
ReflectSDK.SetAudience("paying", "whale_v3");The SDK fires a _set_audience event with the tags array; the server upserts install_audiences rows (one per tag). Reuses the existing /event ingestion pipe — no extra Cloudflare requests.