User Identification and Properties in Mobile SDK

Zeta’s Mobile SDK provides a flexible way to capture user properties that help personalize engagement, track behaviors, and optimize experiences. By default, the SDK supports identification and collection of standard properties (such as user ID, email, and phone number).
In addition, you can extend the SDK to collect custom user properties. This allows you to define and capture attributes relevant to your unique business and user context—going beyond the defaults to model what truly matters for your customer experience.
User Identification in ZMP
ZMP supports flexible user identification to ensure accurate profile creation and session association. When establishing the identification field from mobile app to ZMP, that will beome then the primary key field to update a profile’s record on. A user_id or email are the out of the box native identifiers, with the unique_client_id being a value that can be setup by your account team to allow for 1 or many other client identifiers to be used to create/update a profile with. When establishing the primary identifer field, it is important to note that a profile can have one or more identifiers, although it is most common to see only one across the following:
user_id (“uid”)
email
unique_client_id (“uclid” for short)
A unique user in ZMP can be identified using:
User Identification Support Matrix
Identifier | iOS SDK Support | Android SDK Support | Version Notes |
|---|---|---|---|
user_id | ✅ Supported | ✅ Supported | Supported in all SDK versions. When loaded to ZMP, it becomes ‘uid’ |
✅ Supported | ✅ Supported | Supported in all SDK versions | |
client-defined unique identifier (UCLID) | ✅ Supported | ✅ Supported | Supported from v0.2.0 onwards (not supported below 0.2.0) |
Standard User Properties
The SDK provides built-in support for collecting commonly used properties:
Category | Property | Description |
|---|---|---|
Identity |
| Your app’s stable user identifier. Setting this starts an identity session. |
Identity |
| Display and structured names. |
Identity |
| Optional source tag for where/how the user was created. |
Lifecycle |
| ISO‑8601 UTC timestamp when the user signed up. |
Contact |
| Email address: supports additional info (subscription status, preferences, timestamps, custom contact properties). |
Contact |
| Phone number; supports additional info (type, opt‑in, timestamps, custom contact properties). |
Device | Push token | Device push token for notifications. |
Device |
| Apple advertising/vendor identifiers, if available and permitted. |
Location |
| Last known coordinates and capture state. |
System |
| Zeta’s unique user identifier; retrievable from the SDK and via delegate. |
These properties are typically set during the user identification process.
Collecting Custom Properties
Every business has unique attributes it needs to capture, such as loyalty tier, preferred language, subscription type, or even app-specific behaviors.
The SDK supports this through custom user property collection. You can define any key-value pair and attach it to the user profile.
Example (iOS SDK – Swift)
CODE
|
|---|
Example (iOS SDK – Objective-C)
CODE
|
|---|
Client-Defined Unique Identifier (UCLID)
This allows clients to use their own stable customer identifiers (for example, customer_id, external_user_id, or account_id) to uniquely identify users within their ZMP namespace.
Key Characteristics
Must be unique within the client’s namespace
Acts as a primary identity key
Can be used for profile creation and retrieval
Used for session association
Reduces dependency on email or Zeta-generated identifiers
This enables deterministic mapping between a client’s internal systems and ZMP profiles.
Identity Resolution Behavior
When a UCLID (or other supported identifier) is provided:
1. ZMP checks for an existing profile associated with that identifier.
2. If found → the session is attached to the existing profile.
3. If not found → a new profile is created.
4. A system-level identifier (BSIN) is generated internally for platform reference.
BSIN remains a system-generated, read-only identifier retrievable via the SDK
The SDK includes built-in support for standard identifiers such as:
user_id— Your app’s stable user identifieremail— Contact email address
These can be used independently or alongside a client-defined identifier, depending on the client’s identity strategy.
UCLID is not a custom property.
Custom properties store additional attributes (e.g., loyalty tier, subscription status) and are key-value pairs used for segmentation. On the other hand,
UCLID is used for identity resolution, determining how profiles are created and merged, and also functions as a primary identifier.
Best Practices
Keep keys consistent: Define a schema for your property names (e.g., snake_case or camelCase).
Use meaningful values: Ensure values are descriptive and can be used effectively in segmentation.
Avoid sensitive data: Do not send sensitive identifiers such as passwords or financial details.
Test before release: Validate custom properties in your staging environment before going live.